java课程设计水滴游戏_Java课设——SuperMario(团队)

本文介绍了Java课程设计项目SuperMario,由酸菜鱼啊啊啊团队完成,包括团队成员分工、项目功能实现、代码结构和关键代码。项目实现了登录注册、马里奥游戏地图绘制、背景音乐、重力和碰撞检测等功能,同时讨论了项目中的挑战和未来展望,如增加关卡、道具和音效等。
摘要由CSDN通过智能技术生成

SuperMario

1.团队名称、团队成员介绍

团队名称:酸菜鱼啊啊啊

吴沂聪(组长)🍋

“酸”字代表人物,因素材问题经常羡慕其他组

负责登录

注册gui设计以及功能的实现

设计背景

素材收集和编辑

吕恬(组员)🥦

“菜”字代表,自封,其实是我组技术骨干,可靠的优秀组员

利用二维数组存储文件流导入的map.txt,绘制出马里奥游戏的地图

多层背景滚动向后,实现动态背景。马里奥移动时背景也会移动

游戏开始界面与菜单的切换

背景音乐的插入与循环播放

实现重力和碰撞检测的功能

特殊道具及马里奥获得后的效果

林玮璐(组员)🐟

“鱼”字代表人物,编辑的素材使用率低达10%

设计砖块

管道

蘑菇

乌龟

盒子

通关塔

素材收集和编辑

2.项目git地址

3.项目git提交记录截图

c40ba127c81fdf0fc41bfc883658c3b5.png

3ad81c53b246ce7a1833dd917fe78494.png

a4c7c08084571415ff31a303e249c4ab.png

4.前期调查

通过进行马里奥游戏获得以下内容

马里奥人物:可通过前进,跳跃等动作进行相关冒险

障碍物:小怪兽(可进行攻击)、其他障碍物,如:管道、砖块(可进行躲避)

记分:金币,攻击怪兽,进行的关卡

失败条件:碰到怪兽,掉落到“无尽深渊”游戏提前结束

通关条件:到达旗帜

5.项目功能架构图、主要功能流程图

功能架构图

8f88fdc904b6fb79c08cf7031be44a97.png

MVC图

b8a80d4bf8c016a9e97ceca1c2f044cf.png

6.面向对象设计包图、类图。

UML类图

47e90d9c4e5538e55650a35190664928.png

包图

3377e0f2b837050570459155febf0026.png

7.项目运行截图或屏幕录制。

登录注册界面

eaf957a19ff1d66508ce4de8849ea0b4.gif

主界面游戏

f96794fa8110adbe25496357e3b3a8ee.gif

8.项目关键代码:模块名称-文字说明-关键代码(注意:不得直接复制所有源代码,仅粘贴最关键代码)。

登录

获取密码框的密码及文本框的账号,然后与从文件中读取的账号密码依次进行比对,若完全一致则登录成功,不一致则提示登录失败。

38f44b43143ff6bcb3553538c27a738e.png

注册

与登录部分类似,获得账号、两次密码后,与文件读取的账号比对,满足用户名和密码不为空、用户名不重复、用户名和密码不包含空格的条件后写入文件。

13cfd42650c7ee8ba2b4583ab8d5d73d.png

背景部分:将图片写进HashMap中,便于之后读取

BackGroundMap类中设置背景素材的位置等因素调用BackGround类的方法,BackGround类获取到素材的因素,用draw方法绘制背景。

e6bea136ae26c342b1f3cfd5911bca99.png

5817ae962c6c13a33b0eee15d414ea95.png

管道设计

其他静态设计与此相同

248077cf79a75b492b4012df23b16bd1.png

乌龟设计

其他动态设计与此相同

9aa5f8e87664f64feb024c7d45ab9033.png

50ec669d9d056b0607ae36a616bced08.png

a6716562b55147c03a61b82445651a7d.png

80fbdadc544452ba66874a30840899c0.png

利用二维数组存储文件流导入的map.txt,绘制出马里奥游戏的地图

95965c9e83756158a2de9540298ec498.png

定义二维数组map[][]存储IO流读取的map.txt文件,通过readLine()方法全部读入,返回行数和列数定下固定的数组大小。

4e86c886cf8ef7ba4f0be56b864f1b2e.png

将读取到文件的数据全部传递存储在map[][],行数row与列数cloum作为关键变量,后续通过遍历数组来找到标记好的位置,进行游戏界面的绘制工作和插入背景图片及相关图片。

优化:存在map.txt文件就能对地图进行修改,原本想要完成地图编辑器的功能,游戏开始前让玩家自由编辑接下来关卡的地图,游戏结束或进入下一关卡(换了背景图片),能够弹出地图编辑的界面,同时会弹出选关界面

678a1c81c7038668f1ffe02f37642ac0.png

确定数组中的标记数字:0表示没有标记,1表示该位置绘制水管,2表示该位置绘制砖块。(不同数字代表不同物体)

游戏开始界面与菜单的切换音效

232d5ff5fa78fd4686017cda5adc924e.png

Menu类的属性,大多是图形界面GUI的固定变量,开始界面包括五张图片,全数以HashMap存储,读入图片时采用双缓存的方法,提高图片读取速度

c51755b03faf64bb1454025d5c0da6b6.png

