開発環境
- 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 コメント:
コメントを投稿