C语言easyx 贪吃蛇大作战,没有模仿,只有超越

作品名称:贪吃蛇大作战

版本历史和日期:V1.0 - 2024年2月11日

简介:

贪吃蛇大作战是一个基于EasyX图形库的经典贪吃蛇游戏。玩家通过键盘控制贪吃蛇的移动方向,目标是吃掉屏幕上随机生成的食物点,每吃掉一个食物点,蛇身就会增长一节。游戏提供三种模式:无屏障模式、有屏障模式以及读档继续模式。在有屏障模式中,贪吃蛇如果撞到屏幕边缘则游戏结束;在无屏障模式中,贪吃蛇可以穿越屏幕边缘,实现无限循环。此外,无屏障模式还提供了经典和迷宫两种难度选择,以适应不同水平的玩家。游戏过程中,会实时统计并显示玩家的分数,同时屏幕上最多会出现100个食物点。

游戏背景:

贪吃蛇大作战的故事背景设定在一个充满食物的神秘世界里。玩家扮演一条小蛇,需要通过吃掉食物来不断成长,同时避开各种危险和挑战。随着蛇身的不断增长,游戏难度也会逐渐提升,考验玩家的反应速度和策略规划能力。

核心玩法:

  • 玩家通过键盘控制贪吃蛇的移动方向(上、下、左、右)。
  • 贪吃蛇需要吃掉屏幕上的食物点来增长身体。
  • 吃到食物后,蛇身会增加一节,同时生成新的食物点。
  • 在有屏障模式中,贪吃蛇如果撞到屏幕边缘则游戏结束。
  • 在无屏障模式中,贪吃蛇可以穿越屏幕边缘,实现无限循环。
  • 经典难度下,食物点随机生成;迷宫难度下,食物点按照特定规则分布,需要玩家解开迷宫才能吃到食物。

角色:

  • 贪吃蛇:游戏主角,通过吃掉食物点来增长身体。
  • 食物点:分布在屏幕上的小圆形图案,贪吃蛇需要吃掉它们来增长身体。

关卡设计:

  • 无屏障模式:分为经典和迷宫两种难度。经典难度下,食物点随机生成;迷宫难度下,食物点按照特定规则分布。
  • 有屏障模式:贪吃蛇不能碰到屏幕边缘,增加了游戏的挑战性。

控制和用户界面:

  • 游戏通过键盘控制贪吃蛇的移动方向,操作简单直观。
  • 游戏界面清晰明了,显示玩家的分数、剩余食物点数量以及当前的游戏模式等信息。

音乐和声效:

  • 游戏过程中会播放轻松愉快的背景音乐,营造轻松愉快的游戏氛围。
  • 吃到食物点时会有相应的音效提示,增加游戏的趣味性。

视觉艺术风格:

游戏采用简洁明快的视觉风格,色彩鲜艳且对比强烈。贪吃蛇和食物点的设计简洁可爱,符合游戏轻松愉快的氛围。

技术需求:

  • 使用EasyX图形库进行游戏开发,实现图形界面的绘制和键盘输入的处理。
  • 需要实现贪吃蛇的移动逻辑、食物点的生成逻辑以及游戏结束条件的判断逻辑等。
  • 游戏过程中需要实时统计并显示玩家的分数和剩余食物点数量等信息。

开发计划:

  • 预计开发周期为X个月,分为需求分析、设计、编码、测试和发布等阶段。
  • 在开发过程中会定期进行代码审查和测试,确保游戏的稳定性和可玩性。

预算和资源:

  • 需要一台配置较高的计算机用于开发和测试。
  • 需要安装EasyX图形库和相应的编程环境(如Visual Studio)。
  • 需要投入适量的时间和精力进行游戏开发和优化。

风险评估:

  • 可能遇到的技术难题包括实现复杂的游戏逻辑和优化游戏性能等。
  • 应对策略包括提前进行技术预研、合理规划开发进度以及定期进行代码优化等。

游戏截图:

         

