C语言小游戏:贪吃蛇(最简版) 您所在的位置:网站首页 游戏贪吃蛇小游戏 C语言小游戏:贪吃蛇(最简版)

C语言小游戏:贪吃蛇(最简版)

2024-03-30 02:52| 来源: 网络整理| 查看: 265

前言:

参考视频:点击跳转

操作方法:w,s,a,d控制蛇的移动位置。

学习完黑马程序员的《C语言基础教程》可以顺便练手的小玩意。游戏非常简陋,只有最基本的功能。网上有很多大佬发的功能完善,强大的贪吃蛇游戏文章。这篇文章的代码只适合初学C语言的萌新第一次写游戏练手。

游戏效果展示:

游戏代码: #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #define WIDE 60 #define HIGH 20 /* 1、定义蛇的结构体 2、初始化蛇和食物 3、开始游戏 蛇和墙的碰撞 蛇和自身碰撞 蛇和食物碰撞 重新随机食物 蛇身体增长 分数增长 方向键控制 4、游戏结束 */ struct BODY { int X; int Y; }; struct SNAKE { int size; struct BODY body[WIDE * HIGH]; }snake; int food[2] = { 0 };//food[0]为X坐标 food[1]为Y坐标 int score = 0; //偏移坐标 int dx = 0; int dy = 0; //记录蛇末坐标 int lx = 0; int ly = 0; void InitFood() //随机食物位置 { food[0] = rand() % WIDE; food[1] = rand() % HIGH; } void InitSnake() //初始化蛇的长度和位置 { snake.size = 2; snake.body[0].X = WIDE / 2; snake.body[0].Y = HIGH / 2; snake.body[1].X = WIDE / 2 - 1; snake.body[1].Y = HIGH / 2; } void ShowUI() //显示游戏画面 { COORD coord; //获取控制台句柄,更改光标位置 //更新末尾空格 coord.X = lx; coord.Y = ly; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); putchar(' '); //显示蛇的位置 for (int i = 0; i < snake.size; i++) { coord.X = snake.body[i].X; coord.Y = snake.body[i].Y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); if (i == 0) putchar('@'); else putchar('*'); } //显示食物位置 coord.X = food[0]; coord.Y = food[1]; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); putchar('#'); } void PlayGame() //游戏主要逻辑:键盘监听、碰撞检测 { char key = 'D'; while (snake.body[0].X >= 0 && snake.body[0].X < WIDE && snake.body[0].Y >= 0 && snake.body[0].Y < HIGH) { ShowUI(); //方向控制 while (_kbhit()) { key = _getch(); } switch (key) { case 'D':case 'd': dx = 1; dy = 0; break; case 'A':case 'a': dx = -1; dy = 0; break; case 'W':case 'w': dx = 0; dy = -1; break; case 'S':case 's': dx = 0; dy = 1; break; } //是否和自身碰撞 for (int i = 1; i < snake.size; i++) { if (snake.body[0].X == snake.body[i].X && snake.body[0].Y == snake.body[i].Y) { return; } } //蛇和食物的碰撞 if (snake.body[0].X == food[0] && snake.body[0].Y == food[1]) { InitFood(); //随机新食物 snake.size++; //蛇身体增长 score += 10; //分数增长 } //蛇更新坐标 lx = snake.body[snake.size - 1].X; ly = snake.body[snake.size - 1].Y; for (int i = snake.size - 1; i > 0; i--) { snake.body[i].X = snake.body[i - 1].X; snake.body[i].Y = snake.body[i - 1].Y; } //更新蛇头 snake.body[0].X += dx; snake.body[0].Y += dy; Sleep(150); } } void InitWall() { for (int i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有