if(moveDirection == 1)//向上移动 { newHead_x = OldHead_x; newHead_y = OldHead_y-1; if (canvas[newHead_x][newHead_y] > 0 || canvas[newHead_x][newHead_y] == -1) { cout<<"游戏失败!\n"; Sleep(2000); exit(0); } else canvas[newHead_x][newHead_y] = 1; } if (moveDirection == 2)//向下移动 { newHead_x = OldHead_x + 1; newHead_y = OldHead_y; if (canvas[newHead_x][newHead_y] > 0 || canvas[newHead_x][newHead_y] == -1) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else canvas[newHead_x][newHead_y] = 1; } if (moveDirection == 3)//向左移动 { newHead_x = OldHead_x ; newHead_y = OldHead_y - 1; if (canvas[newHead_x][newHead_y] > 0 || canvas[newHead_x][newHead_y] == -1) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else canvas[newHead_x][newHead_y] = 1; } if (moveDirection == 4)//向右移动 canvas[OldHead_x][OldHead_y + 1] = 1; 帮我更改这段代码,这是用二为数组写贪吃蛇游戏,并告知下x,y为什么这样变
时间: 2023-11-25 09:04:53 浏览: 60
根据代码,我发现在向右移动的情况下,代码只是简单地将蛇头所在位置的右边一个格子标记为蛇头,而没有对新的蛇头位置进行判断,因此需要做出如下改动:
```
if (moveDirection == 4)//向右移动
{
newHead_x = OldHead_x;
newHead_y = OldHead_y + 1;
if (canvas[newHead_x][newHead_y] > 0 || canvas[newHead_x][newHead_y] == -1)
{
cout << "游戏失败!\n";
Sleep(2000);
exit(0);
}
else
canvas[newHead_x][newHead_y] = 1;
}
```
在这个改动中,我们通过新的变量 `newHead_x` 和 `newHead_y` 记录了蛇头新的位置。同时,我们在移动之前对新的位置进行了判断,如果新的位置已经有了蛇身或者是障碍物,则判定游戏失败。最后,我们将新的位置标记为蛇头。
至于 `x` 和 `y` 变成什么值,这要看具体的游戏画面是如何设计的,需要根据实际情况来确定。
相关问题
if (moveDirection == 1)//向上移动 { newHead_x = OldHead_x - 1; newHead_y = OldHead_y; if (canvas[newHead_x][newHead_y] == -2) { int food_x; int food_y; food_x = rand() % (Length - 5) + 2; food_y = rand() % (Width - 5) + 2; canvas[food_x][food_y] = -2; } else { canvas[Max_x][Max_y] = 0; } if (canvas[newHead_x][newHead_y] > 0 || canvas[newHead_x][newHead_y] == -1) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else canvas[newHead_x][newHead_y] = 1; }如果出现数组值为2,那还会执行将其赋值为0的操作码
这段代码中没有数组值为2的情况,只有数组值为-2的情况,表示食物。如果蛇头碰到食物,会执行生成新食物的代码,否则会将蛇尾的位置清空。如果数组值为正数或者-1,表示蛇的身体部分或者边界,此时会输出失败的提示信息,暂停2秒后退出程序。如果数组值为0,表示空白位置,会将蛇头的位置标记为1。因此,不会出现将数组值为2赋值为0的操作码的情况。
怎么改这段代码实现穿墙 if (canvas[newHead_x][newHead_y] == -1) { if (newHead_x == 0) newHead_x = Length-1; if (newHead_x == Length-1) newHead_x = 0; if (newHead_y == 0) newHead_y = Width-1; if (newHead_y == Width-1) newHead_y = 0; }
如果你想实现穿墙的效果,可以将这个判断语句中的条件改为判断是否越界,如果越界则将头部坐标重新调整到另一端。具体的改动代码如下:
```
if (newHead_x < 0) {
newHead_x = Length - 1;
} else if (newHead_x >= Length) {
newHead_x = 0;
}
if (newHead_y < 0) {
newHead_y = Width - 1;
} else if (newHead_y >= Width) {
newHead_y = 0;
}
```
这样就可以实现在游戏地图边缘穿墙的效果。