用C语言编写贪吃蛇小游戏

article/2025/10/27 6:33:21

实现功能

蛇最开始三节,向右移动。用户可以通过按上下左右来控制蛇的移动,食物随机产生,蛇吃到食物后蛇的身体会变长。蛇撞墙或者撞到自己身体后,游戏结束。
在这里插入图片描述

怎么实现

要实现一个贪吃蛇小游戏,首先要想清楚游戏里有什么,怎样实现功能。

很明显游戏中只有两样东西,蛇和食物。
所以要建立蛇和食物信息,然后将蛇和食物进行初始化,在将蛇和食物画出来。
实现的功能有:1. 蛇的移动2. 按键控制蛇的移动3. 食物的产生4. 蛇吃食物后蛇身体变长5. 游戏的结束

用结构体建立蛇和食物的信息

struct COOR{//位置,x,y坐标int x;int y;
};struct SNAKE{//蛇的基础信息int size;//节数int speed;//运动速度char dir;//运动方向struct COOR xy[MAX];//位置
}snakes;struct FOOD{//食物信息struct COOR fooddir;//食物位置int flag;//判断食物是否被吃掉,1未被吃掉,0被吃掉
}food;

实现功能的函数:
蛇:

void snakeInit(){//初始化蛇的信息
void drawSnake(){//画蛇
void moveSnake(){//蛇的移动
void coorSnake(){//按键控制蛇的运动方向

食物:

void initFood(){//初始化食物的信息
void drawFood(){//画食物

其它:

int gameOver(){//游戏结束情况
void gameInit(){//初始化窗口范围

代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<graphics.h>
#include<conio.h>
#include<Windows.h>#define MAX 200
HWND hwnd = NULL;enum DIR{//枚举移动方向UP,DOWN,LEFT,RIGHT,
};struct COOR{//位置,x,y坐标int x;int y;
};struct SNAKE{//蛇的基础信息int size;//节数int speed;//运动速度char dir;//运动方向struct COOR xy[MAX];//位置
}snakes;struct FOOD{//食物信息struct COOR fooddir;//食物位置int flag;//判断食物是否被吃掉,1未被吃掉,0被吃掉
}food;void snakeInit(){//初始化蛇的信息snakes.size = 3;//开始节数snakes.dir = RIGHT;//开始运动方向snakes.speed = 10;int i = 0;for (; i < snakes.size; i++){//每一节书的位置,注意将第一节作为头snakes.xy[i].x = 40 - 10 * i;snakes.xy[i].y = 10;}}void drawSnake(){//画蛇int i = 0;for (; i < snakes.size; i++){setlinecolor(BLACK);//画线的颜色setfillcolor(RED);//填充色//fillrectangle(snakes.xy[i].x, snakes.xy[i].y, snakes.xy[i].x + 10, snakes.xy[i].y+10);//矩形fillcircle(snakes.xy[i].x, snakes.xy[i].y, 5);//圆形}}void moveSnake(){//蛇的移动//snakes.xy[0].x++;int i = 0;for (i = snakes.size-1; i >0; i--){//蛇身跟着舌头运动snakes.xy[i].x = snakes.xy[i-1].x;snakes.xy[i].y = snakes.xy[i-1].y;}switch (snakes.dir){case UP:snakes.xy[0].y-=snakes.speed;break;case DOWN:snakes.xy[0].y+=snakes.speed;break;case LEFT:snakes.xy[0].x-=snakes.speed;break;case RIGHT:snakes.xy[0].x+=snakes.speed;break;default:break;}}void coorSnake(){//按键控制蛇的运动方向if (_kbhit()){ //等待获取按键char c = _getch();//获得按键switch (c){case 72:case'w':if (snakes.dir != DOWN){snakes.dir = UP;}break;case 80:case's':if (snakes.dir != UP){snakes.dir = DOWN;}break;case 75:case'a':if (snakes.dir != RIGHT){snakes.dir = LEFT;}break;case 77:case'd':if (snakes.dir != LEFT){snakes.dir = RIGHT;}break;default:break;}}
}
void initFood(){//初始化食物的信息food.flag = 1;while (1){
START:food.fooddir.x = rand() % 63 * 10;//食物位置随机food.fooddir.y = rand() % 47 * 10;for (int i = 0; i < snakes.size; i++){//防止食物生成在蛇身上。if (food.fooddir.x == snakes.xy[i].x&&food.fooddir.y == snakes.xy[i].y){goto START;}else{break;}}break;}
}void drawFood(){//画食物//food.fooddir.x = 100;//food.fooddir.y = 200;setlinecolor(BLACK);setfillcolor(RED);fillcircle(food.fooddir.x, food.fooddir.y, 5);}
void eatFood(){//蛇吃食物if (snakes.xy[0].x - food.fooddir.x <= 5 && snakes.xy[0].y - food.fooddir.y <= 5 \&& food.fooddir.x - snakes.xy[0].x <= 5 && food.fooddir.y - snakes.xy[0].y <= 5 && food.flag == 1){food.flag = 0;snakes.size++;}}int gameOver(){//游戏结束情况if (snakes.xy[0].x < 5 || snakes.xy[0].y <= 0 || snakes.xy[0].x > 635 || snakes.xy[0].y > 478){MessageBox(hwnd, "GAME OVER!","你撞墙了!", MB_OK);return 1;}for (int i = 1; i < snakes.size; i++){if (snakes.xy[0].x == snakes.xy[i].x&&snakes.xy[0].y == snakes.xy[i].y){MessageBox(hwnd, "GAME OVER!", "你撞了自己",MB_OK);return 1;}}return 0;
}void gameInit(){hwnd=initgraph(640, 480);//设置窗口大小setbkcolor(GREEN);//设置窗口颜色
}int main(){srand((unsigned long)time(NULL));//生成随机数gameInit();cleardevice();//刷新窗口snakeInit();initFood();while (1){cleardevice();if (food.flag == 0){initFood();}drawFood();drawSnake();coorSnake();eatFood();moveSnake();//eatFood();if (gameOver()){break;}//stopGame();Sleep(100);}getchar();//防止闪屏closegraph();system("pause");return 0;
}

http://chatgpt.dhexx.cn/article/ml48euxn.shtml

相关文章

用C语言编写2048游戏

2048_C_code 用C语言编写的2048 1 要实现我们的 2048 小游戏&#xff0c;需要涉及一些数据结构的知识&#xff0c;以及一些 Linux 的系统调用。此外&#xff0c;为了方便在屏幕上使用字符绘图&#xff0c;我们还需要使用一个文本界面的屏幕绘图库 ncurses &#xff0c;具体到…

C语言编写猜数字小游戏

C语言编写猜数字小游戏 经过对C语言的初步学习&#xff0c;为提高编程能力&#xff0c;可以敲一些稍费脑筋的代码&#xff0c;猜数字就是一个很好的选择。要想实现该游戏&#xff0c;那么首先我们应该知道制作的大体思路。 电脑应随机产生一个数字&#xff08;为便于玩家猜的…

C语言编写2048小游戏

一、原理 这里以向上移动为例&#xff0c;其他方向的移动类似。 因为纵向移动不会横向变化&#xff0c;所以可以单独拿出某一列来分析。 我们先假设一个具有代表性的例子&#xff0c;假设当前某列数据是【2】【0】【2】【8】&#xff08;0代表空白&#xff09;&#xff0c;如…

Linux C语言编写2048小游戏

2048 2048小游戏是用Linux C语言写的&#xff0c;运行在Ubuntu系统上&#xff0c;其中Ubuntu链接Ncuses库。首先&#xff0c;我们简单了解一下Ncurses。 Ncurses库是由原CURSES库发展而来的&#xff0c;这个库提供了C/C对屏幕以及光标、鼠标访问的特性。使得C/C简易写屏成为可能…

C语言编写小游戏:MinesWeeper(扫雷)闯关版

《扫雷》&#xff1a;大众类的益智小游戏&#xff0c;游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子&#xff0c;同时避免踩雷&#xff0c;踩到一个雷即全盘皆输。 话不多说&#xff0c;我们直接进入正题。 首先&#xff0c;我们得给用户显示一个菜单栏&…

(C语言)用C语言编写小游戏——三子棋

目录 三子棋效果展示 三子棋的功能实现 1、初始化棋盘格 2、打印棋盘 3、玩家下棋 4、电脑下棋 5、判断输赢&#xff08;玩家赢/电脑赢/平局&#xff09; 完整代码展示 三子棋小游戏的代码实现分为三个文件&#xff0c;test.c&#xff08;测试游戏功能&#xff09;、ga…

c语言编写的小游戏(c语言编写小游戏入门)

C语言编写是要注意什么&#xff1f; 因此&#xff0c;在编写选择语句之前&#xff0c;应该首先明确判断条件是什么&#xff0c;并确定当判断结果为“真”或“假”时应分别执行什么样的操作(算法) c语言编写小游戏请提供俄罗斯方块&#xff0c;坦克大战之类的小游戏的程序的c 应…

(C语言)用C语言编写小游戏——扫雷

目录 扫雷效果展示 扫雷的功能实现 1、初始化棋盘格 2、 打印棋盘 3、布置雷 4、排查雷 完整代码展示 扫雷小游戏的代码实现分为三个文件&#xff0c;test.c&#xff08;测试游戏功能&#xff09;、game.h&#xff08;头文件的包含和函数的声明&#xff09;、game.c&…

详解5个C语言简单易懂小游戏

文章目录 前言一、准备工作二、游戏菜单三、游戏内容1.猜数字2.三子棋3.扫雷4.五子棋5.飞行棋 总结 前言 我们通过5个简单易懂的小游戏来加强我们对C语言的认识&#xff0c;这五个小游戏不仅有单人&#xff0c;还有人机对战和人人对战。让我们在学习之余来上一局紧张刺激的小游…

C语言趣味小游戏——扫雷(详解版)

前言 ​ 全篇无任何废话&#xff0c;本文的解释大多数都在代码段中&#xff0c;所以一定要看代码&#xff0c;边看边学边理解。 这只是初学者入门的一个小游戏&#xff0c;不难懂&#xff0c;没有什么复杂的内容 可以先学习一下比扫雷还简单的猜数字和三子棋 C语言趣味小游戏—…

C语言小程序游戏

c语言小程序游戏 ​ 本代码是我大一刚学完c语言自己编写的&#xff0c;三个游戏分别是飞机竞速、走迷宫和魔塔&#xff0c;满满的都是回忆。 1、不可能的任务-飞机竞速 ​ 这种游戏在以前小时候玩的游戏机里面玩过&#xff0c;那时抱着个游戏机一玩就是一下午&#xff0c;如…

C语言简易小游戏

文章目录 前言一、猜数字游戏二、旋转光标三、多个字符从两端移动&#xff0c;向中间汇聚四、恶搞&#xff1a;关机小程序五、闪烁的五彩爱心六、扫雷七、三子棋 前言 本篇博客将带领大家自己动手写一下一些C语言小游戏&#xff1b;以增加对于C语言的兴趣&#x1f600;&#x…

c语言成绩管理系统(链表)

C语言实现了学生成绩管理系统&#xff0c;可以进行学生成绩的增加&#xff0c;删除&#xff0c;修改&#xff0c;查询&#xff0c;计算平均成绩和展示。 开发语言&#xff1a;C语言 开发工具&#xff1a;Dev c 开发者&#xff1a;呵呵up 创建学生成绩信息 2. 插入学生信息 3.…

C语言实现学生成绩管理系统设计

本系统有增加学生记录、修改学生记录、删除学生记录、按姓名查询学生记录、按C语言成绩对学生进行排序、退出系统6大功能。 能够对学生的姓名&#xff0c;学号&#xff0c;c语言成绩做相应的操作。 在检测到输入成绩大于55时&#xff0c;会自动加上5。 该管理系统设计功能模块…

c语言成绩管理系统常见错误,求教 学生成绩管理系统出错

已结贴√ 问题点数:20 回复次数:5 求教 学生成绩管理系统出错 小弟刚做了个学生成绩管理系统 编译无错误 但是运行的时候连选择函数都不能 特来求教 望高手解释 代码如下: #include #include #define N 20 #define M 100 struct score {int scr1; int scr2; int scr…

c语言课程设计 学生成绩管理系统

学生成绩管理系统要求&#xff1a; 1、系统功能以菜单方式工作&#xff1b; 2、数据的输入&#xff1b; 3、数据的插入&#xff1b; 4、数据的输出&#xff1b; 5、数据的删除&#xff1b; 6、数据的查找&#xff0c;通常以两种方式进行查找&#xff0c;如姓名、学号&#xff1…

C语言学生成绩管理系统详解

文章目录 一、系统概述二、数据类型三、自定义函数说明四、运行界面五、源代码 源代码请直接跳到最后 引言&#xff1a;最近写了C语言的大作业&#xff0c;感觉做得还行&#xff0c;记录一下&#xff0c;给后人一些参考&#xff0c;给自己留更深印象方便后续改进&#xff01; …

学生成绩管理系统 C语言

基础篇问题&#xff1a; 1.输出如下菜单&#xff1a; *********************学生成绩管理系统******************* * 1 成绩录入 2 成绩查询 3 计算平均分 * * 4 计算最高分 5 排名 6 退出 * ******************************…

C语言编程学生成绩管理系统

目录 一、介绍 二、功能 1.录入学生 2.删除学生信息 3.修改学生信息 4.查询学生信息 5.所有学生信息 6.成绩排序 7.退出程序 三、代码 1.主函数 2.头文件 3.函数封装库 一、介绍 利用C语言&#xff0c;运用链表、指针、封装函数等基本知识实现一个学生管理系统。通…

C语言学生成绩管理系统

制作学生成绩管理系统&#xff0c;可以实现以下功能&#xff1a; 每条记录包括&#xff1a;学号、姓名、专业和5门课程的成绩&#xff1b;能够实现添加、删除、修改功能&#xff1b;能够计算某学生的总分和平均分&#xff1b;能按照总分排序输出&#xff1b; 利用C语言的基本…