Visual Studio 2022 C++编写贪吃蛇游戏代码借鉴

把网上大佬的旧版贪吃蛇代码中部分词更新为适合Visual studio 2022 C++的代码,

其中有些时候生成三个食物,吃食物时长度没加长,待后续改进。

参考资料

借鉴了这位大佬的博客及代码,在其基础上进行了修改,特此鸣谢。
C语言简易贪吃蛇(附完整代码)_贪吃蛇c语言代码_snow zhao的博客-CSDN博客

源代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <conio.h>

#define frame_height 30//地图尺寸
#define frame_width 50
#define UP 'w'//移动
#define DOWN 's'
#define LEFT 'a'
#define RIGHT 'd'

int i, j, k, sp, score;
char ch = UP, state = UP, choo, n;//初始化方向
int grow = 0;

struct Food//食物
{
    int x;//横坐标
    int y;//纵坐标
} food;

struct Snake//蛇
{
    /*用数组储存蛇的每一部分的坐标*/
    int x[100];
    int y[100];
    int len;//长度
    int speed;//速度
} snake;

void map(void);//地图
void update_food(void);//更新食物
void move_snake(void);//蛇的移动
int alive(void);//判断蛇是否死亡
void get_speed(void);//更新速度
void gotoxy(int x, int y);//移动光标,进行游戏界面的打印


int main()
{
    do
    {
        score = 0;//初始化分数为0
        /*让用户进行难度选择,有彩蛋*/
        printf("Choose the degree of difficulty:\n1:easy\t2:middle  3:difficult\n");
        n = _getch();
        switch (n)
        {
        case '1':
        {
            sp = 300;
            break;
        }
        case '2':
        {
            sp = 230;
            break;
        }
        case '3':
        {
            sp = 180;
            break;
        }
        default:
        {
            printf("Congratulations!Welcome to Devil's difficulty\n");
            sp = 120;
            break;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的贪吃游戏示例,使用C语言编写: ```c #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #define width 20 // 地图宽度 #define height 20 // 地图高度 int score; // 得分 int gameover; // 游戏结束标记 int headx, heady; // 头坐标 int foodx, foody; // 食物坐标 int tailx[100], taily[100]; // 身坐标 int length; // 身长度 enum direction { STOP = 0, LEFT, RIGHT, UP, DOWN }; // 方向枚举类型 enum direction dir; // 当前方向 void init() // 初始化游戏 { score = 0; gameover = 0; headx = width / 2; heady = height / 2; foodx = rand() % width; foody = rand() % height; dir = STOP; length = 0; } void draw() // 绘制地图和 { system("cls"); // 清屏 for (int i = 0; i < width + 2; i++) // 绘制上边界 printf("#"); printf("\n"); for (int i = 0; i < height; i++) // 绘制地图和 { for (int j = 0; j < width; j++) { if (j == 0) printf("#"); if (i == heady && j == headx) // 绘制头 printf("O"); else if (i == foody && j == foodx) // 绘制食物 printf("X"); else { int flag = 0; for (int k = 0; k < length; k++) // 绘制身 { if (tailx[k] == j && taily[k] == i) { printf("o"); flag = 1; } } if (!flag) printf(" "); } if (j == width - 1) printf("#"); } printf("\n"); } for (int i = 0; i < width + 2; i++) // 绘制下边界 printf("#"); printf("\n"); printf("Score: %d\n", score); // 绘制得分 } void input() // 处理用户输入 { if (_kbhit()) // 检测键盘输入 { switch (_getch()) // 获取输入字符 { case 'a': dir = LEFT; break; case 'd': dir = RIGHT; break; case 'w': dir = UP; break; case 's': dir = DOWN; break; case 'x': gameover = 1; break; } } } void logic() // 处理游戏逻辑 { int prex = tailx[0], prey = taily[0]; // 保存尾 int pre2x, pre2y; tailx[0] = headx; // 更新身坐标 taily[0] = heady; for (int i = 1; i < length; i++) { pre2x = tailx[i]; pre2y = taily[i]; tailx[i] = prex; taily[i] = prey; prex = pre2x; prey = pre2y; } switch (dir) // 更新头坐标 { case LEFT: headx--; break; case RIGHT: headx++; break; case UP: heady--; break; case DOWN: heady++; break; } if (headx < 0 || headx >= width || heady < 0 || heady >= height) // 检测是否越界 gameover = 1; for (int i = 0; i < length; i++) // 检测是否撞到自己 { if (tailx[i] == headx && taily[i] == heady) gameover = 1; } if (headx == foodx && heady == foody) // 检测是否吃到食物 { score += 10; foodx = rand() % width; foody = rand() % height; length++; } } int main() { init(); while (!gameover) { draw(); input(); logic(); Sleep(50); // 控制游戏速度 } printf("Game Over! Your Score: %d\n", score); return 0; } ``` 这个示例使用了Windows.h头文件中的Sleep函数来控制游戏速度,Windows平台上可以直接编译运行。如果是其他平台,可能需要使用不同的清屏函数和延时函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值