ArrayGame。为什么不更新打印?

时间:2014-07-03 08:25:11

标签: c arrays logic printf

这是我的C编程任务。我们需要构建一个使用数组的简单游戏。我们的游戏就像流行的扫雷游戏。首先,我们初始化20 * 50阵列区域。然后我们在地图中随机放置了一些炸弹。在游戏中,玩家需要从起点到终点才能赢得比赛。当玩家移动时,移动将使数组隐藏,以便用户知道他从哪里开始。但是,在我的情况下,系统在播放器移动后不会更新并使阵列变空。任何人都可以帮助我解决我的问题。码?有什么问题?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define iMAX 20
#define jMAX 50
char array[20][50];
int i; //row
int j; //column
int z; //bomb
int n; //steps counter
int o; //x
int p; //y
o = 0;
p = 0;
int level;
int bomb;
char move;
int steps;

int main() {

printf("Welcome to the BombArray Game!\n");
printf("\nLevel 1 Begineer     : 50 bombs\nLevel 2 Intermediate : 100 bombs\nLevel 3 Advance      : 200 bombs\n");
printf("\nI want to challenge level ");
scanf_s("%d", &level);
printf("\n");

srand(time(NULL));

for (i = 0; i < 20; i++) {
    for (j = 0; j < 50; j++) {
        array[i][j] = '*';
    }
}

array[0][0] = 'S';
array[19][49] = 'E';

if (level == 1) {
    bomb = 50;
}

else if (level == 2) {
    bomb = 100;
}

else if (level == 3) {
    bomb = 200;
}

for (z = 0; z < bomb; z++) {
    i = rand() % 20;
    j = rand() % 50;
    array[i][j] = '1';
}

do {
system("cls");

for (i = 0; i < iMAX; i++) {
    for (j = 0; j < jMAX; j++) {
        if (array[i][j] == 'S') {
            printf("S");
        }
        else if (array[i][j] == '*') {
            printf("*");
        }
        else if (array[i][j] == '1') {
            printf("*");
        }
        else if (array[i][j] == 'E') {
            printf("E");
        }
        else if (array[i][j] == '2') {
            printf(" ");
        }
    }
    printf("\n");
}

printf("\n\nMoving direction (w:up s:down a:left d:right  e:exit): ");
scanf_s(" %c", &move);
printf("Steps? ");
scanf_s("%d", &steps);

if (move == 's') {
    for (n = 0; n < steps; n++) {
        i = o;
        j = p;
        i++;
        array[i][j] = '2';
        o = i;
        p = j;
    }
}


} while (array[19][49] != 2);

return 0;

}

1 个答案:

答案 0 :(得分:0)

if (move == 's') {
  array[o][p] = '2';  
  for (n = 0; n < steps; n++) {   
    i = o;
    j = p;
    i++;
    array[i][j] = '2';
    o = i;
    p = j;
  }
  array[o][p] = 'S';
}

您必须在开始位置删除S并在移动时将其写在结束位置

一些额外的事情:你不需要那么多变量。您可以删除ij(或op)。 如果您为该级别输入的数字不是1-3,那么您将有一个未定义的炸弹数量(如果您将bomb变量声明为局部变量),那么您应该设置默认情况。

你永远不会看你是否在击中炸弹,你只是在没有证明是否有炸弹的情况下覆盖array[i][j]

更好:

if (move == 's') {
  array[i][j] = '2';  
  for (n = 0; n < steps; n++) {
    i++;
    if (array[i][j] == '1') {
      printf("bomb\n");
      return 0;
    }
    array[i][j] = '2';
  }
  array[i][j] = 'S';
}