#pragma once
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>  
#include <string.h>  
#include <time.h> 
#include <process.h>
#include <graphics.h>
#include <mmsystem.h>
#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();//读档

完整代码:

tcs.h

#pragma once
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>  
#include <string.h>  
#include <time.h> 
#include <process.h>
#include <graphics.h>
#include <mmsystem.h>
#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();//读档

tcs.cpp 

#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(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/382587.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024牛客寒假算法基础集训营2

C Tokitsukaze and Min-Max XOR 题目大意 给定一个数组从任取数构成序列序列满足&#xff0c;&#xff08;可以只取一个数&#xff09;问能构造出多少个 解题思路 定找双枚举时间复杂度到&#xff0c;考虑利用加速统计的方案&#xff0c;即将数字按二进制位拆分挂在树上对于…

vtk三维场景基本要素 灯光、相机、颜色、纹理映射 简介

整理一下VTK 三维场景基本要素&#xff0c;后面会一一进行整理&#xff1b; 1. 灯光 vtkLight 剧场里有各式各样的灯光&#xff0c;三维渲染场景中也一样&#xff0c;可以有多个灯光存在。灯光和相机 是三维渲染场景必备的要素&#xff0c;vtkRenderer会自动创建默认的灯光和…

第76讲安全退出实现

安全退出实现 VueX 是一个专门为 Vue.js 应用设计的状态管理构架&#xff0c;统一管理和维护各个vue组件的可变化状态(你可以理解成 vue 组件里的某些 data )。 Vuex有五个核心概念&#xff1a; state, getters, mutations, actions, modules。 state&#xff1a;vuex的基本数…

Blazor 子组件交互例子

源码 子组件 SwitchBar.razor &#xfeff;using Microsoft.Extensions.Logging inject ILogger<Index> Logger<div style"ClassString" onclick"OnClick">ChildContent </div>code {[Parameter]public RenderFragment? ChildContent…

element ui表格手写拖动排序

效果图&#xff1a; 思路&#xff1a; 重点在于&#xff1a;拖动行到某一位置&#xff0c;拿到这一位置的标识&#xff0c;数据插入进这个位置 vueuse的拖拽hooks useDraggable 可以用&#xff1b;html5 drag能拖动行元素&#xff1b;mounsedown、mounsemove时间实现拖拽 页…

嵌入式电子产品开发感悟!

​ 2023特别深有感触的有以下几个事件&#xff1a; 1. 早在2月底就提交报告&#xff1a;抓紧开一款便携式的空气波压力按摩仪外壳&#xff0c;包括模具费和100台试产物料费用总计不超过22W&#xff0c;保证最迟在4月中旬全部生产好&#xff0c;以供业务参加5月份开始的大健康展…

C++对象继承

继承概念&#xff1a; 首先引入一个生活例子&#xff0c;普通人是一个类对象&#xff0c;学生是一个类对象&#xff0c;普通人拥有的属性学生一定会有&#xff0c;学生拥有的属性普通人不一定有。类比一下&#xff0c;把普通人抽象为A对象&#xff0c;学生抽象为B对象&#xf…

【知识整理】接手新技术团队、管理团队

引言 针对目前公司三大技术中心的不断升级&#xff0c;技术管理岗位要求越来越高&#xff0c;且团队人员特别是管理岗位的选择任命更是重中之重&#xff0c;下面针对接手新的技术团队做简要整理&#xff1b; 一、实践操作 1、前期准备 1、熟悉情况&#xff1a; 熟悉人员&am…

【开源】JAVA+Vue.js实现计算机机房作业管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 课程管理模块2.3 课时管理模块2.4 学生作业模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程表3.2.2 课时表3.2.3 学生作业表 四、系统展示五、核心代码5.1 查询课程数据5.2 新增课时5.3 提交作…

基于JSP的网上购书系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88825694?spm1001.2014.3001.5503 Java项目-15 源码论文数据库配置文件 基于JSP的网上购书系统 摘要 在当今的社会中&#xff0c; 随着社会经济的快速发展以及计算机网络技术和通讯技术…