绘制开始界面,同时启动音乐线程(采用多线程技术),调用Mp3Thread类,实现背景音乐的循环播放,此时鼠标移动到相应按钮上会有音效,点击MarioGame按钮进入游戏,Out按钮直接退出游戏,界面自动关闭

a04787588cc08482fb186b7c7d77f837.png

进入游戏即启动gc线程,paint()方法开始绘制相关组件,当判断条件为true时绘制相应的组件画面,出现开始菜单;当判断条件为false时进入死亡页面。进入开始页面后插入的背景音乐随即启动,一直循环播放,当lose或者win后会替换成新的音乐。

1f64c6ba44ea3260dc4370261e048e8c.png

游戏开始前的菜单设置,还有死亡后弹出的菜单按钮设置,GUI界面的布局只截取上述关键代码,整个开始界面的设计使用NetBeans,还导入substance.jar栈包来对边框和页面进行美化

61a7ece4ac64c72d50c77dc5d130e14d.png

Mp3Thread线程,游戏开始即新建一个线程,线程启动后音乐播放;音乐的导入采用IO流形式;run方法中包含异常处理,若没有找到音乐文件则输出异常信息。

8beccaec84faddbcf61673957a970c94.png

ab9b63b88f4b4372e9c5143c1b857000.png

重力效果的实现

79f0e8626bd2312500c2f43dde0d9285.png

在跳跃时加入了音效,运行时应用键盘监听插入水滴音效

马里奥与其他物体的碰撞检测

10c49346f3851571cfe71ef9279d251f.png

48c05e4ddccc5166132d828a726293b1.png

因为有坐标轴作为参照,可以在x,y两个水平方向进行最简单的碰撞检测,

6336e098a34e2dbff1615b47f909b514.png

物体形状一般可以设定为矩形区域,这类规则图形。它的碰撞检测可以通过java API中的Rectangle类来实现碰撞的检测。规则图形碰撞检测(Rectangle):它就是指定坐标空间的一个区域,这个区域是通过指定左上角x、y坐标和去高度和宽度来确定的。如果两个Rectangle对象有交集,那么他们就有碰撞了。而每个形状我们都可以得到他们的Rectangle对象,这样图形的碰撞检测也就得以实现了。

38d17e0899a8c3cab3c9f7cfe9ff0bf8.png

160e23bd7b093c4129218f67e4d8889b.png

9.项目代码扫描结果及改正。

扫描结果

d9302b67fcc70acbeedfcb62446a1321.png

8cad0964e56a8acb9d27b38f71690940.png

09fd8c96911956f9551ec222b6592c85.png

ddf090b339ac71b9ee986652b72623e2.png

e6caad4d0cdeb7fd40e1ac090b6f965f.png

ab7b40d085ff842e172cbaaacc8be3cc.png

扫描修正

44a072ef72b9754dd432d12a0831b434.png

ca54219f4446145239f9c83126c30ac5.png

c61d753ba8c98e29ec81bbde22388bb0.png

10.项目总结(包括不足与展望)

不足:

关卡设计比较少

排行榜最终没能实现

道具功能过少

展望:

增加金币功能,实质上没有加入金币处理,所以还需要考虑相关设计

道具上设计一些其他更加精妙有趣的内容,比如增加生命值,增加速度,加入保护保护盾等

特色:

设置隐藏道具,可以使马里奥变大,进而具备二段跳的功能

主面板设置动态循环图片,使页面更加美观

游戏加入背景音乐并且具备某些动作触发特殊音效的作用

背景也设置动态效果,增加页面美观

水管采用多张图片叠加的效果,使水管看起来更加立体

在盒子的设计上,加入了让盒子不停旋转的功能

增加了马里奥与地面之间的的摩擦,重力加速度,奔跑为变速

总结:

吴沂聪(组长):

因为选题使制作游戏,完成游戏的过程比较繁琐,需要考虑许多内容,整个过程是痛苦又快乐的,需要考虑许多细节,有些时候需要发挥自己的想象力,修改一系列的错误,又因为游戏的可视化,美观性,搜索许多素材,但当自己写的环节运行出来,也是十分快乐的,通过完成,更深层次了解IO流、GUI的运用,也从队友那儿了解了碰撞检测,重力检测,收获颇多。

吕恬(组员):

开始马里奥的背景无法移动,因为是导入很长的图片,无法随着马里奥的行动变化,最初的想法是代入了以前的游戏体验,只有马里奥移动,图片完全保持静止。后来对比了游戏的运行界面,为背景图片也加入了一个相对速度:即马里奥以一定的速度向右移动,图片会以相同的速度往左运动,但是其他障碍物或者敌人的初始位置不会发生什么变化。静止的背景确实还原了原作的风格,但是改进成动画后制作更为精良同时背景的白云是能够移动的,即形成了动画的效果。实现重力的模拟之后,再次改进优化,增加了摩擦力的判断和实现,马里奥在平地移动时会有拖拽的效果,并不是定速。

林玮璐(组员):

做游戏的过程特别困难,但因为可视的界面,且游戏的趣味性,让人在过程中也充满快乐,就是又难受又快乐。其中学习了解了游戏实际实现具体需要哪些方法,也是通过了这次课设才知道,那些动态的动作都是通过图片一帧一帧弄出来,进而呈现动态的状态。也学习了解了碰撞检测,知道了Rectangle类,还了解了像素检测。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值