制作一款Jframe窗口游戏原来这么简单,我抚摸着光头禁不住惊叹!!开始、暂停、重新开始事件必须有,线程也加入下充充面子,背景更换和移动也需要,一首背景音乐当然更适合游戏。

设计思路和流程

在这里插入图片描述

为什么设计这个玩意

前段事件因为背单词一直用金山打字,上面可以自己导入单词,就写了个Jframe窗口程序封装了分割单词词性和中文翻译的方法,可以实现一键转换成金山打字上面自带的文件那种形式,比较方便,也比较方便java初学者练习打字速度以及java,HTML,js里面特殊名词,个人使用学习效果不错.推荐初学者们一起金山打字吧!!!
然后,整理了那玩意后,就实现了下一个窗口的打字游戏,不过不完善,后续还可以补充加入数据库等,有需要的可以练习玩玩.

一、初始设计分析

技术有限,我也没写过几次这玩意,所以里面注释很多,我就不用文字再说一次了.

窗口的建立和实现显示字母

1. 窗口DemoTest类的窗口生成实现

首先建一个窗口的test测试实现类,实现生成窗口;在窗口中添加一个画布生成MyPannel类
在这里插入图片描述
2. 画布生成类MyPanel中添加一个字母,运行下实现出现字母
这里继承了Panel类,后期因为画布刷新字母移动闪烁问题换成了继承Jpanel类,注意下
在这里插入图片描述
我这没实现的窗口截图,代码正确是没问题的.然后在进行换成生成十个随机字母的设置.x,y轴也使用随机函数随机生成,不过y轴不要过低,初始生成在屏幕上面一半位置就可以了.
3.窗口x,y轴介绍
在这里插入图片描述

4.随机字母生成代码
改写完运行下看看是不是生成了十个随机字符,也可以根据自己需求调整生成范围
在这里插入图片描述

二、进阶设计分析

1.打字游戏基本实现流程的设计

1.添加字母,x,y轴的随机元素的容器,调用容器,减少耦合
在这里插入图片描述
2.加入线程,实现添加的随机元素向下滑落
继承一个Runnable接口,添加一个线程
在这里插入图片描述
3.重写线程中的run()方法,实现字母移动
里面注释暂停两秒是之前的测试注释,忘改了,现在的thread.sleep(3)是暂停3毫秒刷新画布生成移动的元素,实现字母向下隔3毫秒移动一下
y[i]=y[i]+1就是移动速度(距离)是1
一个控制时间,一个控制空间
在这里插入图片描述
4.加入积分制,在窗口上显示积分和结束后显示结束提示
在这里插入图片描述
也修改下线程里面操作,设置线程在成绩为零后停止操作(注意,此时程序中线程是一直开启的)
在这里插入图片描述
5.解决运行时字母闪烁问题
我们运行下已经写好的程序,发现字母一直闪烁,这是不停生成字母导致的,我们使用继承JPanel类的方法处理一下
这个改写下面的super.paint(g)是重点,它起到移动字母而不是不停生成的作用

在这里插入图片描述
paint和Jpanel的区别

在这里插入图片描述

线程中也加入下重绘画布方法

在这里插入图片描述
6.这样基础设计就完成了,剩下的我们进行优化

2.键盘注册实现消除字母和重新生成

1.继承keyListener键盘注册类
在这里插入图片描述
2.在窗口中DemoTest测试类中也要添加键盘注册事件(也有鼠标注册事件,需要鼠标的设计会用到,基本操作是一样的)
在这里插入图片描述
3.重写键盘方法
先重写键盘录入方法,匹配字母实现消除字母,然后重新生成一个新的字母.其他两个键盘按压方法先不用管.
在这里插入图片描述
4.去除消除时相同字母全消除错误
这时候运行程序,我们会发现实现键盘键入消除到是可以了,不过相同的一下子都消除了,这不符合规则啊,这是外挂啊.(感兴趣的可以设计一下多少分可以有一次buff机会,就是可以消除窗体上相同的字母)
好了,那我们就加上索引,相同字母最下面的索引永远是消除的首选
在这里插入图片描述

三.优化流程和窗口

虽然基本流程设计好了,但是这样实在不像是一个游戏,太单调了,我们来优化下,使它像一个游戏,最起码像小时候玩的那种

1.给随机生成的字母加上随机颜色

