我一直在試圖做這個程序一段時間,但我有一個問題,出於某種原因。 我應該做一個程序,我有一個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