2013年10月25日金曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の13章(新しいクラスの作成と既存クラスの変更), 13.2(クラスの作り方)、13.3(インスタンス変数)、13.4(newとinitialize)、13.5(ベビードラゴンゲーム)、13.6(練習問題の続き)、対話的ベビードラゴンをDartで解いてみる。

その他参考書籍

対話的ベビードラゴン

コード

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 コメント:

コメントを投稿