C语言-----自定义类型-----结构体枚举联合

结构体和数组一样&#xff0c;都是一群数据的集合&#xff0c;不同的是数组当中的数据是相同的类型&#xff0c;但是结构体中的数据类型可以不相同&#xff0c;结构体里的成员叫做成员变量 结构体类型是C语言里面的一种自定义类型&#xff0c;我们前面已经了解到过int,char,fl…

【matalab】基于Octave的信号处理与滤波分析案例

一、基于Octave的信号处理与滤波分析案例 GNU Octave是一款开源软件&#xff0c;类似于MATLAB&#xff0c;广泛用于数值计算和信号处理。 一个简单的信号处理与滤波分析案例&#xff0c;说明如何在Octave中生成一个有噪声的信号&#xff0c;并设计一个滤波器来去除噪声。 首…

华为问界M9:领跑未来智能交通的自动驾驶黑科技

华为问界M9是一款高端电动汽车&#xff0c;其自动驾驶技术是该车型的重要卖点之一。华为在问界M9上采用了多种传感器和高级算法&#xff0c;实现了在不同场景下的自动驾驶功能&#xff0c;包括自动泊车、自适应巡航、车道保持、自动变道等。 华为问界M9的自动驾驶技术惊艳之处…

《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(11)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述&#xff08;10&#xff09; 4.2 PCIe体系结构的组成部件 PCIe总线作为处理器系统的局部总线&#xff0c;其作用与PCI总线类似&#xff0c;主要目的是为了连接处理器系统中的外部设备…

k8s-深入理解Service(为Pod提供负载均衡和发现)

一、Service存在的意义 二、Service的定义和创建 Pod与Service的关系 Service的定义和创建 三、Service使用NodePort对外暴露应用 四种类型&#xff0c;常用的三种&#xff1a; 指定Service的NodePort端口 在实际生产中&#xff0c;k8s的集群不会直接暴露在公网中&#xff0c…

数据结构第十二天(队列)

目录 前言 概述 源码&#xff1a; 主函数&#xff1a; 运行结果&#xff1a; 前言 今天和大家共享一句箴言&#xff1a;我本可以忍受黑暗&#xff0c;如果我不曾见过太阳。 概述 队列&#xff08;Queue&#xff09;是一种常见的数据结构&#xff0c;遵循先进先出&#…

[word] word分割线在哪里设置 #其他#经验分享

word分割线在哪里设置 在工作中有些技巧&#xff0c;可以快速提高工作效率&#xff0c;解决大部分工作&#xff0c;今天给大家分享word分割线在哪里设置的小技能&#xff0c;希望可以帮助到你。 1、快速输入分割线 输入三个【_】按下回车就是一条长直线&#xff0c;同样分别…

用Jmeter进行接口测试

web接口测试工具&#xff1a; 手工测试的话可以用postman &#xff0c;自动化测试多是用到 Jmeter&#xff08;开源&#xff09;、soupUI&#xff08;开源&商业版&#xff09;。 下面将对前一篇Postman做接口测试中的接口用Jmeter来实现。 一、Jmeter 的使用步骤 打开Jme…

NAS如何成为生产力?使用绿联DX4600 Pro搭建图床并实现创作自由

NAS如何成为生产力&#xff1f;使用绿联DX4600 Pro搭建图床并实现创作自由 哈喽小伙伴们好&#xff0c;我是Stark-C~ 关注我的小伙伴都知道&#xff0c;我之前有分享过我的创作过程与工具&#xff0c;其中介绍了我个人其实一直都是使用Markdown的编辑器来进行图文创作的。 我…

异常统一处理:MissingServletRequestParameterException(遗漏Servlet请求参数异常)

一、引言 本篇内容是“异常统一处理”系列文章的重要组成部分&#xff0c;主要聚焦于对 MissingServletRequestParameterException 的原理解析与异常处理机制&#xff0c;并给出测试案例。 关于 全局异常统一处理 的原理和完整实现逻辑&#xff0c;请参考文章&#xff1a; 《S…