You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Visual Studio中将C++贪吃蛇代码生成可运行exe文件

解决Visual Studio社区版生成exe recipe而非可执行文件的问题

问题

使用Visual Studio社区版编写C++贪吃蛇游戏,尝试生成可执行exe文件时,得到的是exe recipe文件,无法正常运行。游戏代码如下:

#include<stdio.h>
#include<Windows.h>
#include<stdbool.h>
#include<time.h>
#include<conio.h>
#include<iostream>

bool gameover;
const int height = 15;
const int width = 80;
int x, y, fruitX, fruitY, score=0;
enum eDirection { STOP = 0, UP, DOWN, LEFT, RIGHT };
eDirection dir;
int tailx[100], taily[100], ctail = 0;


void setup()
{
    gameover = false;
    
    x = width / 2;
    y = height / 2;
    srand(time(0));
    fruitX = rand() % width + 1;
    fruitY = rand() % height;
}

void board()
{
    system("CLS");
    for (int i = 0; i < width; i++)
    {
        printf("#");
    }
    for (int i = 0; i < height; i++)
    {
        printf("\n");
        for (int j = 0; j < width; j++)
        {
            if (j == 0 || j == width - 1)
                printf("#");
            else
            {
                if (i == fruitY && j == fruitX)
                    printf("f");
                else if (i == y && j == x)
                    printf("o");
                else
                {
                    bool print = false;
                    for (int k = 0; k < ctail; k++)
                    {
                        if (i == taily[k] && j == tailx[k])
                        {
                            printf("o");
                            print = true;
                        }
                    }
                    if (!print)
                        printf(" ");
                }
            }
        }
    }
    printf("\n");
    for (int i = 0; i < width; i++)
    {
        printf("#");
    }
    printf("\n x is %d y is %d", fruitX, fruitY);
    printf("\n\n the score is %d\n\n",score);
}

void input()
{
    if(_kbhit())
        switch (_getch())
        {
        case 'w':dir = UP; break;
        case 's':dir = DOWN; break;
        case 'a':dir = LEFT; break;
        case 'd':dir = RIGHT; break;
        default:break;
        }
}

void logic()
{
    int prevx = tailx[0];
    int prevy = taily[0];
    tailx[0] = x;
    taily[0] = y;
    int prev2x, prev2y;
    for (int i = 1; i < ctail; i++)
    {
        prev2x = tailx[i];
        prev2y = taily[i];
        tailx[i] = prevx;
        taily[i] = prevy;
        prevx = prev2x;
        prevy = prev2y;
    }

    switch (dir)
    {
    case UP:y--; break;
    case DOWN:y++; break;
    case LEFT:x--; break;
    case RIGHT:x++; break;
    default:break;
    }

    if (x<0 || x>width )
        gameover = true;
    if (y<0-1 || y>height)
        gameover = true;

    for (int i = 0; i < ctail; i++)
    {
        if (x == tailx[i] && y == taily[i])
            gameover = true;
    }

    if (x == fruitX && y == fruitY)
    {
        score += 10;
        fruitX = rand() % (width-1) + 1;
        fruitY = rand() % height;
        ctail++;
    }
}

int main()
{
    setup();
    while (!gameover)
    {
        board();
        input();
        logic();
        Sleep(5);
    }
    return 0;
}

解决方案

1. 确认项目类型

确保创建的是控制台应用(Windows)或控制台应用(.NET Framework),而非CMake项目或其他类型。CMake项目会生成recipe文件而非直接生成exe,建议新建常规控制台项目后重新添加代码。

2. 调整生成配置

  • 顶部工具栏选择Debug或Release模式,不要选择CMakeLists.txt等非生成选项。
  • 右键项目 → 属性 → 配置属性 → 常规,确认平台工具集为当前VS版本对应的工具集(比如VS2022对应v143),避免工具集不匹配导致生成异常。
  • 右键项目 → 重新生成(或按Ctrl+Shift+B),不要仅编译单个文件,确保完整生成整个项目。

3. 检查输出路径与权限

右键项目 → 属性 → 配置属性 → 链接器 → 输出文件,确认输出路径合法且当前用户有写入权限。生成完成后,前往对应路径(通常为项目根目录/x64/Debug/项目名.exe)找到可执行文件运行。

代码优化建议

原代码存在几个影响体验的小问题,修正后可正常运行:

  1. setup()函数中添加dir = STOP;,避免游戏一开始蛇自动移动。
  2. 将Sleep(5)改为Sleep(100),降低蛇的移动速度,提升操作体验。
  3. 修正边界判断:if (x<=0 || x>=width-1)、if (y<0 || y>=height),避免蛇提前触发游戏结束。

修正后的关键代码片段:

void setup()
{
    gameover = false;
    dir = STOP; // 初始方向设为停止
    x = width / 2;
    y = height / 2;
    srand(time(0));
    fruitX = rand() % (width-2) + 1; // 水果不超出边界
    fruitY = rand() % (height-1);
}

int main()
{
    setup();
    while (!gameover)
    {
        board();
        input();
        logic();
        Sleep(100); // 调整移动速度
    }
    printf("Game Over! Final Score: %d\n", score); // 新增游戏结束提示
    return 0;
}

内容的提问来源于stack exchange,提问作者artur anikin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:43:07