当前位置:网站首页 > Java基础 > 正文

java基础开发贪吃蛇游戏



目录

前言

一、结构体与枚举

二、游戏开始的初始化

void WelcometoGame();//欢迎界面

void CreatMap();//地图创造

void CreatSnake(pSnake ps);//创造蛇体

java基础开发贪吃蛇游戏

void CreatFood(pSnake ps);//食物创建

二、游戏的运行

void HelpInfor();//提示信息打印

void pause();//游戏暂停

void SnakeMove(pSnake ps);//蛇体移动

int nextisfood(NeedSlink nextword,pSnake ps);//判断下一个是不是食物

void EatFood(NeedSlink nextword,pSnake ps);//吃掉食物

void NoFood(NeedSlink nextword, pSnake ps);//蛇体直接移动

void Killbywall(pSnake ps);//判断是否撞墙​编辑

void Killbyself(pSnake ps);//判断是否撞到自己

三、游戏结束以及主函数

4、总结

5、源码


前言

贪吃蛇游戏的实现需要的理论基础最重要的结构体、指针、链表,然后其他的就跟着作者的思路一起走下去吧。

一、结构体与枚举

这个结构体是用来创作蛇的身体的,在vs的实现中我们的windows控制台主机通过x,y以二维坐标的方式来定位我们蛇的位置然后在这个位置打印我们的蛇体即可。

这个结构体是为了方便我们后面对于蛇的一些参数的处理,以免后面创建多个变量。我们把蛇的参数通过结构体都列出来变量这样更方便后面的初始化和使用。

用于后面的蛇运动方向和游戏进行的状态。

二、游戏开始的初始化

首先我们要更改windows控制台主机的名字和控制台的界面大小就需要调用我们的system函数它的头文件是<stdlib.h>,使用的时候别忘了包含这个头文件,然后就是获得句柄,这里的句柄是指获得可以控制windows控制台主机的输入入口,这样我们才能获得控制台的光标,只有当把光标移动到我们设置的x和y坐标上我们才能对那个坐标进行打印蛇体。

后面有一个SetPos函数就是为了让光标在我需要的坐标上去,后面我们需要的时候直接调用,在GameStart函数中调用一次是为了让隐藏光标,SetPos函数是为了设置光标位置。

void WelcometoGame();//欢迎界面

这里的SetPos函数就是前文介绍的定位光标位置的函数,定位之后打印我们需要的界面就行了。别忘了调用system的pause和cls,pause是暂停按任意键就可以结束暂停这样的目的是防止游戏程序直接跑结束了,cls是清屏将我们打印的所有东西清屏这样的目的是为了让我们进入下一个界面的时候前面的东西都清理掉了。

void CreatMap();//地图创造

这里的地图就是指的四周的墙体,将这四周的墙体打印出来,需要参考你前面通过system函数设置的windows控制台主机的界面大小。wprintf是用来打印宽字符,即是一个字符占两个做个坐标,wall在前面已经用define定义了。

void CreatSnake(pSnake ps);//创造蛇体

蛇体主要是由链表创建,链表是由结构体实现的,前面我们在创建结构体的时候就创建了结构体指针NeedSlink,创建指针的目的是为了后面修改数据,然后创建5个链表意味着我们初始的蛇身体有五节,malloc是为了向内存中申请一块空间出来,后面就在以这五个链表的x和y来打印蛇的身体,body在前面已经定义了,统一定义的目的是为了后面修改的时候只需要修改一次即可。然后进行蛇参数的初始化。

void CreatFood(pSnake ps);//食物创建

因为我们的食物是随机生成的,所以需要调用我们的rand函数来生成随机数,同时生成的随机数要有范围限制,不能和蛇的身体重合同时不能和墙重合。

二、游戏的运行

首先在墙的右边打印分数,然后这里需要获取关键的键盘输入信息来控制贪吃蛇的走向,用KEY_PRESS在前面已经用宏定义了• 上:VK_UP • 下:VK_DOWN • 左:VK_LEFT • 右:VK_RIGHT • 空格:VK_SPACE • ESC:VK_ESCAPE • F3:VK_F3 • F4:VK_F4

当蛇的方向是向下的时候不能直接键盘输入向上的指令,当然其他方向也是一样的道理。

void HelpInfor();//提示信息打印

void pause();//游戏暂停

void SnakeMove(pSnake ps);//蛇体移动

这里要再申请一个蛇的空间来明确下一步蛇的运动方向,在前面的函数中我们从键盘中获取方向之后存进dire中然后判断不同的方向后面申请空间中的x和y不同,同时要判断下一个是不是食物如果是食物直接吃掉食物,不是食物的话就向dire的方向走一步,最后判断游戏的是否结束。

int nextisfood(NeedSlink nextword,pSnake ps);//判断下一个是不是食物

是食物的话返回1不是食物返回0。

void EatFood(NeedSlink nextword,pSnake ps);//吃掉食物

当返回为1的时候就吃掉食物,先释放我们前面为蛇下一个运动的位置申请的空间因为我们食物已经存在空间了,然后吃掉食物,把这个食物链表和我们蛇体的链表链接起来,之后再创建一个新的食物用CreatFood函数。

void NoFood(NeedSlink nextword, pSnake ps);//蛇体直接移动

用前面开辟的下一个位置的空间成为蛇头,然后释放掉蛇尾。

void Killbywall(pSnake ps);//判断是否撞墙

判断是否撞墙来改变游戏状态,判断游戏是否结束。

void Killbyself(pSnake ps);//判断是否撞到自己

撞到自己也会改变游戏状态导致游戏结束。

三、游戏结束以及主函数

打印游戏结束的界面,同时释放掉前面为蛇体释放的空间。

主函数和test函数主要是为了调用前面我所写的三个大部分以及多次进行游戏的循环,这里的本地化是为了让我们的宽字符能够使用,srand函数是为了后面x和y生成随机数调用rand函数做铺垫。

4、总结

由于作者水平有限,我尽可能讲清楚,相关函数有不理解的地方还请大家发挥自习能力,查阅相关资料进行学习,同时希望我的文章能够对大家有所帮助,如有错误,欢迎指出。谢谢大家的阅读!

5、源码

NOODSNAKE.C

 

SNAKE.H

 

SNAKE.C

 

版权声明


相关文章:

  • java基础实训日志2024-10-23 22:58:03
  • 兄弟连java基础教程2024-10-23 22:58:03
  • JAVA中基础算法2024-10-23 22:58:03
  • java基础那本书好2024-10-23 22:58:03
  • 刘意老师java se 基础视频2024-10-23 22:58:03
  • java面向对象零基础2024-10-23 22:58:03
  • java基础语法2122024-10-23 22:58:03
  • 浪潮java基础面试2024-10-23 22:58:03
  • java程序设计基础a2024-10-23 22:58:03
  • java基础类型空间2024-10-23 22:58:03