
パックマンプログラムを作っているんですが以下のように壁にぶつかってゲームオーバーになります。すべてのエサを食べさせたいんですがどのように以下のプログラムを改良すればいいですか?
map(MAPDATA型):マップの情報(通路・エさ・壁の位置)
p(POSITION型):プレイヤーの位置情報
e(POSITION型):モンスターの位置情報
0:通路
1:エサ
2:壁
プレイヤーのx座標:p.x,モンスターのy座標:e.y
MAP_WIDTH:マップの横幅 (19)
MAP_HEIGHT:マップの縦幅 (22)
NUM_FOOD:エサの最大数 (156)
#include <stdio.h>
#include "Info.h"
#include "math.h"
MOVEMENT playerAI(MAPDATA map, POSITION p, POSITION e)
{
if (abs(p.x - e.x) + abs(p.y - e.y) <= 2) { return UP; };
if (map[p.y][p.x + 1] == 1) { return RIGHT; }
else if (map[p.y + 1][p.x] == 1) { return DOWN; }
else if (map[p.y][p.x - 1] == 1) { return LEFT; }
else if (map[p.y - 1][p.x] == 1) { return UP; }
else { return STAY; }
Game.cpp
http://codepad.org/C2opgSUX
Red AI.cpp
http://codepad.org/zlwvnPTX

No.3ベストアンサー
- 回答日時:
あなたは
「プログラムを作りたい」のですか?
「プログラムを作ってもらいたい」のですか?
「作ってもらいたい」のなら、ここではなく、依頼サイトへ行った方がいいです。
自分で作りたいのなら、もうちょっと自分でいろいろとやってみましょう。
書いてある通りに入力するだけでは、プログラミングは上達しません。
f (map[p.y][p.x + 1] == 1) { return RIGHT; }
else if (map[p.y + 1][p.x] == 1) { return DOWN; }
else if (map[p.y][p.x - 1] == 1) { return LEFT; }
else if (map[p.y - 1][p.x] == 1) { return UP; }
else { return STAY; }
これが、どんな意味だか理解できていますか?
できていないなら、まずは、理解できるまで基本を勉強してください。
これを日本語訳すれば
右に餌があったら 右に行く
そうではなく、 下に餌があったら 下に行く
そうではなく、 左に餌があったら 左に行く
そうではなく、 上に餌があったら 上に行く
そうでなかったら 留まる
です。
これをちょっと変えて
右に壁がなかったら 右に行く
そうではなく、 下に壁がなかったら 下に行く
そうではなく、 左に壁がなかったら 左に行く
そうではなく、 上に壁がなかったら 上に行く
そうでなかったら 留まる
とすれば、とりあえずは壁を避けることができます。
元のプログラムがどうして「○○に餌があったら」になっているかをよく考えれば、
「壁でなかったら」とはどう書けるか、わかるはずです。
No.2
- 回答日時:
> 壁で進めなくなるので敵を避けつつエサを食べれるように左、右に曲がるようにとか、プログラム打ちたいです
では、そのようにプログラムを打ってください。
プログラムがわからないなら、まずは、日本語で書いてみてください。
> 壁で進めなくなる
というのは、
「壁があるのに、そちらへ進もうとする」
から進めなんですよね?
それなら
(1)[進む方向]を決める
(2) [進む方向]が壁ではないなら、[進む方向]へ進む
そうで無いなら、[進む方向]を別の方法で決める
みたいな処理をすればいいのです。
> 敵を避けつつ
とありますが、今は「敵が来たら上」です。
if (abs(p.x - e.x) + abs(p.y - e.y) <= 2) { /* 敵との距離が近い場合 */
return UP; /* とにかく上 */
};
ならば、
if (abs(p.x - e.x) + abs(p.y - e.y) <= 2) { /* 敵との距離が近い場合 */
逃げられる方向を探してそっちへ
};
とすれば、とりあえずは壁で進めなくなることがなくなるはずです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- C言語・C++・C# leetcode21 1 2022/04/21 11:53
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
高校生はアルバイトするべきだろうか?
-
ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
ゴリラ向け動画配信サイト「ウホウホ動画」にありがちなことを教えて下さい。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
スタッフと宿泊客が全員斜め上を行くホテルのレビュー
スタッフも宿泊客も、一流を通り越して全員斜め上なホテルのレビューにありがちな内容を教えて下さい
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
C言語で簡単なパックマンゲームを作成しています。敵の動きについて教えてください、
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで4096点以上のFFTの方法
-
あるプログラムのコマンドライ...
-
Vba UserFormを前面に出す方法...
-
powered byの表記について
-
クリックするとページ内で説明...
-
未使用の変数を一括検索する方法
-
複数のexeファイルの同時セット...
-
ドロップダウンリストの文字を...
-
C言語で、文字をbmp形式の画像...
-
VBAにてメール作成した際、一部...
-
UWSCで指定のフォルダを開きたい。
-
なぜ高速フーリエ変換は画像の...
-
main関数を先頭に置くデメリット
-
ゲームのBGM
-
MATLABで二次元フーリエ変換
-
フーリエ変換のプログラム
-
画像を読み込むのと取り込むの...
-
このVBAの意味を教えて下さいm(...
-
独自拡張子にアイコンの設定
-
LINUX用CプログラムのWindows移...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
VBAにてメール作成した際、一部...
-
Vba UserFormを前面に出す方法...
-
PICマイコンのコピー(クローン...
-
ドロップダウンリストの文字を...
-
XnViewにwebpを「いつも開く」...
-
「Outlookが他のプログラムによ...
-
Excelに埋め込んだVBAのプログ...
-
読み込み中にアクセス違反が発...
-
WORD印刷できるがEXCE...
-
未使用の変数を一括検索する方法
-
モジュール、アプリケーション...
-
VBAでユーザーフォームが自動的...
-
画像を読み込むのと取り込むの...
-
excelのexe化について
-
クリックするとページ内で説明...
-
exeファイルしかないプログラム...
-
TMBMSRV.exeによるCPU使用率上昇
-
javaで特定の文字のカウントを...
おすすめ情報