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

SESSION 13 その28
結果処理モードを作る(移動処理のみ) つづき
  解答

なぽちゃん、
結果処理モード
できました。

確認お願いします。
えっと・・・

うん、ざっと見た感じ
いいんじゃないかな。
できた!
よろしいんじゃ
ございません。
 
コード6:結果処理モード(移動処理のみ)
コードをリンク先から参照して下さい

  動作テスト

じゃあ、実行してみよう。

うん、いいね。

どの部屋に移動しても
問題ないね。
やった!

これで部屋の移動が
自由にできるように
なったね!
大分慣れて
きたね。
これで
部屋めぐり
できるー!
 
実行結果(出力ウィンドウ)結果処理モード
実行結果(出力ウィンドウ)
※1つのルートだけ表示しています

  解説


解答:結果処理モードを作る(移動処理のみ)
 
・変数と定数の追加
・行動コマンド値の保存
・結果の表示
・行動処理(移動処理)
・待機の入力処理

 
説明するね。
よろしく。
作った内容はね。

結果処理モードの関数の中に
仕様書の結果画面の内容と
同じように作りました。

処理の構造の図も参考に
したよ。
 
選択した
「行動」と「対象」の
「結果」を処理した
わけだね。
 

  変数と定数の追加

最初に
変数と定数を追加しました。


行動コマンド保存用の変数
keepActNumを宣言したよ。


これに上書きされる前に
行動コマンドを保存します。
初期化も
したよ。
すまんー。

よくできました。
おっ、定数 ACT_NONEを
使って初期化したんだな。


そうそう、
定数 ACT_NONEは0。
「行動なし」の意味で
使ってね。


あはは・・・
ACT_NONEの説明忘れてた。
 

テキストアドベンチャーゲーム
結果処理モード(移動処理のみ)
KottonCastleEscapeのKCEMain.java)14行目~
 
・・・    
014       //********************************************
015       //                   定数
016       //********************************************     
017       //入力・表示処理モード
018       private static final int MODE_GAME_1_ACT = 1;//行動処理モード(1階層目 どうする?行動コマンド)
019       private static final int MODE_GAME_2_TAR = 2;//対象処理モード(2階層目 なにを?対象コマンド)
020       private static final int MODE_GAME_3_RES = 3;//結果処理モード
021       //行動コマンド
022       private static final int ACT_NONE = 0;//無し
023       private static final int ACT_MOVE = 1;//移動
024       private static final int ACT_LOOK = 2;//見る
025       private static final int ACT_USE = 3;//使う
026       //対象コマンド 移動用 部屋の現在地
027       private static final int TAR_ROOM_ENTRANCE = 1;//入口
028       private static final int TAR_ROOM_PASSAGE = 2;//廊下
029       private static final int TAR_ROOM_BED = 3;//寝室
030       //********************************************
031       //                   変数
032       //********************************************
033       private static int inputNum = 0;//入力番号
034       private static int nowMode = MODE_GAME_1_ACT;//現在の処理モード:最初は1階層目
035       private static int nowRoomNum = TAR_ROOM_ENTRANCE;//現在位置:ドアの部屋から開始
036       private static int keepActNum = ACT_NONE;//行動コマンド保存用:無しで初期化
・・・    
行動コマンド保存用変数 keepActNumを追加。
ACT_NONE(行動なし)で初期化。

  行動コマンド値の保存

 
次に、対象処理モードに
行動コマンドを保存
する処理を追加しました。
 
うん、1つ前のモードに
処理を追加した
んだな。
  難しいとこだな。
 
 

テキストアドベンチャーゲーム
結果処理モード(移動処理のみ)
KottonCastleEscapeのKCEMain.java)41行目~
 
 
・・・    
041       public static void main(String[] args) {
042           // TODO code application logic here
043  
044           //********************************************
045           //                メイン処理
046           //********************************************
047           boolean loopFlg = true;//ループフラグ
048    
049           while (loopFlg ) {
050  
051               /////////////////////////////////////////////////////
052               //実行処理(選択されたコマンドによって表示)
053               switch (nowMode) {
054                 
055                   //***************
056                   //行動処理モード
057                   case MODE_GAME_1_ACT:
058                      //行動処理モード関数呼び出し
059                      execModeAction();
060                      
061                      //対象処理モード(2階層目)に切り替える
062                      nowMode = MODE_GAME_2_TAR;
063                       
064                       break;
065                   //***************
066                   //対象処理モード
067                   case MODE_GAME_2_TAR:
068                      //対象処理モード関数呼び出し
069                      execModeTarget();
070                      
071                      //入力された行動コマンドを保存する
072                      keepActNum = inputNum;
073                      //結果処理モード(3階層目)に切り替える
074                      nowMode = MODE_GAME_3_RES;
075                      
076                      break;
077                   //***************
078                   //結果処理モード
079                   case MODE_GAME_3_RES:
080                      //結果処理モード関数呼び出し
081                      execModeResult();
082                      
083                      //行動処理モード(1階層目)に戻す
084                      nowMode = MODE_GAME_1_ACT;
085                      
086                       break;
087               }
088  
089               //キー入力処理
090               inputNum = scanInputData();
091  
092               //表示開始の区切り
093               printSeparateMark();
094    
095           }
096  
097       }
・・・    
黄色が追加された部分


