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

SESSION 13 その44
「使う」処理を作る(対象処理モード、結果処理モード)
  課題


課題:「使う」処理を作る(対象処理モード、結果処理モード)
 
仕様書を元に「使う」処理を作る
(対象処理モード、結果処理モード)
・対象処理モード:「使う」の対象リスト表示処理
・結果処理モード:「使う」の結果表示処理
 
企画書へのリンク
仕様書へのリンク
 
まだ
いろいろ
残ってる
けどね。
完成
間近だね!
さあ、「使う」処理を作ろう。

仕様書を元に作ってね。

ここができれば
ゲームの仕組みはほぼ完成。

手に入れたアイテムを
「使う」ことができるようになるよ。
 
これで爆弾を使って
脱出できるね!

ゲームクリアするぞ!
 

  課題の内容

ここで作るのは、
対象画面と結果画面
の「使う」処理
だ。

行動画面は特にないよ。
例えば、自分が「入口」にいたら
「どうする?:使う」を選んで・・・

対象画面で「何を?:爆弾」
結果画面で「ドアを破壊しました。」

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

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


作り方は「見る」の時と同じ。
真似して作ってみよう。

「見る」と同様に
「使う」の分岐は、もう
作っちゃってあるからね。

各モードの「使う」のブロックに
処理を書いていくだけだよ。
「使う」も
楽勝ー。
らくしょー!
あとは対象処理モードと
結果処理モードの
「使う」を作ればいいんだね。

出力の表シナリオの表
参考になるよね!
 

テキストアドベンチャーゲーム
「見る」処理(対象処理モード、結果処理モード)
KottonCastleEscapeのKCEMain.java)185行目~
 
 
対象処理モード関数
・・・    
185      /**
186       * 対象処理モード
187       */
188      private static void execModeTarget() {
189         //***** 入力された行動コマンドから対象コマンドを表示する *****
190    
191         //対象コマンドの一覧を表示
192         System.out.println("---------------------------------------------");
193    
194         //部屋ごとの処理
195         //***************
196         //もし入口なら
197         if (nowRoomNum == TAR_ROOM_ENTRANCE) {
198            //もし移動なら
199            if (inputNum == ACT_MOVE) {
200               selectMove();//対象モード 移動表示処理
201    
202            //もし見るなら
203            } else if (inputNum == ACT_LOOK) {
204               //全部の部屋共通の表示
205               System.out.println("何を見る?");
206               
207               //対象コマンド表示(ドア)
208               System.out.println(TAR_LOOK_ENTRANCE_DOOR + ":ドア");
209               
210            //もし使うなら
211            } else if (inputNum == ACT_USE) {
212     System.out.println("テスト:対象処理モード 使う"); //テスト用:表示確認
213    
214            }
215    
216         //***************
217         //もし廊下なら
218         } else if (nowRoomNum == TAR_ROOM_PASSAGE) {
219            //もし移動なら
220            if (inputNum == ACT_MOVE) {
221               selectMove();//対象モード 移動表示処理
222    
223            //もし見るなら
224            } else if (inputNum == ACT_LOOK) {
225               //全部の部屋共通の表示
226               System.out.println("何を見る?");
227               
228               //対象コマンド表示(窓、絵画)
229               System.out.println(TAR_LOOK_PASSAGE_WINDOW + ":窓");
230               System.out.println(TAR_LOOK_PASSAGE_PICTURE + ":絵画");
231               
232            //もし使うなら
233            } else if (inputNum == ACT_USE) {
234               System.out.println("テスト:対象処理モード 使う"); //テスト用:表示確認
235    
236            }
237    
238         //***************
239         //もし寝室なら
240         } else if (nowRoomNum == TAR_ROOM_BED) {
241            //もし移動なら
242            if (inputNum == ACT_MOVE) {
243               selectMove();//対象モード 移動表示処理
244    
245            //もし見るなら
246            } else if (inputNum == ACT_LOOK) {
247               //全部の部屋共通の表示
248               System.out.println("何を見る?");
249            
250               //対象コマンド表示(ベット、テーブル、金庫)
251               System.out.println(TAR_LOOK_BED_BED + ":ベッド");
252               System.out.println(TAR_LOOK_BED_TABLE + ":テーブル");
253               System.out.println(TAR_LOOK_BED_SAFE + ":金庫");
254               
255            //もし使うなら
256            } else if (inputNum == ACT_USE) {
257               System.out.println("テスト:対象処理モード 使う"); //テスト用:表示確認
258    
259            }
260         }
261    
262         //対象コマンド共通の表示
263         System.out.print(">");
264      }
376    
・・・    
黄色は「使う」の分岐
 

