開発環境
- OS X Lion - Apple(OS)
- Dart Editor (開発環境)
- Dart (プログラミング言語)
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の13章(新しいクラスの作成と既存クラスの変更), 13.2(クラスの作り方)、13.3(インスタンス変数)、13.4(newとinitialize)、13.5(ベビードラゴンゲーム)、13.6(練習問題の続き)、対話的ベビードラゴンをDartで解いてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
対話的ベビードラゴン
コード
sample.dart
import 'dart:io' as io; import 'dart:convert' as convert; class Dragon{ String name; bool asleep = false; int stuff_in_belly = 10, stuff_in_intestine = 0; Dragon(String name){ this.name = name; print('${name}が生まれました'); } void feed(){ print('${name}にご飯をあげます。'); stuff_in_belly = 10; passageOfTime(); } void walk(){ print('${name}をトイレに連れていきます。'); stuff_in_intestine = 0; passageOfTime(); } void putToBed(){ print('${name}を寝かしつけます。'); asleep = true; for(var i = 0; i < 3; i += 1){ if (asleep){ passageOfTime(); } if (asleep){ print('${name}がいびきをかいて、部屋が煙だらけです。'); } } if (asleep){ asleep = false; print('${name}はゆっくり目覚めます。'); } } void toss(){ print('${name}に高い高いをします。'); print('${name}が笑ってあなたの眉毛が焦げます。'); passageOfTime(); } void rock(){ print('${name}をやさしくあやします。'); asleep = true; print('${name}は少し居眠りをします。'); passageOfTime(); if (asleep){ asleep = false; print('しかし、やめると起きてしまいます。'); } } bool isHungry(){ return stuff_in_belly <= 2; } bool isPoopy(){ return stuff_in_intestine >= 8; } void passageOfTime(){ if (stuff_in_belly > 0){ stuff_in_belly -= 1; stuff_in_intestine += 1; } else { if (asleep){ asleep = false; print('${name}が突然目を覚まします!'); } print('${name}がお腹をすかせています。我慢できなくてあなたを食べました。'); io.exit(0); } if (stuff_in_intestine >= 10){ stuff_in_intestine = 0; print('うわっ、${name}がお漏らしを…'); } if (isHungry()){ if (asleep){ asleep = false; print('${name}が突然目を覚まします。'); } print('${name}のお腹が鳴っています。'); } if (isPoopy()){ if (asleep){ asleep = false; print('${name}が突然目を覚まします。'); } print('${name}がうんちのためにしゃがみ込みます。'); } } } void main(){ print('ベビードラゴンの名前を入力してください。'); var name = io.stdin.readLineSync(); var pattern = new RegExp(r'^\s*$'); if (pattern.hasMatch(name)){ name = '匿名'; } var pet = new Dragon(name); while (true){ print('コマンド(feed/walk/bed/toss/rock)を入力: '); var command = io.stdin.readLineSync(encoding: convert.UTF8); if (pattern.hasMatch(command)){ break; } switch (command){ case 'feed': pet.feed(); break; case 'walk': pet.walk(); break; case 'bed': pet.putToBed(); break; case 'toss': pet.toss(); break; case 'rock': pet.rock(); break; default: print('コマンド入力を確認してください。'); } } }
入出力結果
ベビードラゴンの名前を入力してください。 匿名が生まれました コマンド(feed/walk/bed/toss/rock)を入力: feed 匿名にご飯をあげます。 コマンド(feed/walk/bed/toss/rock)を入力: toss 匿名に高い高いをします。 匿名が笑ってあなたの眉毛が焦げます。 コマンド(feed/walk/bed/toss/rock)を入力: walk 匿名をトイレに連れていきます。 コマンド(feed/walk/bed/toss/rock)を入力: bed 匿名を寝かしつけます。 匿名がいびきをかいて、部屋が煙だらけです。 匿名がいびきをかいて、部屋が煙だらけです。 匿名がいびきをかいて、部屋が煙だらけです。 匿名はゆっくり目覚めます。 コマンド(feed/walk/bed/toss/rock)を入力: rock 匿名をやさしくあやします。 匿名は少し居眠りをします。 しかし、やめると起きてしまいます。 コマンド(feed/walk/bed/toss/rock)を入力: bed 匿名を寝かしつけます。 匿名が突然目を覚まします。 匿名のお腹が鳴っています。 コマンド(feed/walk/bed/toss/rock)を入力: bed 匿名を寝かしつけます。 匿名が突然目を覚まします。 匿名のお腹が鳴っています。 コマンド(feed/walk/bed/toss/rock)を入力: bed 匿名を寝かしつけます。 匿名が突然目を覚まします。 匿名のお腹が鳴っています。 匿名がうんちのためにしゃがみ込みます。 コマンド(feed/walk/bed/toss/rock)を入力: bed 匿名を寝かしつけます。 匿名が突然目を覚まします! 匿名がお腹をすかせています。我慢できなくてあなたを食べました。
0 コメント:
コメントを投稿