游戏效果:
头文件:
#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