テキストアドベンチャーゲーム
「見る」処理(対象処理モード、結果処理モード)
KottonCastleEscapeのKCEMain.java)266行目~
 
 
結果処理モード関数
・・・    
266      /**
267       * 結果処理モード
268       */
269      private static void execModeResult() {
270         //***** 入力された対象コマンド別に実行処理と表示をする *****
271    
272         //部屋ごとの処理
273         //***************
274         //もし入口なら
275         if (nowRoomNum == TAR_ROOM_ENTRANCE) {
276            //行動コマンド選択別処理:保存しておいた値を使用
277            //もし移動なら
278            if (keepActNum == ACT_MOVE) {
279               resultMove();//結果モード 移動表示処理
280    
281            //もし見るなら
282            } else if (keepActNum == ACT_LOOK) {
283               //選択処理表示
284               //ドア
285               if (inputNum == TAR_LOOK_ENTRANCE_DOOR) {
286                  System.out.println("L-01:扉です。");
287               }
288                  
289            //もし使うなら
290            } else if (keepActNum == ACT_USE) {
291               System.out.println("テスト:結果処理モード 使う"); //テスト用:表示確認
292    
293            }
294    
295          //***************
296         //もし廊下なら
297         } else if (nowRoomNum == TAR_ROOM_PASSAGE) {
298            //行動コマンド選択別処理:保存しておいた値を使用
299            //もし移動なら
300            if (keepActNum == ACT_MOVE) {
301               resultMove();//結果モード 移動表示処理
302    
303            //もし見るなら
304            } else if (keepActNum == ACT_LOOK) {
305                  //選択処理表示
306                  //窓
307                  if (inputNum == TAR_LOOK_PASSAGE_WINDOW) {
308                     System.out.println("L-02:窓の外は海です。");
309    
310                  //絵画
311                  } else if (inputNum == TAR_LOOK_PASSAGE_PICTURE) {
312                     System.out.println("L-03:絵です。");
313                  }
314    
315            //もし使うなら
316            } else if (keepActNum == ACT_USE) {
317               System.out.println("テスト:結果処理モード 使う"); //テスト用:表示確認
318    
319            }
320    
321         //***************
322         //もし寝室なら
323         } else if (nowRoomNum == TAR_ROOM_BED) {
324            //行動コマンド選択別処理:保存しておいた値を使用
325            //もし移動なら
326            if (keepActNum == ACT_MOVE) {
327               resultMove();//結果モード 移動表示処理
328    
329            //もし見るなら
330            } else if (keepActNum == ACT_LOOK) {       
331               //選択処理表示
332               //ベッド
333               if (inputNum == TAR_LOOK_BED_BED) {
334                  System.out.println("L-04:大きなベッドです。");
335    
336               //テーブル
337               } else if (inputNum == TAR_LOOK_BED_TABLE) {
338                  System.out.println("L-05:何も無いテーブルです。");
339    
340                   tableLookCount += 1;//見るカウンタを加算
341    
342                  //見るカウントチェック
343                  if (tableLookCount == 2) {
344                     System.out.println("L-06:あ、そう言えば、・・・");
345    
346                  //3回以上見たら鍵取得
347                  } else if (tableLookCount >= 3) {
348                      tableLookCount = 3;//何回見てもこれ以上大きくさせない
349    
350                     //鍵をまだ見つけてなければ
351                     if (!itemKeyFlg) {
352                        System.out.println("L-07:<アイテム>:金庫の鍵を手に入れました");
353    
354                         itemKeyFlg = true;//キーアイテムフラグを立てる
355                     }
356                  }
357    
358               //金庫
359               } else if (inputNum == TAR_LOOK_BED_SAFE) {
360                  System.out.println("L-08:開けるには暗証番号と鍵が必要です。");
361               }
362    
363            //もし使うなら
364            } else if (keepActNum == ACT_USE) {
365               System.out.println("テスト:結果処理モード 使う"); //テスト用:表示確認
366    
367            }
368         }
369    
370          //共通の処理
371         System.out.println("");
372         System.out.println("---------------------------------------------");
373         System.out.println("-- 1を入力してEnterキーを押してください ---");
374         System.out.print(">");
375      }
・・・    
黄色は「使う」の分岐


