我一直在试图做这个程序一段时间,但我有一个问题,出于某种原因。 我应该做一个程序,我有一个8 * 8的2D阵列,鼠标位于1 * 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