如何用C语言实现贪吃蛇游戏
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"如何用C语言实现贪吃蛇游戏",在日常操作中,相信很多人在如何用C语言实现贪吃蛇游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何用C语言实现贪吃蛇
千家信息网最后更新 2026年11月01日如何用C语言实现贪吃蛇游戏
这篇文章主要介绍"如何用C语言实现贪吃蛇游戏",在日常操作中,相信很多人在如何用C语言实现贪吃蛇游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何用C语言实现贪吃蛇游戏"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
代码全览
game.h
#pragma once#define _CRT_SECURE_NO_WARNINGS 1#include#include #include #include #define PLATFORM 1 //运行的系统 1为win 0为linux #define MAPWIDTH 15 //地图宽度,包括墙#define MAPHEIGHT 15 //地图高度,包括墙#define SNAKELENGTH (MAPHEIGHT - 2) * (MAPWIDTH - 2) //结构体声明struct Body{ int isExist; int x; int y;}; struct Food { int x; int y;}; void game(); void initWall(char wall[MAPHEIGHT][MAPWIDTH], int mapWidth, int mapHeight);void displayMap(int mapWidth, int mapHeight, struct Body snake[], int snakelength, struct Food food);void clearScreen();void inputProcess(char* pinput);void initSnake(struct Body snake[SNAKELENGTH], int length);void generateFood(struct Food* food, struct Body snake[]);int isWall(int x, int y);int isSnake(int x, int y, struct Body snake[], int lengh);void control(char input, struct Body snake[]);void generateFood(struct Food* food, struct Body snake[]);int isFood(int x, int y, struct Food* food);int isEat(struct Body snake[], struct Food* pfood);void bodyMove(struct Body snake[], int* bodyLength);int isInBody(struct Body snake[], int lengh);
GameStart.c
#include "game.h" void displayMenu() { printf("########################\n"); printf("###### 贪吃蛇游戏 #######\n"); printf("########################\n"); printf("------------------------\n"); printf(" 1.开始游戏 \n"); printf(" 0.退出游戏 \n"); printf("------------------------\n"); printf("请输入选项:>"); char ch; scanf("%c", &ch); getchar(); switch (ch) { case '1': { game(); break; } case '0': { exit(0); break; } default: printf("输入错误,请重新输入:>"); break; } } int main(void) { while (1) { clearScreen(); displayMenu(); clearScreen(); } return 0;}game.c
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"//游戏逻辑void game() { //分数 int score = 0; //游戏状态 0为胜利 1为咬到蛇身 2为撞到墙上 int gameState = 0; //输入状态 char input = 0; //墙 char wall[MAPHEIGHT][MAPWIDTH]; //创建蛇结构体数组 struct Body snake[SNAKELENGTH]; //创建食物结构体 struct Food food = { 5,5 }; //初始化蛇 initSnake(snake, SNAKELENGTH); //初始化墙 initWall(wall, MAPWIDTH, MAPHEIGHT); //生成食物 generateFood(&food, snake); while (1) { //清屏 clearScreen(); control(input, snake); //显示地图 displayMap(MAPWIDTH, MAPHEIGHT, snake, SNAKELENGTH, food); printf("得分:%d\n", score); //printf("food:%d %d\n", food.x, food.y); //printf("snake:%d %d", snake[0].x, snake[0].y); //处理输入 inputProcess(&input); //撞到蛇身,游戏失败 if (isInBody(snake, SNAKELENGTH)) { gameState = 1; break; } //撞到墙上,游戏失败 if (isWall(snake[0].x, snake[0].y)) { gameState = 2; break; } //吃到食物加分,蛇身加一 if (isEat(snake, &food)) { score++; snake[score].isExist = 1; snake[score].x = snake[score - 1].x; snake[score].y = snake[score - 1].y; if (score == SNAKELENGTH - 1) { //游戏胜利 gameState = 0; break; } generateFood(&food, snake); } //蛇身移动 bodyMove(snake, &score); } //胜负显示 switch (gameState) { case 1: { printf("咬到蛇身,游戏结束!\n"); break; } case 2: { printf("撞到墙上,游戏结束!\n"); break; } case 0: { printf("游戏胜利!\n"); break; } default: break; } printf("按回车键退出"); getchar(); } //清除屏幕void clearScreen() { if (PLATFORM) { system("cls"); } else { system("clear"); } printf("\033c");} //输入处理void inputProcess(char* pinput) { int t = (int)time(NULL); while (1) { if (_kbhit()) { switch (getch()) { case 'w': { if (*pinput != 's') { *pinput = 'w'; } break; } case 's': { if (*pinput != 'w') { *pinput = 's'; } break; } case 'a': { if (*pinput != 'd') { *pinput = 'a'; } break; } case 'd': { if (*pinput != 'a') { *pinput = 'd'; } break; } /* case ' ': { *pinput = ' '; break; }*/ default: break; } } if ((int)time(NULL) - t == 1) { //printf("%c\n", *pinput); //一秒一帧 break; } /*if (*pinput == ' ') { continue; }*/ } } //初始化墙//'#'墙//' '空void initWall(char wall[MAPHEIGHT][MAPWIDTH], int mapWidth, int mapHeight) { for (int i = 0; i < mapHeight; i++) { for (int j = 0; j < mapWidth; j++) { if (i == 0 || i == mapHeight - 1) { wall[i][j] = '#'; } else if (j == 0 || j == MAPWIDTH - 1) { wall[i][j] = '#'; } else { wall[i][j] = ' '; } } }} //初始化蛇状态,位置void initSnake(struct Body snake[SNAKELENGTH], int length) { for (int i = 0; i < length; i++) { if (i == 0) { snake[i].x = MAPWIDTH / 2; snake[i].y = MAPHEIGHT / 2;//蛇出生位置,即蛇头初始位置 snake[i].isExist = 1; } else { snake[i].isExist = 0; snake[i].x = 0; snake[i].y = 0; } } } //生成食物void generateFood(struct Food* food, struct Body snake[]) { int x; int y; srand((unsigned int)time(NULL)); do { x = (rand() % MAPHEIGHT) + 1; y = (rand() % MAPWIDTH) + 1; } while (isSnake(x, y, snake, SNAKELENGTH) || isWall(x, y)); (*food).y = y; (*food).x = x;} //判断是否是墙int isWall(int x, int y) { if (y <= 1 || y >= MAPHEIGHT || x <= 1 || x >= MAPWIDTH) { return 1; } return 0;} //判断是否是蛇int isSnake(int x, int y, struct Body snake[], int lengh) { for (int i = 0; i < lengh; i++) { if (snake[i].isExist == 1 && snake[i].x == x && snake[i].y == y) { return 1; } } return 0;} //判断是否撞到蛇身int isInBody(struct Body snake[], int lengh) { for (int i = 1; i < lengh; i++) { if (snake[i].isExist == 1 && snake[i].x == snake[0].x && snake[i].y == snake[0].y) { return 1; } } return 0;} //判断是否是食物int isFood(int x, int y, struct Food* food) { if ((*food).x == x && (*food).y == y) { return 1; } return 0;} //显示游戏地图void displayMap(int mapWidth, int mapHeight, struct Body snake[], int snakelength, struct Food food) { int x; int y; for (int i = 0; i < mapHeight; i++) { y = i + 1; for (int j = 0; j < mapWidth; j++) { x = j + 1; if (isWall(x, y)) { printf("# "); } else if (isSnake(x, y, snake, snakelength)) { if (snake[0].x == x && snake[0].y == y) { printf("@ ");//蛇头 } else { printf("* ");//蛇身 } } else if (isFood(x, y, &food)) { printf("+ "); } else { printf(" "); } } printf("\n"); } } //方向控制void control(char input, struct Body snake[]) { switch (input) { case 'w': { snake[0].y -= 1; break; } case 'a': { snake[0].x -= 1; break; } case 's': { snake[0].y += 1; break; } case 'd': { snake[0].x += 1; break; } }} //判断是否吃到食物int isEat(struct Body snake[], struct Food* pfood) { if (isFood(snake[0].x, snake[0].y, pfood)) { return 1; } return 0;} //移动蛇身void bodyMove(struct Body snake[], int* bodyLength) { if (*bodyLength) { for (int i = *bodyLength; i >= 1; i--) { snake[i].x = snake[i - 1].x; snake[i].y = snake[i - 1].y; } } }到此,关于"如何用C语言实现贪吃蛇游戏"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
输入
食物
语言
地图
学习
位置
状态
结构
胜利
更多
处理
帮助
生成
实用
接下来
代码
分数
回车键
宽度
屏幕
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技网
科技互联网技术
以房互联网科技
成都互联网科技公司
互联网 视角下的科技创新
猫创互联网科技
互联网高科技股票
互联网科技大会案例
博兴的互联网电子科技公司
深圳国际航运科技和互联网
团飞科技与伯堂互联网服务平台
速维有品互联网信息科技(苏州)有限公司
互联网科技公司营业执照怎么办理
工业互联网山东科技大学
深圳互联网科技的发展
雨阳互联网卡科技有限公司
21世纪互联网科技成就
互联网界的黑科技
科技互联网企业在行动
互联网科技快速发展优美句子
广东万易互联网科技有限公司惠州分公司
互联网通讯科技
互联网科技类展会
盛创互联网科技有限公司
顺网科技2021年互联网排名
安控科技rtu产品工业互联网
温州喔噻互联网科技有限公司
互联网科技热点资讯
互联网公司科技股
互联网科技职业技能培训学校