GUI简单实战——贪吃蛇
将前面学到的GUI基础知识完成实战,完成一个简单的贪吃蛇项目
项目功能
用键盘上下左右实现贪吃蛇的自动移动
贪吃蛇吃到食物后,长度加一,分数加一
贪吃蛇吃到自己的身体,则游戏结束
按空格键实现游戏的暂停和继续
效果截图

逻辑分析
需要Main.class中有public static void main(String[] args)来启动游戏
需要写一个GameFrame extends JFrame界面
- 注意:游戏的界面的大小,JFrame 显示大小与设置的不同。需要严格规定窗口的大小,因为小蛇的移动是固定一个格子的大小(比如:25)
- 设置游戏的窗口不可拉伸
定义一个贪吃蛇对象类,将小蛇划分成蛇头和蛇身两个部分,此外,小蛇的方向需要对应不同的蛇头图片
定义一个食物对象类,食物每次被吃到后,需要随机再次出现位置
定义一个数据类,专门来存放一些数据,比如说图片信息,窗口宽高
游戏面板,重中之重。需要继承一个JPanel类,二个接口ActionListener(事件监听), KeyListener(键盘监听)
在初始化函数中,需要获得焦点,添加键盘监听,开启定时器
在画笔中需要画黑框,贪吃蛇,食物,提示
在键盘监听中,空格键处理暂停和继续,方向键处理蛇头和方向
在事件监听中需要对得分进行判断,蛇头和蛇身移动处理,蛇头穿过边界的处理,游戏结束判断处理
repaint 重画页面
代码分析
已经在代码上传到github上面注释很详细
踩坑
JFrame的窗口大小
窗口宽度= 输入宽度+窗口左边框+窗口右边框
窗口高度= 输入高度+窗口上边框+窗口下边框
jframe.setSize(Datas.GameWidth+3+3,Datas.GameHeight+32+3);
需要加上窗口左边框+窗口右边框和窗口上边框+窗口下边框,但是每一个项目的边框大小都是不一样的。所以需要先去测试边框大小
package com.greedy_snake;
import java.awt.*;
public class Main {
public static void main(String[] args) {
//创建一个窗口
GameFrame gameFrame = new GameFrame();
Dimension di = gameFrame.getContentPane().getSize();
System.out.println("内容面板宽度"+di.width);//宽
System.out.println("内容面板的高度"+di.height);//高
}
}
package com.greedy_snake;
import javax.swing.*;
import java.awt.*;
public class GameFrame extends JFrame {
public GameFrame(){
//1 设置标题
this.setTitle("贪吃蛇");
//2 设置宽高 6 35是通过insets得到的
this.setSize(Datas.GameWidth+3+3,Datas.GameHeight+32+3);
//3 设置窗口居中
this.setLocationRelativeTo(null);
//4 设置点击窗口的×关闭
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//5 设置游戏窗口大小不可拉伸
this.setResizable(false);
//6 设置可见
this.setVisible(true);
/*7 得到窗口的边界区域
需要放在setVisible下面输出的4个结果才不是0*/
Insets insets = getInsets();
System.out.println("窗口边框上"+insets.top);//上
System.out.println("窗口边框下"+insets.bottom);//下
System.out.println("窗口边框左"+insets.left);//左
System.out.println("窗口边框右"+insets.right);//右
}
}

得到窗口的边界区域,需要放在setVisible下面输出的4个结果才不是0,不能在setSize中直接Datas.GameWidth+insets.left+insets.right
ImageDemo.class.getResource路径问题
两个例子给你就很理解了


