投稿

10月, 2024の投稿を表示しています

モンスターに攻撃できるようにする、ターン制度の作成

イメージ
 今回はモンスターに攻撃を行い、倒すプログラムを作成しました。また、今後のプログラムで敵も攻撃を仕掛けてくるようにしたいと考えているので、ターン数カウントの作成も行いました。 ~今回の内容~  横に黒玉ねぎがいます。弱そうなので倒しちゃいましょう。スペースボタンで攻撃です。    黒玉ねぎを倒しました。  画像のように敵に攻撃できるようになっています。攻撃が当たったら音が流れるようになっています。また、敵にはそれぞれ体力が設定してあって、敵の体力を0にすると画面上から消えて敵を倒したことになります。 ~プログラムの説明~ タイトルのプログラムを解説する前に追加した要素の説明を行いたいと思います。少しだけ関係はありますが、タイトルの部分だけ知りたいという方は飛ばしていただいてもかまいません。 追加要素の説明 まず、細々と追加した要素の説明をします。 グローバル変数に turn、turncount、Ecount、chp、cstmを追加しました。      turnは経過ターン数を数える変数、      turncountはターンが経過したことを判定するために使用する変数、      Ecountはマップ上に存在するモンスターの数を認識するための変数、      chpは主人公の体力の値を、cstmは主人公のおなかの値を格納します。 関数mapselectの中です。  198行目にEcountの値をリセットするプログラムを記述しています。このゲームではプレイヤーが正常な位置に配置されるようにマップをロードする際に何度も何度もマップを作成します。モンスターが出現するたびにEcountを増やすことによってマップ上のモンスターの数を認識しようとしています。そのため、何度もマップをロードする過程でモンスターも生まれるので、Ecountがたくさん増えてしまいます。このプログラムは適切なモンスター数を把握するために記述しています。  205行目ではchara変数にplayerオブジェクトのインスタンスを格納しています。インスタンスにchp(体力)、cstm(おなか)、10(攻撃力)、10(防御力)を追加しました。 見にくくてすみません... Enemy変数とそのインス...

ランダムにモンスターを出現させる

イメージ
 おひさしぶりです。結構更新が開いてしまいました。すみません でも、更新しない間に少しずつモンスターを発生させるプログラムを作成していました。 今回はモンスターを発生させるプログラムの他、少し改良した部分の解説を行います。 ~今回の内容~  初期画面です。犬がいます。階段まで移動します。  階段の近くまで移動しました。この時、下の犬が移動していることがわかると思います。  階段を上り、次のマップに移動しました。黒い玉ねぎがいますね。階段の近くまで移動します。  階段の近くまで移動しました。この時、黒い玉ねぎも同時に移動しています。 ~プログラムの説明~ まず、マップにランダムにアイテムを配置するswitch文に、敵キャラを配置する際のプログラムを追加しました。ここでは276~279行目にあたります。 276行目では敵キャラ「オニオン」をマップ上に表示させるプログラムを書いています。 276行目でグローバル変数Enemy1にモンスターオブジェクトのインスタンスを格納しています。この変数Enemy1がオニオンインスタンスになります。引数x, yはマップを読み込む際にスライムが読み込まれたタイミングでのx, y の値となります。  例)x座標が3, y座標が5のタイミングでスライムが読み込まれた際にスライムのx, y座標もx=3,y=5となり、マップに表示されます。  また、flag関数を用いることによって、モンスターが出現しているかどうかの判定を行い、モンスターが出現しなかった場合でもプログラムが正常に動作するようにしています。 次に、モンスターの移動をスムーズにするためのプログラムを作成しました。 391行目以降では、マップ上の値が「1」(何も置いていない床)であるときの移動に関するプログラムを書いています。 393行目のif文では敵が左側を向いているかつ左側に壁がある場合のプログラムです。  このプログラムは敵が永遠に壁側に進もうとして画面上で停止してるように見えてしまうことを防ぐために作りました。 394~397行目では左側(壁側)以外にランダムに進むようにプログラムを作成しました。 同じように上、下、右方向に壁がある場合にスムーズに移動させるようにプログラムを作成しました。 435行目以降はマップ上の値が「2」(通路)であるときの移動に関するプログラムを...