为什么我的代码不能记录游戏的结果?

时间:2017-02-10 16:26:07

标签: c++

我一直试图做这个程序一段时间但我出于某种原因出了问题。 我应该制作一个程序,我有一个8 * 8的2D阵列,鼠标位于一个岛屿的中心,周围是1 * 1的2D水阵和一只位于另一个固定位置的猫(远离鼠标)允许鼠标每次移动一个瓷砖,不能沿对角线移动。 该移动由随机数发生器确定,该发生器限于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;
    }

2 个答案:

答案 0 :(得分:0)

鼠标永远不会从初始位置移动,鼠标附近的地形是安全的。所以什么都不会发生。 用

替换代码中的cicle
  int x = 4,y=4;        // Mouse coords
   for (int b = 0;b < 100;b++)
    {   v = rand() % 4;
        int m=direction(v, A, x, y);
        if (m == Cat)
        {
            death++;
            break;
        }
        else if (m == Bridge)
        {
            escape++;
            break;
        }
        else if (m == S1 || m == S2 || m == S3 || m == S4)
        {
            drown++;
            break;
        }
        // Nothing happened, move the mouse
        A[x][y] = 0;         // Clear the actual mouse location
        if(v==0) x--;
        if(v==1) x++;
        if(v==2) y--;
        if(v==4) y++;
        A[x][y] = 1;        // Mark the mouse on the map

    }

答案 1 :(得分:-1)

有一些问题:你说程序应该运行几次,但实际上只运行一次。最糟糕的是,当鼠标到达猫,桥或淹死时,程序会退出:

return 0;

如果你想运行它两次(或你想要多次运行),你应该像

那样循环
for (int a = 0;a < 2;a++)

在变量声明之后和网格初始化之前。这样,每次运行循环时,它都会重新初始化除计数变量之外的所有内容。 然后,您应该用return(0)替换break;,因此每次发生某些事情时内部循环都退出但程序仍在运行,最后您将使用您的计数输出输出打印。 / p>

哦,我刚刚看到你打电话给direction,第三和第四个paarmeters固定为“4”。

......哦......鼠标根本不动。您还应该在网格中更新其位置。