贪吃蛇大作战是一个基于EasyX图形库的经典贪吃蛇游戏。玩家通过键盘控制贪吃蛇的移动方向,目标是吃掉屏幕上随机生成的食物点,每吃掉一个食物点,蛇身就会增长一节。游戏提供三种模式:无屏障模式、有屏障模式以及读档继续模式。在有屏障模式中,贪吃蛇如果撞到屏幕边缘则游戏结束;在无屏障模式中,贪吃蛇可以穿越屏幕边缘,实现无限循环。此外,无屏障模式还提供了经典和迷宫两种难度选择,以适应不同水平的玩家。游戏过程中,会实时统计并显示玩家的分数,同时屏幕上最多会出现100个食物点。
贪吃蛇大作战的故事背景设定在一个充满食物的神秘世界里。玩家扮演一条小蛇,需要通过吃掉食物来不断成长,同时避开各种危险和挑战。随着蛇身的不断增长,游戏难度也会逐渐提升,考验玩家的反应速度和策略规划能力。
游戏采用简洁明快的视觉风格,色彩鲜艳且对比强烈。贪吃蛇和食物点的设计简洁可爱,符合游戏轻松愉快的氛围。
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib,"Winmm.lib")// 引用 Windows Multimedia API
LRESULT CALLBACK CBTHookProc(int nCode, WPARAM wParam, LPARAM lParam);
int Msg(HWND hwnd, TCHAR *szText, TCHAR *szCaption, UINT uType);
void randfood_resisttime(void *);
void Create_Food(int mod);
void Show_Map();
void Show_Score();
void Button();
void Check_Head(int x, int y);
void Move();
void StartGame();
void OnInit();
int gamespeed();
int getscorestep();//获得每次吃食物后的加分
void Cre_Hard_wallpos();//无屏障困难模式 产生wall
void Creat_game();//产生游戏要素
void Save_game();//存档
void Read_game();//读档
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib,"Winmm.lib")// 引用 Windows Multimedia API
LRESULT CALLBACK CBTHookProc(int nCode, WPARAM wParam, LPARAM lParam);
int Msg(HWND hwnd, TCHAR *szText, TCHAR *szCaption, UINT uType);
void randfood_resisttime(void *);
void Create_Food(int mod);
void Show_Map();
void Show_Score();
void Button();
void Check_Head(int x, int y);
void Move();
void StartGame();
void OnInit();
int gamespeed();
int getscorestep();//获得每次吃食物后的加分
void Cre_Hard_wallpos();//无屏障困难模式 产生wall
void Creat_game();//产生游戏要素
void Save_game();//存档
void Read_game();//读档
#include "tcs.h"
#define L 20 //地图的长
#define H 20 //地图的高
int GameMap[L + 2][H + 2] = { 0 }; //游戏地图
int key; //按键保存
int sum = 1; //蛇的长度, 游戏结束(自吃或碰墙)
int dx[4] = { -1, 1, 0, 0 }; //左、右、上、下的方向
int dy[4] = { 0, 0, -1, 1 };
int res;//模式选择结果
int score = 0;//总分数
int pauseflag = 0;//暂停标志 pauseflag为1则暂停
int resist_time = -1;//加分食物剩余时间
int parfoodx, parfoody;//随机加分食物位置坐标
#define R 10 //显示的圆的半径
#define Wall 4 //墙
#define Shead 3 //蛇头
#define Sbody 2 //蛇身
#define Sfood 1 //食物
#define Sfood_par -1//特殊加分食物
#define Snode 0 //在地图中为空
#define GameLevel 5//GameLevel越小速度越快 每吃到GameLevel个食物游戏速度增加
struct Snake //蛇的每个节点的数据类型
{
int x, y; //蛇的每个节点在地图中的位置
int now; //保存当前节点的方向, 0,1,2,3分别为左右上下
}Snake[L * H];
LRESULT CALLBACK CBTHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
HWND hwnd = (HWND)wParam;
if (nCode == HCBT_ACTIVATE)
{
if (nCode == HCBT_ACTIVATE)
{
SetDlgItemText((HWND)wParam, IDYES, "&继续");
SetDlgItemText((HWND)wParam, IDNO, "&存档并退出");
SetDlgItemText((HWND)wParam, IDOK, "&经典");
SetDlgItemText((HWND)wParam, IDCANCEL, "&迷宫");
SetDlgItemText((HWND)wParam, IDABORT, "&有屏障");
SetDlgItemText((HWND)wParam, IDRETRY, "&无屏障");
SetDlgItemText((HWND)wParam, IDIGNORE, "&读档并开始");
}
}
return 0;
}
int Msg(HWND hwnd, TCHAR *szText, TCHAR *szCaption, UINT uType)
{
int ret;
HHOOK hHook = SetWindowsHookEx(WH_CBT, CBTHookProc, NULL, GetCurrentThreadId());
ret = MessageBox(hwnd, szText, szCaption, uType);
UnhookWindowsHookEx(hHook);
return ret;
}
void randfood_resisttime(void *)
{
while (1)
{
Sleep(1000);
if (pauseflag == 0)
{
if (resist_time == 0)
{
GameMap[parfoodx][parfoody] = Snode;
resist_time = -1;
Show_Map();
}
if (resist_time > 0)
resist_time--;
}
}
}
void Create_Food(int mod)
{
srand(