私はしばらくの間このプログラムをやろうとしてきましたが、何らかの理由で問題があります。 私は、島の中心に位置するマウスが8 * 8の2D配列を持ち、1 * 1の2D水配列と別の固定位置にある猫で囲まれたプログラムを作成することになっていますマウス)マウスは移動ごとに1つのタイルを移動でき、斜めに移動することはできません。 移動は、0,1,2,3(各数字は方向を表します)に制限された乱数ジェネレータによって決まります。マウスは100回の移動が許可され、ゲームが停止すると、マウスが猫に突き当たり(死)、右側の中央にある(脱出)、または水に入る(溺れる)ブリッジを横切ると停止するプログラムは数回実行され、死亡、脱出、溺死の回数を記録することになっています。しかし、プログラムを実行しようとするたびに死亡はゼロ、脱出はゼロ、死亡はゼロになります。ここ が私のコードです:なぜ私のコードはゲームの結果を記録できないのですか?
#include<iostream>
#include<stdlib.h>
#include <time.h>
using namespace std;
#define N 9
#define M 9
int direction(int x, int A[M][N], int row, int col)
{
int m;
if (x == 0)
m = A[row - 1][col]; //North
if (x == 1)
m = A[row+1][col]; //South
if (x == 2)
m = A[row][col - 1]; //West
if (x == 3)
m = A[row][col + 1]; //East
return m;
}
int main()
{
int v, S1, S2, S3, S4;
int Mouse, Cat, Bridge;
int death = 0, escape = 0, drown = 0;
int A[M][N];
for (int a = 0;a < 10;a++)
{
for (int i = 0;i < M;i++)
S1 = A[i][0] = 4;
for (int i = 0;i < M;i++)
S2 = A[i][8] = 4;
for (int j = 0;j < N;j++)
S3 = A[0][j] = 4;
for (int j = 0;j < N;j++)
S4 = A[8][j] = 4;
for (int i = 1;i < M;i++)
{
for (int j = 1;j < N;j++)
A[i][j] = 0;
}
Mouse = A[4][4] = 1; //mouse
Cat = A[5][2] = 2; //cat
Bridge = A[4][8] = 3; //bridge
srand((unsigned)time(NULL));
for (int b = 0;b < 100;b++)
{ v = rand() % 4;
int m=direction(v, A, 4, 4);
if (m == Cat)
{
death++;
break;
}
else if (m == Bridge)
{
escape++;
break;
}
else if (m == S1 || m == S2 || m == S3 || m == S4)
{
drown++;
break;
}
}
}
cout << "The mouse died " << death << " times and escaped " << escape << " times and drowned " << drown << " times" << endl;
return 0;
}
に置き換えてください。私は、他の選択肢は潜在的に致命的であることを理解することができます。 – dlatikay
本当に、マウスが死んでも何も印刷せずにプログラムを終了したいですか?そうでなければ、あなたのループの中にある 'return 0;'のいくつかを取り除く必要があります。 – drescherjm
デバッガに精通し、コードをステップ実行します。意味論的なエラーの大半を簡単に見つけて修正することができます。 C++固有のものが残っている場合は、あなたの投稿を編集してください。 – dlatikay