爆弾でドアを破壊したら
終了処理をして。

エンディング開始だね。
今回はまだ
終了処理は作らないでいいよ。


代わりにそこに
「脱出しました。エンディングへ」
ってメッセージ表示処理を作って
おいてくれ。
らくしょー?
らくしょー?
あのね・・・
 
 
出力の詳細(結果処理モード)
 
[出力] 行動の結果を表示
「現在の部屋」>「選ばれた行動コマンド」>「選ばれた対象コマンド」>「結果メッセージ」を表示
現在の部屋 行動 対象 表示メッセージ(結果) 処理
入口 移動 全部屋共通 移動します。 移動
処理
見る ドア ドアです。  
使う 暗証番号1 使えません。  
暗証番号2 使えません。  
暗証番号3 使えません。  
金庫の鍵
(所持の場合)
使えません。  
爆弾(所持の場合) ドアを破壊しました。 終了
処理
・・・ ・・・ ・・・ ・・・ ・・・

今は爆弾を使ってドアを壊した場合に終了処理を作らない。
変わりに「脱出しました。エンディングへ」のメッセージ表示をする。


もおー

ほんと
調子に
のりすぎっ!
ごめんなさい。。。

  テストの仕方


動作のテストは
「使う」に関しての

・全てのルートの表示
・アイテムの取得
・終了処理の確認
をしよう。

終了処理
の確認は
今はメッセージの表示
だけでいいよ。
えっと、
テストのパターンは・・・

出力の表の
「使う」のパターン
を全部調べるね。


うわー、
凄い数になってきたね。

うん、でも「見る」と
同じだから大丈夫!
おお、
やる気十分。

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


必要な処理を作ってくれ。

さあ、完成までもう少し。
気を抜かないでやろう。
よーし、
ラストスパート!


がんばるぞ!
もう一息だ。
ガンガン
作っちゃうぞ!

     

うーん。

やっぱり、やること
ないんだけどな・・・

そーだ、
ゲームしよ。


あ!

なぽちゃん、ずるーい!
ゲームやってる~!
別にいいだろー。
やることないし。


お前さっさと
終わらせろよ。
あたしだけ
仲間はずれー
  ピコピコ  

どう?

パパって
上手いでしょ?


なになに!?
アクションゲーム?

遊びたーい!
仲間に入れてー。
見せてよー

やるー!
やるー!
もおー

しっしっ
だめだめっ!
課題を作りなさい!


それとも
今日のセッション
ここで終わりにする?


う~!
どっちもやりたいよー!!


なぽちゃんのいじわるー!
後でやろうね!絶対だよ!
あー、はいはい。
ゲーム完成したら
考えてあげるかもね?

課題やっとけーき。
もおっ、
絶対だからね!

聞いてるー?
  ぽよ~ん  
だからね、
ここは必殺技を
使ってね・・・

やってみる?

 
 

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