C语言小游戏-贪吃蛇(配合EasyX,代码规范版本)

该代码实现了一个基于C语言的贪吃蛇游戏,包括生存模式和无限模式,使用EasyX图形库进行图形渲染,支持蛇的移动、加速、方向控制和食物的生成与食用。游戏界面有模式选择功能,玩家可以通过键盘控制蛇的移动,吃到食物会增加分数和蛇的长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

游戏效果:

 

 

 

头文件:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include <stdio.h>
#include <stdbool.h>
#include <easyx.h>
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>

//下面两个文件是用来播放音乐的,对媒体设备接口的头文件和另一个文件
#include <mmsystem.h> 
#include <Windows.h>
#pragma comment(lib,"winmm.lib") //因为我们在附加值里面加了winmm.lib,所以这行代码可加可不加

/*
	贪吃蛇
	用到的知识:结构体,循环,函数,easyx图形库,数组、部分指针
*/

void changetitle(void);//修改标题为贪吃蛇
void modeselect(void);//模式选择
void GameInit(void);//数据的初始化,也就是蛇的起始位置,同时蛇的节数最开始是一节
void GameDraw(int* num, int* HP);//给游戏的相应位置添加颜色
void SnakeMovebasis(int* sudu);//蛇的移动基础版
void SnakeMoveSpeed(int* sudu);//蛇的移动加速版
void SnakeMove_Survival_Mode(int* HP, int* sudu);//蛇的移动——生存模式
void SnakeMove_WithholdingBlood(int* HP);//蛇生存模式的吃到身体的扣血机制
void SnakeMove_Infinite_Mode(int* sudu);//蛇的移动——无限模式
void keyDirControl(void);//通过按键改变蛇的方向,同时兼顾游戏暂停和蛇的加速
void EatFood(int* p);//蛇吃食物
void snakeScoreAppear(int* score);//蛇吃食物的分数
void snakeSize(void);//显示蛇的节数


#define SNAKE_NUM 500//蛇的最大节数

//模式标记
bool mode = false;

//模式按钮范围标记
int fanwei = 0;

//实际模式按钮选择数据保存1
int shiji1 = 0;


//用户操作的方向上下左右,dir
enum DIR
{
	UP, DOWN, LEFT, RIGHT
};


//蛇的结构
struct Snake
{
	int size;//蛇的多少节

	enum DIR dir;//蛇的方向

	int speed;//实际移动速度

	int speed1 = 100;//调节速度

	int r;//蛇的一节(也可以是蛇头)的半径,注意在cpp里面的这里别赋值就是写成int r = speed / 2;,这样的结果只会是0
	//c语言的结构体成员是禁止赋值的

	//蛇的位置坐标,用数组
	POINT coor[SNAKE_NUM];

} snake;//因为只有一条蛇,所以用死定义变量

//食物结构
struct Food
{
	int x;//x坐标
	int y;//y坐标
	int r;//食物的半径,食物用圆去表示
	bool flag;	 //代表食物是否被吃了的标记
	DWORD color; //食物的颜色
}food;//只用一个食物,这里不是起别名,是直接定义了一个全局的struct Food类型的变量,名为food

核心代码:

#include "game.h"

//修改标题为贪吃蛇
void changetitle(void)
{
	HWND hnd = GetHWnd();//获得窗口句柄

	//修改窗口标题
	SetWindowText(hnd, "贪吃蛇");

}

//模式选择
void modeselect(void)
{
	char snakename[10] = "贪吃蛇";
	char survivor[13] = "生存模式";
	char endless[13] = "无限模式";

	//画框框
	setfillcolor(BROWN);
	setlinecolor(DARKGRAY);
	setlinestyle(PS_SOLID, 2);
	fillroundrect(215, 210, 415, 260, 15, 15);//
	fillroundrec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小艺术生◎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值