GUI简单实战——贪吃蛇的更多相关文章
- C#简单实现贪吃蛇程序(LinQ + Entity)
做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity) 最近一直在忙着单位核心开发组件的版本更新,前天加了一个通宵,昨天晚上却睡不着,脑子里面突然不知怎的一直在想贪吃蛇的实现方法.以往也有类 ...
- Java一个简单的贪吃蛇
Java一个简单的贪吃蛇 虽然GUI已经要淘汰了,但是手动写写界面还是有助于理解语法的,像构造函数 ,函数调用,内部类,继承,接口.有助于半初学者强化理解. 直接上代码 游戏主体类: package ...
- TOJ 3973 Maze Again && TOJ 3128 简单版贪吃蛇
TOJ3973传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=3973 时间限制(普通 ...
- 使用Java的GUI技术实现 “ 贪吃蛇 ” 游戏
详细教程: 使用Java的GUI技术实现 " 贪吃蛇 " 游戏_IT打工酱的博客-CSDN博客
- 做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity)
最近一直在忙着单位核心开发组件的版本更新,前天加了一个通宵,昨天晚上却睡不着,脑子里面突然不知怎的一直在想贪吃蛇的实现方法.以往也有类似的情况,白天一直想不通的问题,晚上做梦有时会想到更好的版本,于是 ...
- JavaScript实践-简单的贪吃蛇小游戏
实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...
- d3.js 制作简单的贪吃蛇
d3.js是一个不错的可视化框架,同时对于操作dom也是十分方便的.今天我们使用d3.js配合es6的类来制作一个童年小游戏–贪吃蛇.话不多说先上图片. 1. js snaker类 class Sna ...
- Java 用java GUI写一个贪吃蛇小游戏
目录 主要用到 swing 包下的一些类 上代码 游戏启动类 游戏数据类 游戏面板类 代码地址 主要用到 swing 包下的一些类 JFrame 窗口类 JPanel 面板类 KeyListener ...
- js编写简单的贪吃蛇游戏
css代码 *{ margin:; padding:; } td{ width: 4px; height: 4px; background: #ccc; border: 2px solid #ccc; ...
随机推荐
- 04-Spring自定义标签解析
自定义标签的解析 这一篇主要说明自定义标签的解析流程,除了 bean.alias.import.beans之外的标签,都属于自定义标签的范围,自定义标签的解析需要命名空间配合, 获取对应的命名空间 根 ...
- Django 使用 pycharm 创建新的app(可以理解为模块)
创建工程的时候,注意选择Existing interpreter 选择对应的 python 解释器,电脑如果安装有多个版本的 Python 的话,注意python版本的问题, 以上即是创建的项目目录, ...
- 利用eigen库简单实现矩阵功能
eigen是目前运行速度较快的C++矩阵运算库,而且其轻便小巧安装方便的特点简直是吸引人啊!特做此笔记,记录一下这个安装简单.体积轻巧.功能强大的C++库. 1. Download and Insta ...
- P1047_校门外的树(JAVA语言)
题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米. 我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置: 数轴上的每个整数点,即0,1,2,-,L都种 ...
- 一些DevTools的小技巧-让你不止会console.log()
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/beyond-console-log-leve ...
- github文件快速下载
目录 一,提升加载速度 二,提升下载速度 只是想快速下载文件的直接看第二部分. github加载速度慢究其原因还是伟大的墙的存在.我们需要赞美墙,但就算墙很伟大,问题还是要解决的. 有问题就解决问题, ...
- 【linux】命令-网络相关
目录 前言 1. ifconfig 1.1 语法 1.2 参数说明 1.3 例程 2. iw 2.1 扫描可用无线网络 2.2 WiFi连接步骤(教程A) 2.2.1 查看可以用无线设备信息 2.2. ...
- 快速上手阿里云oss SDK
使用阿里云oss SDK 依赖安装: pip install oss2 pip install aliyun-python-sdk-sts 版本最好是 2.7.5 或以上 如果要开启 crc64 循环 ...
- 如何在IDEA中进行时序图分析
方法一: 使用插件 SequenceDiagram (系统自动生成) 使用方法: 下载插件,我们可以在 Plugins 中找到 选中线程方法名,然后右键就可以创建此方法的时序图了 参数设置 生成效果以 ...
- Java后端进阶-消息中间件
1.分布式事务 MQ分布式消息中间件实战应用 通过控制台就可以定义 二.分布式消息中间件 解决耦合的问题 http内容很繁琐,而且是短连接响应后就会中断 持久化 消息分发 高可用 高可靠