広告
  サイト内検索:
<Let's create a game!> Introduction of programming for absolute beginners English
 

SESSION 13 その22
対象処理モードを作る(移動処理のみ) つづき

つまり、まとめると
対象処理モードは

・現在の部屋番号
・行動処理モードで
 選んだ行動コマンド番号

によって分岐する。


分岐は出力の表の
真ん中の列のようになるね。
 
分かった!

おっけーです!
処理の分岐は
出力に注目ね!
 
プログラムの構造(詳細):出力処理
開始 - -
初期化 - -
行動処理モード 詳細 対象処理モード 詳細 結果処理モード 詳細
- - 行動する(行動内容を処理)
[出力] 部屋の状況と行動リストの表示
「現在の部屋」>「状況メッセージ」と「行動リスト」を表示
現在の部屋 表示メッセージ
(行動リスト)
入口 ドアがある部屋です

どうする?
1:移動 2:見る 3:使う
廊下 廊下です。

どうする?
1:移動 2:見る 3:使う
寝室 寝室です。
ベッドがあります。

どうする?
1:移動 2:見る 3:使う
[出力] 対象リストの表示
「現在の部屋」>「選ばれた行動コマンド」>「対象リスト」を表示
現在の部屋 行動 表示メッセージ
(対象リスト)
入口 移動 どこに?

1:入口 2:廊下 3:寝室
見る どこを?

1:ドア
使う なにを?

1:暗証番号1
2:暗証番号2
3:暗証番号3
4:金庫の鍵(所持の場合)
5:爆弾(所持の場合)
廊下 移動 どこに?

1:入口 2:廊下 3:寝室
見る どこを?

1:窓 2:絵画
使う なにを?

1:暗証番号1
2:暗証番号2
3:暗証番号3
4:金庫の鍵(所持の場合)
5:爆弾(所持の場合)
寝室 移動 どこに?

1:入口 2:廊下 3:寝室
見る どこを?

1:ベッド 2:テーブル 3:金庫
使う なにを?

1:暗証番号1
2:暗証番号2
3:暗証番号3
4:金庫の鍵(所持の場合)
5:爆弾(所持の場合)
[出力] 行動の結果を表示
「現在の部屋」>「選ばれた行動コマンド」>
「選ばれた対象コマンド」>「結果メッセージ」を表示
現在の部屋 行動 対象 表示メッセージ(結果) 処理
入口 移動 全ての場所 移動します。 移動
処理
見る ドア ドアです。  
使う 暗証番号1 使えません。  
暗証番号2 使えません。  
暗証番号3 使えません。  
金庫の鍵
(所持の場合)
使えません。  
爆弾(所持の場合) ドアを破壊しました。 終了
処理
廊下 移動 全ての場所 移動します。 移動
処理
見る 窓です。  
絵画 絵です。  
使う 暗証番号1 使えません。  
暗証番号2 使えません。  
暗証番号3 使えません。  
金庫の鍵
(所持の場合)
使えません。  
爆弾(所持の場合) 使えません。  
寝室 移動 全ての場所 移動します。 移動
処理
見る ベッド ベッドです。  
テーブル1回目 テーブルです。  
テーブル2回目 テーブルです。  
テーブル3回目 鍵を見つけました。 取得
処理
金庫 金庫です。  
使う 暗証番号1 開きません。  
暗証番号2 金庫が開きました。 取得
処理
暗証番号3 開きません。  
暗証番号(鍵なし) 開きません。  
金庫の鍵
(所持の場合)
使いました。  
爆弾(所持の場合) 使えません。  
[入力] 行動を選ぶ
(行動コマンド入力)
[入力] 対象を選ぶ
(対象コマンド入力)
[入力] 待機する
- - 脱出できたら(終了だったら)
- - 終了


そして、最初に
制御文で分岐を
全部作ってしまおう。

ただし、
実装する処理は
「移動」処理だけね。
えっと。
if文で全部の分岐を
作って・・・

今は、inputNunには
「移動」だけが入ってくる
って考えて作るんだね。
作るのは
移動だけ。
だから
骨組みって
言ってた
んだね。
 
 
出力の詳細(対象処理モード)
 
[出力] 対象リストの表示
「現在の部屋」>「選ばれた行動コマンド」>「対象リスト」を表示
現在の部屋 行動 表示メッセージ(対象リスト)
入口 移動 どこに?

1:入口 2:廊下 3:寝室
見る どこを?

1:ドア
使う なにを?

1:暗証番号1
2:暗証番号2
3:暗証番号3
4:金庫の鍵(所持の場合)
5:爆弾(所持の場合)
廊下 移動 どこに?

1:入口 2:廊下 3:寝室
見る どこを?

1:窓 2:絵画
使う なにを?

1:暗証番号1
2:暗証番号2
3:暗証番号3
4:金庫の鍵(所持の場合)
5:爆弾(所持の場合)
寝室 移動 どこに?

