Java图形界面化设计(Swing)--推箱子小游戏

由于一直想着自己做个小游戏,最近放假有时间就照着别人思路写了一个,借鉴自这里,有所创新,算是第一次做图形化界面的程序。

首先我用的地图数据和人物地图素材包和我借鉴的博主用的一样,不过我找到了个更全一点的素材包,最后也加了背景音乐和游戏音效,感觉第一次做的还行。

这是我用的素材包和音乐
这是我用的素材包
音乐
背景音乐用的都是秦时明月的,这四首背景音乐
背景音乐
还有一个推箱子音效和过关音效

我是看了学校发的Java书上面的Swing组件一章和其他博客之后做的,做的途中也碰到了好多问题,通过自己网上查找一点点摸索解决了,还没学多线程,但还是别别扭扭的在播放音乐的部分用了下。

我创了7个类,主类:Run,游戏框架类:GameFrame,游戏界面类:DrawPanel,地图数据类:GameMap,游戏界面点类:Nodes,背景音乐类:BackGroundSounds,游戏音效类:SoundEffects。

主要思路就是,把地图中每一块地方的坐标数据存起来,再把对应图片存起来,再将JFrame子类对象(即游戏框架)的内容面板设为JPanel子类对象(游戏界面),在JPanel上面画地图和人(这要注意,直接在游戏框架上建图会出问题,我那样试的时候运行出来的程序会截屏或者黑屏,在JPanel子类对象上就没问题),然后就是通过调用JPanel子类对象的repaint()方法来画图,再就是写各种事件,为了实现重玩一关和回退的功能,我用了Stack栈存走的路线,对于推箱子音效,就绑定的键盘事件,判断当前人物是否推动箱子,推动了就用线程播放一遍音效,然后关卡过关时,也一样。再就是背景音乐,我用了比较老的JMF包作为拓展包,来实现音乐的暂停和继续播放的操作(Java本身只有开始和结束播放),由于我放了几首歌,所以设了不同关卡不同歌循环播放,还有就是在导出jar包时,可能因为路径原因导致移动jar包位置后,程序可能无法正确执行,我百度到的读取路径方法

this.getClass().getClassLoader().getResource("XXX.png");//对于图片来说
this.getClass().getClassLoader().getResource("XXX.wav")//对于音乐来说

对于人物走动的特效,就用了键盘事件,在键盘按下时切换不同的人物图片达到动起来的效果,键盘按下释放后,人物图切回静止状态,还利用了层叠的特性,将人物的高度稍微拉升一点,从而比周围的墙块高,走到墙附近时,头会覆盖部分墙体,做出了相对2d的效果,还有就是键盘绑定按钮,我弄了四个按钮,上一关,下一关,回退,重玩,分别对应键盘不同键,游戏操作可以用小键盘,也可以用WSAD,当处于第一关的时候,上一关按钮变灰不可按下,关卡开始时,回退和重玩也同样变灰不可按下。还弄了个菜单项,里面加了游戏操作说明。最后将按钮的背景换了一下,一开始想弄个图标,结果好难完全匹配上按钮大小,就干脆直接用花纹图案,再弄了个按钮透明度,整个感觉还不错。由于我下到的素材包图片较全,每一关卡都换了不同的颜色。

最后是效果图
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
链接:https://pan.baidu.com/s/1RqSjSKwOiFYmmFKD_vXE0g
提取码:8cum
复制这段内容后打开百度网盘手机App,操作更方便哦

加的背景音乐有点大,导致整体文件也比较大。。。

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值