写一个随机色生成方法
在这里插入图片描述
添加随机颜色容器,通过生成随机颜色方法获取十个索引的颜色
在这里插入图片描述
字母的颜色和成绩的颜色都添加上,这样就好看多了(字体可以自己调)
在这里插入图片描述
看一下效果: 帅 ,不过这个是我完成后截得图,已经加了背景
(没录动图的工具,太伤了)在这里插入图片描述

2.让我们也添加背景图吧(不过太俗了,我们稍微改下设计为会动的背景)

1.新建一个背景移动类,我的是AddBackgroundImage,实现动图的方法
在这里插入图片描述

2.我们在Mypanel画布类中添加图像并调用图像移动类和方法
在这里插入图片描述
3.在MyPanel类中加载图片
不过加载的图片目录要搞清楚,有的可以链src下,不过一些ps处理和电脑画图处理的图片要加上src,其实就是要放在src外面,还没搞明白不知道有什么区别呢…

这个链接有一点浅显介绍:https://blog.csdn.net/weixin_42423774/article/details/108083624
在这里插入图片描述
4.图片写入画布,在窗体中生成
在这里插入图片描述
这个是抽出来的mode方法
在这里插入图片描述

还有个失败后写入画布的图片
在这里插入图片描述

3.就这样干完也很无聊,加个音乐听听

1.添加一个音乐类Addmusic
这个类实现获取音乐路径,返回一个音乐AudioClip类型文件,然后等待使用
在这里插入图片描述
2.然后我们在Mypanel中创建一个变量,实现全局调用
在这里插入图片描述
3.添加音乐文件,实现全局循环播放
在这里插入图片描述

在这里插入图片描述

4.设置开始游戏,暂停,重新开始游戏

volatile
这里我就简单设置了三个全局int变量,值变化就转换模式
1.开始结束重建游戏锁的设置
(1)开始open设置为空格键,按空格开始游戏,不过我没设置
再按空格事件,按一下就行

(2)暂停pause设置为enter键,按下停止线程,在按下继续开始

(3)重新开始游戏rebuild设置为esc键,点下重新开始游戏,设置
volatile修饰为共享变量,便于DemoTest接收实现窗口重绘
(volatile不具有原子性要注意)
在这里插入图片描述

2.按键可以实现开始.暂停.重新开始游戏
在这里插入图片描述

这里有个小知识,就是键盘事件中keyPressed按压类和上面的keyChar获取字符的键盘上的各个键位的值

我整理了一份,有需要的话大家可以去看看
https://blog.csdn.net/weixin_42423774/article/details/108114650
3.我们去用我们设置的锁去包裹各自代码去吧
我们已经看到了rebuild的锁使用,我们再去使用open和pause锁
open开启游戏锁
添加至画布类中进行判定
在这里插入图片描述
pause暂停锁的使用

先写一个线程暂停的PauseAndOpen方法
这个方法实现随着pause值的转变线程的状态
在这里插入图片描述
pause暂停锁要停的是游戏运行的线程,所以PauseAndOpen方法要放在线程里
在这里插入图片描述

5.解决线程不停下来问题

因为线程一直运行,就算关掉窗体也运行,程序不停止,所以我们在测试类中加入关闭窗体直接关掉程序的设置
在这里插入图片描述

四.好了,基本元素都有了,我截下运行图(背景图自己做的,难看体谅)

没有动图,表现不出来,就截两张随便看下吧
在这里插入图片描述
在这里插入图片描述

五.总结

1.需完善的地方:

(1)线程问题太折磨人了
(2)我还没加空格键开始后的判定再按不进入开始图片
(3)加入数据库,能够实现随机生成数据库文本,然后玩消除
(4)java不适合做游戏,玩c,js都比java好玩

2.主要想法:

写这个主要是让新手学程序的看看简易窗体程序如何实现.
重中之重当然是改写了,能学会理解懂可以自己改写的程序才是好程序.
希望大家交流完善,自己多尝试改写程序,添加需求!!!
向秃头师迈进!!!

6.完整代码查看和下载

1.代码查看链接
https://blog.csdn.net/weixin_42423774/article/details/108114981

2.代码下载链接
https://blog.csdn.net/weixin_42423774/article/details/108114981
代码下载一多就会自己加积分,积分不是零的时候想下载可以说声,我改成零!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值