Java 实现贪吃蛇游戏的示例

 更新时间:2021年03月04日 08:33:44   作者:半夏~心平  
这篇文章主要介绍了Java 如何实现贪吃蛇游戏,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下

游戏界面基本布局

贪吃蛇是基于JFrame的一款小游戏。它主要有两部分组成,一个是显示区域,一个是按钮区域。这两个区域都用JPanel来实现。

首先需要创建一个基于JFrame的类,例如创建一个MyFrame,让其继承于JFrame。

然后创建一个显示区域的类MyPanel,一个按钮区域的类Button,当然了这两个类都基于JPanel。

第三步:在MyFrame类中实例化两个JPanel类。并在MyFrame构造方法中设置窗体的logo、窗体的标题、窗体初始位置、窗体的大小、窗体的背景颜色、窗体的关闭方式等。

第四步:继续清空MyFrame的布局管理器、设置窗体为固定大小不可更改、添加两个区域并显示、设置键盘监听焦点(控制贪吃蛇的移动)等。

游戏显示区域

MyPanle实现思路:

  1. 在构造方法中注册键盘监听事件、设置容器的坐标及大小、设置容器的背景颜色。如果想要添加背景图片,可以重写paintComponent方法。
  2. 创建一个食物类Food,创建一个贪吃蛇类Snake,并在MyPanel里实例化这两个类。
  3. 在MyPanel里创建一个贪吃蛇的线程,并在构造方法里启动该线程。
  4. 重写paint方法,绘制容器。并设置相应的颜色、画线、调用贪吃蛇的移动方法和绘画方法、调用食物的绘画方法。

配置文件类:

  1. 定义布局所需要的行和列,定义上下左右四个方向
  2. 定义死亡检测标识、定义游戏状态检测标识。

贪吃蛇线程类:

重写线程启动的方法
在启动方法里时刻检测贪吃蛇是否死亡,如果死亡则弹出“游戏结束”的对话框。

食物类:

  1. 定义食物的坐标。
  2. 定义食物的绘画方法
  3. 当食物被吃掉后,我们需要随机生成一个位置来展示食物,因此需要一个生成随机位置的方法repair()
  4. 定义获取食物坐标的方法。在构造方法里随机生成食物的坐标

结点类:

蛇有蛇头和蛇身、蛇尾,我们用节点来实现。

  1. 创建一个结点类,属性包括所在行、所在列、上个结点、下个节点、前进方向。
  2. 在有参构造方法中初始化贪吃蛇的位置信息,指定贪吃和前进的方向。
  3. 定义绘画方法,蛇头颜色为黄色、其余为蓝色。

贪吃蛇类

  1. 创建一个贪吃蛇类,属性包括头、身、尾、食物。
  2. 定义有参构造方法,参数为食物。并初始化贪吃蛇的初始坐标、以及设置结点之间的关系。
  3. 定义绘画方法,遍历贪吃蛇的每个节点,然后把每个节点绘画出来。
  4. 定义获取贪吃蛇坐标的方法,用于获取贪吃蛇的坐标。
  5. 定义贪吃蛇的移动方法。贪吃蛇怎么移动?添加蛇头——去蛇尾——吃食物——死亡检测
  6. 定义添加蛇头的方法,设置一个Node临时变量。根据前进方向判断,如何添加蛇头。
  7. 定义去除蛇尾的方法,把蛇尾的前一个结点的后指针设置为空,把蛇尾的前一个结点设置为蛇尾即可。
  8. 定义吃食物的方法,三步走。首先判断贪吃蛇坐标和食物坐标是否重合,如果重合就添加蛇头然后重新布局食物。
  9. 定义死亡检测方法,两步走。第一步判断是否越界,第二步判断头是否和尾重合。
  10. 定义键盘控制方法。当用户按下WASD键,贪吃蛇才可改变方向移动且不能逆向移动。(比如开始向上移动,我不能直接按S键让它向下移动)。

按钮区域

  1. 创建属性:myPanel、暂停、继续、重新开始、退出。
  2. 创建带参数的构造方法,参数为myPanel.
  3. 在构造方法中设置初始位置及大小、创建四个按钮并添加。
  4. 在构造方法里注册按钮监听。
  5. 重写actionPerformed方法。检测按下按钮。
  6. 如果按下继续游戏,那么需要重写设置键盘监听焦点
  7. 如果是重新开始游戏,那么需要停止当前线程,然后重新生成蛇和食物,并把控制条件还原到初始状态。最后创建新的线程对象并启动,最后再设置键盘监听焦点。

代码获取

https://github.com/XinPingLover/MyCode.git

以上就是Java 实现贪吃蛇游戏的详细内容,更多关于Java 贪吃蛇的资料请关注脚本之家其它相关文章!

相关文章

  • 基于FeignException$InternalServerError的解决方案

    基于FeignException$InternalServerError的解决方案

    这篇文章主要介绍了FeignException$InternalServerError的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • springboot集成与使用Sentinel的方法

    springboot集成与使用Sentinel的方法

    这篇文章主要介绍了springboot集成与使用Sentinel的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 深入理解SpringBoot的配置环境属性

    深入理解SpringBoot的配置环境属性

    SpringBoot的配置环境属性是一种强大的工具,可以帮助我们配置和管理我们的应用程序,这篇文章主要介绍了SpringBoot的配置环境属性,需要的朋友可以参考下
    2023-07-07
  • Java实现世界上最快的排序算法Timsort的示例代码

    Java实现世界上最快的排序算法Timsort的示例代码

    Timsort 是一个混合、稳定的排序算法,简单来说就是归并排序和二分插入排序算法的混合体,号称世界上最好的排序算法。本文将详解Timsort算法是定义与实现,需要的可以参考一下
    2022-07-07
  • 简单谈谈Java遍历树深度优先和广度优先的操作方式

    简单谈谈Java遍历树深度优先和广度优先的操作方式

    这篇文章主要介绍了简单谈谈Java遍历树深度优先和广度优先的操作方式的相关资料,需要的朋友可以参考下
    2023-03-03
  • Java使用hutool实现文件大小的友好输出

    Java使用hutool实现文件大小的友好输出

    这篇文章主要为大家详细介绍了Java如何使用hutool实现文件大小的友好输出,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • Java中BufferedReader与BufferedWriter类的使用示例

    Java中BufferedReader与BufferedWriter类的使用示例

    BufferedReader与BufferedWriter分别继承于Reader和Writer类,分别为字符的读取和写入添加缓冲功能,这里我们就来看一下Java中BufferedReader与BufferedWriter类的使用示例:
    2016-06-06
  • 分享几个写简洁java代码的小技巧

    分享几个写简洁java代码的小技巧

    成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的,下面这篇文章主要给大家介绍了关于写java代码的小技巧,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • SpringAOP中的通知Advice详解

    SpringAOP中的通知Advice详解

    这篇文章主要介绍了SpringAOP中的通知Advice详解,Spring 的 AOP 功能中一个关键概念是通知Advice与切点Pointcut表达式相关联在特定节点织入一些逻辑,Spring 提供了五种类型的通知,需要的朋友可以参考下
    2023-08-08
  • Java读取PDF中的表格的方法示例

    Java读取PDF中的表格的方法示例

    本文主要介绍了Java读取PDF中的表格的方法示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10

最新评论