void moveSnakeByDirection(int(*canvas)[30], int Length, int Width, int moveDirection) { for (int i = 0; i < Length; i++)//蛇身数值+1 { for (int j = 0; j < Width; j++) { if (canvas[i][j] > 0) canvas[i][j]++; } } int Max; int Max_x = 0, Max_y = 0; Max = canvas[0][0];//查找最大值 for (int i = 0; i < Length; i++)//去蛇尾 { for (int j = 0; j < Width; j++) { if (canvas[i][j] > Max) { Max = canvas[i][j]; Max_x = i; Max_y = j; } } } canvas[Max_x][Max_y] = 0; int OldHead_x = 0; int OldHead_y = 0; int newHead_x = 0; int newHead_y = 0; for (int i = 0; i < Length; i++)//找老蛇头 { for (int j = 0; j < Width; j++) { if (canvas[i][j] == 2) { OldHead_x = i; OldHead_y = j; } } } 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; 严重性 代码 说明 项目 文件 行 禁止显示状态 警告 C6385 从“canvas[newHead_x]”中读取的数据无效: 可读大小为“120”个字节,但可能读取了“-4”个字节。 贪吃蛇 F:\大一下\实训\贪吃蛇\贪吃蛇\蛇的移动.cpp 49 }
时间: 2024-04-21 14:28:33 浏览: 7
这段代码存在一个警告C6385,表示从“canvas[newHead_x]”中读取的数据无效: 可读大小为“120”个字节,但可能读取了“-4”个字节。这可能是由于数组越界或者指针引用错误导致的。需要检查代码中与数组相关的部分,确保没有越界或者指针引用错误。同时,需要注意在if语句中的条件判断,应该先判断canvas[newHead_x][newHead_y]是否为-1,因为如果是-1,说明这个位置是障碍物,不能通过,而canvas[newHead_x][newHead_y] > 0仅表示这个位置已经被占用,但不一定是障碍物。
相关问题
在visual studio2019中无法完成输入,该如何修改#include"判断方向.h" #include<iostream> #include<conio.h> #include<Windows.h> #include"蛇的移动.h" using namespace std; void updateWithInput(int(*canvas)[30], int Length, int Width) { int moveDirection = 0; char input; while (_kbhit()) { input = _getch(); } if (_kbhit()) // 判断是否有输入 { input = _getch(); //根据用户的不同输入来移动,不必输入回车 if (input == 'w') { moveDirection = 1;// 位置上移 moveSnakeByDirection(canvas, Length, Width, moveDirection); } else if (input == 's') { moveDirection = 2; // 位置下移 moveSnakeByDirection(canvas, Length, Width, moveDirection); } else if (input == 'a') { moveDirection = 3; // 位置左移 moveSnakeByDirection(canvas, Length, Width, moveDirection); } else if (input == 'd') { moveDirection = 4; // 位置右移 moveSnakeByDirection(canvas, Length, Width, moveDirection); } } }
在Visual Studio中,需要在控制台窗口中开启输入功能才能够使用`_kbhit()`和`_getch()`函数进行键盘输入检测。可以通过以下步骤来开启输入功能:
1. 在Visual Studio中打开项目,选择"项目"菜单,选择"属性"。
2. 在属性页中选择"链接器",然后选择"系统"。
3. 在"子系统"下拉菜单中选择"控制台 (/SUBSYSTEM:CONSOLE)",然后点击"确定"。
4. 在代码中添加头文件`conio.h`,并在需要检测键盘输入的地方使用`_kbhit()`和`_getch()`函数。
修改后的代码如下:
```c++
#include "判断方向.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include "蛇的移动.h"
using namespace std;
void updateWithInput(int(*canvas)[30], int Length, int Width) {
int moveDirection = 0;
char input;
while (_kbhit()) {
input = _getch();
}
if (_kbhit()) {
input = _getch();
if (input == 'w') {
moveDirection = 1;
moveSnakeByDirection(canvas, Length, Width, moveDirection);
}
else if (input == 's') {
moveDirection = 2;
moveSnakeByDirection(canvas, Length, Width, moveDirection);
}
else if (input == 'a') {
moveDirection = 3;
moveSnakeByDirection(canvas, Length, Width, moveDirection);
}
else if (input == 'd') {
moveDirection = 4;
moveSnakeByDirection(canvas, Length, Width, moveDirection);
}
}
}
```
注意:如果你在其他平台或环境下运行程序,可能需要使用不同的检测键盘输入的方法,具体可参考该平台或环境下的相关文档。
这段代码可以输入吗void updateWithInput(int(*canvas)[30], int Length, int Width) { int moveDirection = 0; char input; while (_kbhit()) { input = _getch(); } if (_kbhit())// 判断是否有输入 { input = _getch(); //根据用户的不同输入来移动,不必输入回车 if (input == 'w') { moveDirection = 1;// 位置上移 moveSnakeByDirection(canvas, Length, Width, moveDirection); } else if (input == 's') { moveDirection = 2; // 位置下移 moveSnakeByDirection(canvas, Length, Width, moveDirection); } else if (input == 'a') { moveDirection = 3; // 位置左移 moveSnakeByDirection(canvas, Length, Width, moveDirection); } else if (input == 'd') { moveDirection = 4; // 位置右移 moveSnakeByDirection(canvas, Length, Width, moveDirection); } } }
这段代码是可以输入的,它是一个函数,主要用于处理用户输入的方向,以便移动贪吃蛇。具体来说,该函数通过 `_kbhit()` 函数判断是否有输入,如果有输入则调用 `_getch()` 函数获取用户输入的方向,并根据不同的输入来移动贪吃蛇。其中,`'w'` 表示向上移动,`'s'` 表示向下移动,`'a'` 表示向左移动,`'d'` 表示向右移动。如果没有输入,则不进行任何处理。因此,该函数需要在主程序中被循环调用,以便及时处理用户的输入。