0x00007FF76FDF5D50 处有未经处理的异常(在 Project1.exe 中): 0xC0000005: 读取位置 0x00007FF76FE06010 时发生访问冲突。
第61行调试报错
#include<stdio.h>
#include<conio.h>
#define SPACE 0 //空地
#define WALL 1 //墙
#define DEST 2 //目的地
#define BOX 3 //箱子
#define PLAYER 4 //玩家
int map[10][10] =
{
0,0,0,0,1,1,1,0,0,0,
0,0,0,0,1,2,1,0,0,0,
0,0,0,0,1,3,1,0,0,0,
1,1,1,1,1,0,1,1,1,1,
1,2,3,0,0,4,0,3,2,1,
1,1,1,1,1,0,1,1,1,1,
0,0,0,0,1,0,1,0,0,0,
0,0,0,0,1,3,1,0,0,0,
0,0,0,0,1,2,1,0,0,0,
0,0,0,0,1,1,1,0,0,0
};
void draw()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
switch (map[i][j])
{
case SPACE:
printf(" ");
break;
case WALL:
printf("▓ ");
break;
case DEST:
printf("★ ");
break;
case BOX:
printf("☆ ");
break;
case PLAYER:
printf("♀ ");
break;
}
}
printf("\n");
}
}
void move()
{
//获取键盘输入,scanf、getchar不适合,输入后需回车
//_getch();这个函数需要conio.h头文件,文件不是C语言标准
//先找玩家
int i = 0, j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; i++)
if (map[i][j] == PLAYER)//这行调试报错
{
goto end;
}
}
end:;
char key = _getch();
switch (key)
{
case 'w':
case 'W':
case 72://上
break;
case 's':
case 'S':
case 80://下
break;
case 'a':
case 'A':
case 75://左
break;
case 'd':
case 'D':
case 77://右
//先判断玩家能不能动,玩家前面是不是空地、目的地
if (map[i][j+1]==SPACE||map[i][j+1]==DEST)
{
map[i][j + 1] += PLAYER;
map[i][j] -= PLAYER;
}
//玩家前面是箱子
else if (map[i][j+1]==BOX||map[i][j+1]==BOX+DEST)
{
//箱子前面是空地or墙
if (map[i][j+2]==SPACE||map[i][j+2]==DEST)
{
map[i][j + 2] += BOX;//移动箱子到空地或目的地
map[i][j + 1] -= BOX;//把原来位置的箱子去掉
map[i][j + 1] += PLAYER;//把人移动到箱子位置
map[i][j] -= PLAYER;//把原来位置的人去掉
}
}
break;
}
printf("%d\n",key);
}
int main()
{
while (1)
{
draw();
move();
}
return 0;
}