その5ー2 RPG風マップ & 町の人との会話 その2


● 町の人との会話  プログラミング ●


次は「?」の人との会話です


基本的には、迷路のプログラミングと
ほとんど変わりありません





    if(k== 8) {
      if(map[y – 1][x] == 0) {
         y--; Beep(830, 800);}
      else{ Beep(440, 800); }
     }
    else if (k== 4) {
      if(map[y][x – 1] == 0) {
          x--; Beep(830, 800); }
      else{ Beep(440, 800); }
    }
    else if(k== 6) {
      if(map[y][x + 1] == 0) {
          x++; Beep(830, 800);}
      else{ Beep(440, 800); }
    }
    else if(k== 2) {
       if(map[y + 1][x] == 0) {
          y++; Beep(830, 800); }
       else{ Beep(440, 800); } }
    else{ break; }
  }
}


まず、通れるところは0のみなので移動
それ以外は移動できない条件式を作ります



次に15(人)の処理を作るのですが、
人は沢山いて
それぞれ会話の内容は異なるため
上の条件式にその処理を作ると膨大なプログラムになってしまいます



なので、今回は会話を処理する『関数』を作って
プログラムを簡単なものにしたいと思います




『関数』・・苦手なんだよなぁ・・




大丈夫です
義務教育で学ぶ数学は
教えるべき事がとても的外れなのです



y = ax2+bx+c
aのことを 比例定数
 グラフは 放物線
と言います


↑こんな語句を覚えて
一体なんの役に立つんだか・・
わざと分かり辛くしているように思えます





少なくとも、プログラミングを学ぶ上では
全くもって意味がないので
習った『関数』の知識は捨てて下さってOKです





『関数』とは
放り込まれた数字から結果を返す式です



リクエストした数字によって
結果を返してくれるだけのものなのです


y = ax 2 +bx+cは
aやbに放り込んだ数字によって
yが返ってくる関数、です






今回作る関数は
「?」がいる場所を放り込み
会話を返してくれる
というものです






「町の人との会話」関数


    if(k== 8) {
      if(map[y – 1][x] == 0) {
         y--; Beep(830, 800);}
      elseif(map[y – 1][x] == 15){
         Kaiwa(y – 1 , x);}
      else{ Beep(440, 800); }
     }
    else if (k== 4) {
      if(map[y][x – 1] == 0) {
          x--; Beep(830, 800); }
      else if(map[y][x– 1] == 15){
         Kaiwa(y , x – 1);}
      else{ Beep(440, 800); }
    }
    else if(k== 6) {
      if(map[y][x + 1] == 0) {
          x++; Beep(830, 800);}
      else if(map[y][x + 1] == 15){
         Kaiwa(y , x + 1);}
      else{ Beep(440, 800); }
    }
    else if(k== 2) {
       if(map[y + 1][x] == 0) {
          y++; Beep(830, 800); }
      else if(map[y + 1][x] == 15){
         Kaiwa(y + 1 , x);}
       else{ Beep(440, 800); } }
    else{ break; }
  }
}


進んだ先が15(人)だった時の条件式を追加しました



そして、その条件式の中に
Kaiwa();
という『関数』を作りました

関数に放り投げる数字は、進んだ先の数字(条件式の値と同じ)です





void Kaiwa(intx2,inty2);

void Kaiwa(intx2,inty2)
{
   if (x2 == 2 & & y2 == 1) {
   std::cout < < "こんにちは! 左上の村だよ! “;//会話内容表示
}


さっき進んだ先をx2、y2に放り込んだので
その場所にいる人に会話させましょう

この関数の定義はmain()関数の外に作ってください



数字を放り込んで
会話を返す『関数』が完成しました

あとは、それぞれの場所の人の会話を作っていきましょう




ちょっと待って・・
カウンター越しにいる人には
話しかけられないじゃん・・





その通りです

ここまではあくまで「?」の人との会話です





ゲームプログラミングを学んできて、
気付いた方もいると思います


ゲーム上ではカウンター越しに人と話しているように見えるだけで
実際はカウンターと話しているのです




嘘・・
カウンター越しに話しかけたら
こっち向いたよ・・?




カウンターに話した時に
プレイヤーの方を向かせているだけです







会話を行う条件式15(人)に2(カウンター)
を加えるだけでOKです

カウンターに会話内容を設定してあげてください



カウンター越しと、店の裏から話した場合
異なる会話をすることもできますね








● アルゴリズム理論 ●


おまけです

プログラミングを学ぶ上で
最も効率の良い方法は

フローチャートを作る
というやり方です




ゲームプログラミングも
それ以外のプログラミングも
理論は全く変わりません


プログラムに実装する前に
アルゴリズムという手順がしっかりと理解できると
ゲームも作りやすくなります





自動販売機アルゴリズム


ざっと作ってみたのですが、
こういったフローチャートを作ると
考えをプログラムに実装しやすくなります



慣れれば自動的に頭の中で作れるようにもなります

電化製品なんかのフローチャートを作ってみたりとか
おすすめです





ちなみに、上記のフローチャートは
画像の半分程度に短縮できます

◇の部分を関数にしたり・・

など、色々と思案することも
プログラミングの上達に繋がります





そして、考えの及ばない部分
(コインセンサーが壊れていた)
等の例外がバグとなります






次章からは、いよいよ
見た目やマウス操作などの
Windowsプログラミングについて解説していきます


お楽しみに!