小码炸 2023-04-24 23:05 采纳率: 100%
浏览 18
已结题

C语言推箱子游戏报错,如何解决?

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;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-04-24 23:12
    关注

    for (j = 0; j < 10; i++)
    这里,应该是j++

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月2日
  • 已采纳回答 4月24日
  • 修改了问题 4月24日
  • 创建了问题 4月24日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度