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

SESSION 13 その16
行動処理モードを作る つづき
  ヒント1:コマンドの定数を定義する

まずコマンドを定数で定義しよう。

今回は、
・行動コマンド
・移動用の対象コマンド

を定義しよう。

いろいろな判定に必要になるからね。
なるほど。

定数で、分岐したり
いろいろするんだね。
 
なるほど。


行動コマンド
処理モードと合わせて
ACTを前に付けてこんな
感じで作ってくれ。

今回の課題ではまだ
使わないんだけどね。
ちょうどいいから作っとこう。
はいっ。分かりました。

定数は他のもこんな感じで
名前をつければいいね。
こんな感じで
作ってね。
おっけーです。
 
行動コマンドの定数名の例
行動コマンド 定数名
無し ACT_NONE 0
移動 ACT_MOVE 1
見る ACT_LOOK 2
使う ACT_USE 3


 
あれ?

ACT_NONEの
「無し」って?
 
ああ、これは後で
使うから取り合えず
作っといて。
  気にしないでー

そんな重要
じゃないから。
 


同様に、
移動用の対象コマンド
の定数
も必要だ。

これは今回の課題に使うよ。

同じように必要な定数を
考えて作ってね。
うーん、何が必要だろう。

移動の対象だから・・・
移動先の部屋かな?

じゃあ、前に付けるのは
TAR_ROOMにしようかな。
後は
任せたー。
うーん。

悩むー

  ヒント2:部屋単位で考える

今回のゲームの作り方
だけど。


今回のゲームは
「部屋」を基準に考えると
処理を作りやすい。


「移動」も「見る」も「使う」も
全部自分のいる部屋の中で
やってることだろ。

部屋ごとに処理を分けて
考える
といいんだよ。
部屋単位ね。
分かったような
ないような。
なるほど。

この流れの図でも
「部屋の状況」とか、
自分のいる部屋の処理
してるよね。

プレーヤーになって
考えればいいんだね。
 

テキストアドベンチャーゲームの処理の構造(機能単位)行動処理モード
 


クイズゲームでは
「現在の問題番号」
で表示する問題を
切り替えてたよね。

今回の場合は
「現在いる部屋」
部屋を切り替えて処理
すればいい。
そっか。
クイズでは「問題」が
処理の基準だったんだね。

うーん、でも実際
コードではどうやって
書けばいいのかな。
ほら、ほら。

クイズゲーム
ではどうやって
たっけ?
うーんと。

クイズゲームの
コードでは・・・
 

クイズゲーム完成 区切り処理・結果処理関数化
(KotoQuizのKQMain.java)123行目~
 
・・・      
123       /**  
124       * 問題処理モード処理  
125       */  
126       private static void execModeQuiz(){  
127      
128           //見出し:現在の状況を表示する  
129           System.out.println("***************** ことくいず *****************");  
130           System.out.println("         現在、"+ (nowQuizNum + 1) +"問目です。");  
131           System.out.println("        現在の正解数は"+ correctTotal +"です。");  
132           System.out.println("***********************************************");  
133           System.out.println("");  
134           System.out.println("< 問題です >");  
135      
136           //問題を表示する  
137           switch(nowQuizNum){  
138               case 0:  
139                   System.out.println("変数の型でint型の最大値はいくつ?");  
140                   System.out.println("");  
141                   System.out.println("-----------------------------------------------");  
142                   System.out.println("1:256 2:98776342 3:2147483647");  
143      
144                   break;  
145               case 1:  
146                   System.out.println("変数の型を変換するのに使う方法はどれ?");  
147                   System.out.println("");  
148                   System.out.println("-----------------------------------------------");  
149                   System.out.println("1:キャスト 2:スコープ 3:インクリメント");  
150      
151                   break;  
152               case 2:  
153                   System.out.println("変数aが「4以上でかつ10以下」か「40未満」");  
154                   System.out.println("正しい条件式はどれ?");  
155                   System.out.println("");  
156                   System.out.println("-----------------------------------------------");  
157                   System.out.println("1:(a >= 4 || a < 10) && a < 40");  
158                   System.out.println("2:(a >= 4 || a <= 10) || a < 40");  
159                   System.out.println("3:(a >= 4 && a <= 10) || a < 40");  
160      
161                   break;  
162               case 3:  
163                   System.out.println("ことが一番好きな場所はどこ?");  
164                   System.out.println("");  
165                   System.out.println("-----------------------------------------------");  
166                   System.out.println("1:動物園 2:水族館 3:遊園地");  
167      
168                   break;  
169           }  
170           System.out.print("答え>");  
171      
172           //解答チェックモードへ変更  
173           execMode = EXEC_MODE_CHECK;  
174       }  
・・・    
クイズゲームでは、「現在の問題番号」で処理を切り替えていた



