Java实现贪吃蛇
游戏界面基本布局

贪吃蛇是基于JFrame的一款小游戏。它主要有两部分组成,一个是显示区域,一个是按钮区域。这两个区域都用JPanel来实现。
首先需要创建一个基于JFrame的类,例如创建一个MyFrame,让其继承于JFrame。
然后创建一个显示区域的类MyPanel,一个按钮区域的类Button,当然了这两个类都基于JPanel。
第三步:在MyFrame类中实例化两个JPanel类。并在MyFrame构造方法中设置窗体的logo、窗体的标题、窗体初始位置、窗体的大小、窗体的背景颜色、窗体的关闭方式等。
第四步:继续清空MyFrame的布局管理器、设置窗体为固定大小不可更改、添加两个区域并显示、设置键盘监听焦点(控制贪吃蛇的移动)等。
游戏显示区域
MyPanle实现思路:
- 在构造方法中注册键盘监听事件、设置容器的坐标及大小、设置容器的背景颜色。如果想要添加背景图片,可以重写paintComponent方法。
- 创建一个食物类Food,创建一个贪吃蛇类Snake,并在MyPanel里实例化这两个类。
- 在MyPanel里创建一个贪吃蛇的线程,并在构造方法里启动该线程。
- 重写paint方法,绘制容器。并设置相应的颜色、画线、调用贪吃蛇的移动方法和绘画方法、调用食物的绘画方法。
配置文件类:
- 定义布局所需要的行和列,定义上下左右四个方向
- 定义死亡检测标识、定义游戏状态检测标识。
贪吃蛇线程类:
- 重写线程启动的方法
- 在启动方法里时刻检测贪吃蛇是否死亡,如果死亡则弹出“游戏结束”的对话框。
食物类:
- 定义食物的坐标。
- 定义食物的绘画方法
- 当食物被吃掉后,我们需要随机生成一个位置来展示食物,因此需要一个生成随机位置的方法repair()
- 定义获取食物坐标的方法。在构造方法里随机生成食物的坐标
结点类:
蛇有蛇头和蛇身、蛇尾,我们用节点来实现。
- 创建一个结点类,属性包括所在行、所在列、上个结点、下个节点、前进方向。
- 在有参构造方法中初始化贪吃蛇的位置信息,指定贪吃和前进的方向。
- 定义绘画方法,蛇头颜色为黄色、其余为蓝色。
贪吃蛇类
- 创建一个贪吃蛇类,属性包括头、身、尾、食物。
- 定义有参构造方法,参数为食物。并初始化贪吃蛇的初始坐标、以及设置结点之间的关系。
- 定义绘画方法,遍历贪吃蛇的每个节点,然后把每个节点绘画出来。
- 定义获取贪吃蛇坐标的方法,用于获取贪吃蛇的坐标。
- 定义贪吃蛇的移动方法。贪吃蛇怎么移动?添加蛇头——去蛇尾——吃食物——死亡检测
- 定义添加蛇头的方法,设置一个Node临时变量。根据前进方向判断,如何添加蛇头。
- 定义去除蛇尾的方法,把蛇尾的前一个结点的后指针设置为空,把蛇尾的前一个结点设置为蛇尾即可。
- 定义吃食物的方法,三步走。首先判断贪吃蛇坐标和食物坐标是否重合,如果重合就添加蛇头然后重新布局食物。
- 定义死亡检测方法,两步走。第一步判断是否越界,第二步判断头是否和尾重合。
- 定义键盘控制方法。当用户按下WASD键,贪吃蛇才可改变方向移动且不能逆向移动。(比如开始向上移动,我不能直接按S键让它向下移动)。
按钮区域
- 创建属性:myPanel、暂停、继续、重新开始、退出。
- 创建带参数的构造方法,参数为myPanel.
- 在构造方法中设置初始位置及大小、创建四个按钮并添加。
- 在构造方法里注册按钮监听。
- 重写actionPerformed方法。检测按下按钮。
- 如果按下继续游戏,那么需要重写设置键盘监听焦点
- 如果是重新开始游戏,那么需要停止当前线程,然后重新生成蛇和食物,并把控制条件还原到初始状态。最后创建新的线程对象并启动,最后再设置键盘监听焦点。
代码获取
https://github.com/XinPingLover/MyCode.git
Java实现贪吃蛇的更多相关文章
- java实现贪吃蛇游戏
最简单的4个java类就可以实现贪吃蛇: main函数: package tcs; public class GreedSnake { public static void main(String[] ...
- Java实现贪吃蛇游戏【代码】
花了两个下午写了一个贪吃蛇小游戏,本人想写这游戏很长时间了.作为以前诺基亚手机上的经典游戏,贪吃蛇和俄罗斯方块一样,都曾经在我们的童年给我们带来了很多乐趣.世间万物斗转星移,诺基亚曾经作为手机业的龙头 ...
- 用Java开发贪吃蛇游戏
贪吃蛇游戏的设计步骤: Part 1: 设计游戏图纸 画出900*700的白色窗口 在窗口上添加画布 在画布上添加标题 在画布上添加黑色游戏区 Part 2: 放置静态的蛇:一个头.两个身体 加上开始 ...
- java 简单贪吃蛇
1. [代码]java 简单程序 跳至 [1] [全屏预览]package com.snake;import java.awt.*;import javax.swing.*;import ja ...
- Java实现贪吃蛇游戏(含账号注册登录,排行榜功能)
这是我第一次工程实践的作业,选题很多,但我只对其中的游戏开发感兴趣,可游戏就两三个类型,最终还是选择了贪吃蛇.其实就贪吃蛇本身的代码实现还算是比较简单的,可是实践要求代码行达到一定数量,所以我就额外给 ...
- 用GUI实现java版贪吃蛇小游戏
项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public static void main(String[] args) { JFrame jFr ...
- Android实现贪吃蛇游戏
[绥江一百]http://www.sj100.net 欢迎,进入绥江一百感谢点击[我的小网站,请大家多 ...
- 贪吃蛇的java代码分析(一)
自我审视 最近自己学习java已经有了一个多月的时间,从一开始对变量常量的概念一无所知,到现在能勉强写几个小程序玩玩,已经有了长足的进步.今天没有去学习,学校里要进行毕业答辩和拍毕业照了,于是请了几天 ...
- 贪吃蛇的java代码分析(二)
代码剖析 贪吃蛇是一款十分经典的小游戏,对初入coding的朋友来说,拿贪吃蛇这样一个案例来练手十分合适,并不高的难度和成功后的成就感都是学习所必须的.下面我将依照我当时的思路,来逐步分析实现的整个过 ...
随机推荐
- 【uva 753】A Plug for UNIX(图论--网络流最大流 Dinic)
题意:有N个插头,M个设备和K种转换器.要求插的设备尽量多,问最少剩几个不匹配的设备. 解法:给读入的各种插头编个号,源点到设备.设备通过转换器到插头.插头到汇点各自建一条容量为1的边.跑一次最大流就 ...
- Codeforces Round #652 (Div. 2)D. TediousLee 推导
题意: Rooted Dead Bush (RDB) of level 1是只有一个点,如下图 当(RDB) of level i变成(RDB) of level i+1的时候,每一个顶点要进行下面的 ...
- Gym 100803G Flipping Parentheses
题目链接:http://codeforces.com/gym/100803/attachments/download/3816/20142015-acmicpc-asia-tokyo-regional ...
- 记一次基于springboot+aop实现日志记录实战
1. 为什么要记录日志 好处: a. 可以对一些重要功能进行记录,方便以后跟踪是谁操作此功能的. b. 在操作某些功能时可能会发生异常,但每次出现异常我们想定位日志都要去服务器查看我们的日志.有了日志 ...
- java通过HttpClient调用接口总结
2.HttpClient 2.1简介: 最近看项目的代码,看到工程中有两个jar包张的很像,一个是commons.httpclient-3.1.jar,一个是httpclient4.2.1.jar,很 ...
- K8S(04)核心插件-coredns服务
K8S核心插件-coredns服务 目录 K8S核心插件-coredns服务 1 coredns用途 1.1 为什么需要服务发现 2 coredns的部署 2.1 获取coredns的docker镜像 ...
- ubuntu 16.04 i386 安装 ruby + bundler + rails ; 搭建简单的网站bitbar
参考 http://gorails.com/setup/ubuntu/16.04 概述 Project 2 主要探究对web的攻击,本次试验共有6个部分. Project 2中攻击的是一个提供电子货币 ...
- JBoss 5.x和6.x 反序列化漏洞(CVE-2017-12149)
0x01 漏洞简介 该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter过滤器中.该过滤器在没有进行任何安全检查的情况 ...
- C语言中函数的调用方式
第一眼看到这样一个题目的我,心想除了如下的直接调用还能怎么调用呢? 1 void fun(void) 2 { 3 ...... 4 //你的代码 5 ..... 6 } 7 int main(void ...
- 2020 Web 全栈面经
2020 Web 全栈面经 1.简历 2. 技术 3. 项目 4. 架构 5. 沟通,协作 6.成长 7. 面试技巧 准备 电话确认,面试流程,五险一金缴纳情况 有无笔试,几轮,面试时间,答复时间 细 ...