一只不睡觉的水壶 2024-03-18 15:58 采纳率: 94.1%
浏览 16
已结题

为什么在visual studio2022写贪吃蛇按键无效

在visual studio2022上写了个贪吃蛇,然后设定那些键位无效,不管我怎么按都无法控制蛇的方向,我是有下载easyx和graphics图形库的,我个人不知道怎么处理,(这个贪吃蛇是半成品)

#include<stdio.h>
#include<graphics.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<easyx.h>
#define SNAKE_NUM 500
enum DIR
{
    UP,
    DOWN,
    LEFT,
    RIGHT,
};
struct snake
{
    int size;
    int dir;//方向
    int speed;
    POINT coor[SNAKE_NUM];
}snake;
void init()
{
    snake.size = 3;
    snake.speed = 10;
    snake.dir = RIGHT;
    for (int i = 0; i <snake.size; i++)
    {
        snake.coor[i].x = 40 - 10 * i;
        snake.coor[i].y = 10;
    }
    
}
void drawsnake()
{
    BeginBatchDraw();
    setbkcolor(WHITE);
    cleardevice();
    setfillcolor(GREEN);
    for (int i = snake.size - 1; i >= 0; i--)
    {
        solidcircle(snake.coor[i].x, snake.coor[i].y, 5);
    }
    EndBatchDraw();
}
void snakemove()
{
    for (int i = 0; i < snake.size; i++)
    {
        switch (snake.dir)
        {
        case UP:
            snake.coor[i].y--;
            break;
        case DOWN:
            snake.coor[i].y++;
            break;
        case LEFT:
            snake.coor[i].x--;
            break;
        case RIGHT:
            snake.coor[i].x++;
            break;    
        }
    }
}
void keycontrol()
{
    if (_kbhit())
    {
        switch (_getch())
        {
        case 'w':
        case'W':
        case 72:
            snake.dir = UP;
            break;
        case 's':
        case'S':
        case 80:
            snake.dir = DOWN;
            break;
        case 'a':
        case 'A':
        case 75:
            snake.dir = LEFT;
            break;
        case 'd':
        case 'D':
        case 77:
            snake.dir = RIGHT;
            break;
        }
    }
}
int main()
{
    initgraph(640, 480, SHOWCONSOLE);
    init();
    

    while (1)
    {
        drawsnake();
        snakemove();
        keycontrol();
        Sleep(20);
    }
    return 0;
}

  • 写回答

4条回答 默认 最新

  • 关注

    一只不睡觉的水壶 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    在Visual Studio 2022中编写贪吃蛇,按键无效的问题可能是由于没有正确设置键盘输入的原因造成的。以下是解决方案:

    1. 检查easyx和graphics图形库是否正确安装并与编译器兼容。确保你已经正确地安装了easyx和graphics图形库,并且与Visual Studio 2022兼容。如果安装或配置不正确,可能会导致按键无效。

    2. 检查图形窗口的焦点。按键事件只在具有焦点的窗口中触发。确保你的图形窗口处于活动状态,并且有焦点。

    3. 修改键盘输入的方式。你可以尝试使用GetAsyncKeyState()函数而不是_kbhit()和_getch()函数来获取键盘输入。GetAsyncKeyState()函数可以检测键盘的状态并返回按键的值。这可以避免使用控制台相关的函数。

    以下是修改后的代码:

    void keycontrol() {
        if (GetAsyncKeyState('W') & 0x8000 || GetAsyncKeyState(VK_UP) & 0x8000)
            snake.dir = UP;
        else if (GetAsyncKeyState('S') & 0x8000 || GetAsyncKeyState(VK_DOWN) & 0x8000)
            snake.dir = DOWN;
        else if (GetAsyncKeyState('A') & 0x8000 || GetAsyncKeyState(VK_LEFT) & 0x8000)
            snake.dir = LEFT;
        else if (GetAsyncKeyState('D') & 0x8000 || GetAsyncKeyState(VK_RIGHT) & 0x8000)
            snake.dir = RIGHT;
    }
    

    使用GetAsyncKeyState()函数可以检测到键盘按下和释放的动作。其中0x8000是按键被按下的标志。

    1. 确保代码没有其它问题。检查代码中的其它部分是否存在语法错误或逻辑错误,可能会导致按键无效。确保绘图函数和蛇移动函数能够正常工作。

    请尝试上述解决方案,并检查问题是否解决了。如果问题仍然存在,请提供更多的信息,例如出现的错误消息或详细描述问题的表现。

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

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表