1:入口 2:廊下 3:寝室
見る どこを?

1:ベッド 2:テーブル 3:金庫
使う なにを?

1:暗証番号1
2:暗証番号2
3:暗証番号3
4:金庫の鍵(所持の場合)
5:爆弾(所持の場合)
 
制御文で分岐の「枠」を作って、処理の実装は「移動」だけ作る

  ヒント2:対象リストを表示する

文字で
書いちゃってる
でしょ。
対象リストの表示だけど。

これは行動リストとは
違う書き方にしよう。

行動リストの表示は
入力番号を直接
表示部分に書いてる
よな。
 
そうだね。

同じじゃだめなの?
   
 
 

テキストアドベンチャーゲーム
行動処理モード
KottonCastleEscapeのKCEMain.java)141行目~
 
・・・    
161           //行動コマンドの一覧を表示
162           System.out.println("");
163           System.out.println("---------------------------------------------");
164           System.out.println("どうする?");
165           System.out.println("1:移動 2:見る 3:使う");
166           System.out.print(">");
167       }
・・・    
入力番号を表示部分に直接書いてしまっている


この書き方だと・・・

例えば、
2番目に「たたく」って
コマンドを追加するとしたら。

その場合、定数と表示と
出力部分と2箇所
書き換えないといけない。

どちらか書き換えるのを
忘れたらバグになる。
そっか。

表示の方の数値を
書き換えるの忘れたら・・・

2番は「見る」なのに
「たたく」になっちゃうんだ。
あたし、
忘れちゃいそう!
 

テキストアドベンチャーゲーム
行動処理モード
KottonCastleEscapeのKCEMain.java)
 
・・・      
        //********************************************  
        //                   定数  
        //********************************************       
        //行動コマンド  
        private static final int ACT_NONE = 0;//無し  
        private static final int ACT_MOVE = 1;//移動  
        private static final int ACT_HIT = 2;//たたく たたくを追加
        private static final int ACT_LOOK = 3;//見る 番号をずらす
        private static final int ACT_USE = 4;//使う 番号をずらす
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
 
            //行動コマンドの一覧を表示  
            System.out.println("");  
            System.out.println("---------------------------------------------");  
            System.out.println("どうする?");  
            System.out.println("1:移動 2:見る 3:使う"); 番号の変更が必要
            System.out.print(">");  
       
・・・      
行動コマンドを増やした場合、定数の番号が変わる可能性がある。
その場合、表示の番号の変更が必要になる。


余計な
手間が
省けるし。
だから、
入力番号の表示には
定数を利用しよう。


そうすれば、
定数を書き換えれば
自動的に表示も
書き換わるね。
 
連動するんだね。

いいね!これなら
間違えないですむ!
  自動
なんだね!
 
 

テキストアドベンチャーゲーム
行動処理モード
KottonCastleEscapeのKCEMain.java)
 
・・・      
        //********************************************  
        //                   定数  
        //********************************************       
        //行動コマンド  
        private static final int ACT_NONE = 0;//無し  
        private static final int ACT_MOVE = 1;//移動  
        private static final int ACT_HIT = 2;//たたく たたくを追加
        private static final int ACT_LOOK = 3;//見る 番号をずらす
        private static final int ACT_USE = 4;//使う 番号をずらす
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
 
            //行動コマンドの一覧を表示  
            System.out.println("");  
            System.out.println("---------------------------------------------");  
            System.out.println("どうする?");  
            System.out.println( ACT_MOVE  + ":移動 " + ACT_LOOK + ":見る " + 番号が変わる
                                         ACT_USE + ":使う");  
            System.out.print(">");  
       
・・・      
定数を使って番号を表示するようにする。
この場合、定数の値を変更しても、表示番号も連動して変わる。


対象リストはこの方法で
表示するようにしてくれ。


行動リストの表示は
今回は変えないでいいよ。
3つ固定だからね。

はい、分かりました。

例では
書き換え
たけどね。
変えないで
いいんだね。

     

ヒントは
こんなもんかな。

えっと、
疑問解けた?
はいっ。

大丈夫だと思う。
やってみるね!
がんばってねー。
ありがと。


     

どこどこ。
あ、
なぽちゃん!

ここもよく
分かんないん
だけど。



えーと、
ここはね・・・

・・・・・
あ、
ちょっと待って、
わかったかも!

・・・・・


もう待たない!

そこはね・・・
・・・・・
あ”あ”あ”~~~

キコエマセン・・・

・・・・・
・・・・・
解答は次のページです
 
 

広告
home もくじ 前のページを読む 次のページを読む
  サイト内検索:
広告
お勧めの姉妹サイト
leafdays - リーフデイズ 超初心者のための園芸入門 - 楽しい趣味のガーデニング -
広告