ことのイメージ
 
・・・    
            //部屋の状況を表示(部屋ごとの処理)
            //もし入口なら
            if (nowRoomNum == TAR_ROOM_ENTRANCE) {
                System.out.println("S-01:ここは入口です。");
   
            //もし廊下なら
            } else if (nowRoomNum == TAR_ROOM_PASSAGE) {
                System.out.println("S-02:ここは廊下です。");
   
            //もし寝室なら
            } else if (nowRoomNum == TAR_ROOM_BED) {
                System.out.println("S-03:ここは寝室です。");
            }
・・・    
ことの作成イメージです
 
nowRoomNumは、「現在の部屋番号」を保持する変数。

TAR_ROOM_ENTRANCE、TAR_ROOM_PASSAGE
TAR_ROOM_BEDは、部屋を表す定数
 
クイズゲームと
似てるんだ!
分かった!

クイズゲームが
もし「現在の問題番号」が
「1問目」だったら~

で切り替えてたのを

もし「現在の部屋番号」が
「入口の番号」だったら~

って感じに切り替えれば
いいんだね!
 
そっ!

クイズゲームでは
switch文だったけど
if文でももちろんOK。

いろんな作り方ができる
からね。
  おっけ。
 

  ヒント3:メッセージの出力で分岐を考える

それから、前回も言ったけど
今回のゲームは、メッセージの
出力がメイン
のゲームだからね。

仕様書の
プログラムの構造(詳細)
が、
そのまま処理の分岐になる
と考えていい。

作成するモードの「表示メッセージ」
項目を見て、必要なメッセージを
シナリオのサンプル表から写そう。
わあ!凄いヒント!

今回は「行動」だから、
左端の列の分岐ね。


入口、廊下、寝室・・・
部屋で分岐だ!

前回はよく分からなかったけど、
こういう意味だったんだ。

仕様書を
見てね。
これなら
できるかも!
 
プログラムの構造(詳細):出力処理
開始 - -
初期化 - -
行動処理モード 詳細 対象処理モード 詳細 結果処理モード 詳細
- - 行動する(行動内容を処理)
[出力] 部屋の状況と行動リストの表示
「現在の部屋」>「状況メッセージ」と「行動リスト」を表示
現在の部屋 表示メッセージ
(行動リスト)
入口 ドアがある部屋です

どうする?
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 開きません。  
暗証番号(鍵なし) 開きません。  
金庫の鍵
(所持の場合)
使いました。  
爆弾(所持の場合) 使えません。  
[入力] 行動を選ぶ
(行動コマンド入力)
[入力] 対象を選ぶ
(対象コマンド入力)
[入力] 待機する
- - 脱出できたら(終了だったら)
- - 終了

     

じゃあ、
ヒントはおしまい。


ここから再スタートー。
ありがとうございました!

よーし、気を取り直して
作っちゃうぞ!

えっと・・・
がんばってね。
はーい。

     

なになに。
うーん、
なぽちゃん!

これはどうしたら
いいのかな。



えーと、
ここはね・・・

・・・・・
あ、
ちょっと待って、
分かったかも!
・・・・・
・・・・・
解答は次のページです
 
 

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