結果処理モードでは
・行動コマンド
・対象コマンド
両方の値を使うでしょ。

だから、変数 inputNumに
入ってた行動コマンドが
上書きされる前に
別の変数 keepActNum
に写しました。
これなら
消えないよね!
いいね!
対象処理モードの最後で
対象コマンドが入力されるからね。

2つの入力値を取って置くには
2つの変数が必要だな。


・keepActNum=行動コマンド、
・inputNum=対象コマンド
を入れたんだな。

両方ともメンバ変数で宣言してる
からゲーム中、値は消えないね。
 

テキストアドベンチャーゲーム
結果処理モード(移動処理のみ)
KottonCastleEscapeのKCEMain.java)41行目~
 
 
対象処理モードを実行した場合
<保存処理無し>
・・・      
041       public static void main(String[] args) {  
042           // TODO code application logic here  
043    
044           //********************************************  
045           //                メイン処理  
046           //********************************************  
047           boolean loopFlg = true;//ループフラグ  
048      
049           while (loopFlg ) {  
050    
051               /////////////////////////////////////////////////////  
052               //実行処理(選択されたコマンドによって表示)  
053               switch (nowMode) {  
054                   
055                   //***************  
056                   //行動処理モード  
057                   case MODE_GAME_1_ACT:  
058                      //行動処理モード関数呼び出し  
059                      execModeAction();  
060                        
061                      //対象処理モード(2階層目)に切り替える  
062                      nowMode = MODE_GAME_2_TAR;  
063                         
064                       break;  
065                   //***************  
066                   //対象処理モード  
067                   case MODE_GAME_2_TAR: 対象処理モードを実行
068                      //対象処理モード関数呼び出し  
069                      execModeTarget();  
070                        
071                      //結果処理モード(3階層目)に切り替える  
072                      nowMode = MODE_GAME_3_RES;  
073                        
074                      break;  
075                   //***************  
076                   //結果処理モード  
077                   case MODE_GAME_3_RES:  
078                      //結果処理モード関数呼び出し  
079                      execModeResult();  
080                        
081                      //行動処理モード(1階層目)に戻す  
082                      nowMode = MODE_GAME_1_ACT;  
083                        
084                       break;  
085               }  
086    
087               //キー入力処理  
088               inputNum = scanInputData(); 行動コマンドが
対象コマンドの入力で
上書きされる。

行動コマンドは消える。
089    
090               //表示開始の区切り  
091               printSeparateMark();  
092      
093           }  
094    
095       }  
・・・      
変数 inputNumに入っていた行動コマンドは上書きされて消える
 

テキストアドベンチャーゲーム
結果処理モード(移動処理のみ)
KottonCastleEscapeのKCEMain.java)41行目~
 
 
対象処理モードを実行した場合
<保存処理有り>
・・・      
041       public static void main(String[] args) {  
042           // TODO code application logic here  
043    
044           //********************************************  
045           //                メイン処理  
046           //********************************************  
047           boolean loopFlg = true;//ループフラグ  
048      
049           while (loopFlg ) {  
050    
051               /////////////////////////////////////////////////////  
052               //実行処理(選択されたコマンドによって表示)  
053               switch (nowMode) {  
054                   
055                   //***************  
056                   //行動処理モード  
057                   case MODE_GAME_1_ACT:  
058                      //行動処理モード関数呼び出し  
059                      execModeAction();  
060                        
061                      //対象処理モード(2階層目)に切り替える  
062                      nowMode = MODE_GAME_2_TAR;  
063                         
064                       break;  
065                   //***************  
066                   //対象処理モード  
067                   case MODE_GAME_2_TAR: 対象処理モードを実行
068                      //対象処理モード関数呼び出し  
069                      execModeTarget();  
070                        
071                      //入力された行動コマンドを保存する  
072                      keepActNum = inputNum; 行動コマンドが
上書きされる前に
別の変数に保存
073                      //結果処理モード(3階層目)に切り替える  
074                      nowMode = MODE_GAME_3_RES;  
075                        
076                      break;  
077                   //***************  
078                   //結果処理モード  
079                   case MODE_GAME_3_RES:  
080                      //結果処理モード関数呼び出し  
081                      execModeResult();  
082                        
083                      //行動処理モード(1階層目)に戻す  
084                      nowMode = MODE_GAME_1_ACT;  
085                        
086                       break;  
087               }  
088    
089               //キー入力処理  
090               inputNum = scanInputData(); 対象コマンドの入力で
行動コマンドが上書き
される。

行動コマンドは保存され
ているので消えない。
091    
092               //表示開始の区切り  
093               printSeparateMark();  
094      
095           }  
096    
097       }  
・・・      
変数 inputNumに入っていた行動コマンドを、変数 keepActNumに保存する


コードを書く場所は
ここでよかったかな?

メイン関数の
対象処理モードが
終わる直前に保存したの。

これは管理の処理かなって。
いいね。
inputNumはメンバ変数だから
対象処理モード関数の中で
保存しても同じだけど。

メイン関数でやる方が
inputNumの値の変化を
管理しやすいね。

でも、結果が同じなら
今はまだ場所とかはそんなに
深く考えないでいいよ。
徐々にいこう。
やったね!
でも
よくできました。

 
 

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