https://github.com/skyerhxx/MarioProject
一、程序分析:
a)使用Java的面向对象设计思路来完成游戏程序,和类的设计
i.Mario对象
ii.敌人对象
iii.障碍物对象
iv.场景对象
v.窗体对象
vi.图片及背景音乐,在该类中,所有的属性都应该是静态(static)的属性b)总代码量:100-2000行
二、窗体程序的开发
MyFrame.java
键位的编码:
左箭头:37
右箭头:39
空格:32
三、常量类的开发
StaticValue.java
四、场景类的开发
a)场景中的属性
i. 背景图片ii. 类型保存场景所在位置(场景的顺序)
iii.Boolean 类型标识当前场景是否为最后一个场景
iv.每个场景中都应该包含了多个障碍物和敌人
v.在每个场景中都应该定义两个集合对象,来保存已经被消灭的敌人和障碍物
五、障碍物的开发
a)所包含的属性:
i. 坐标(X、Y)
ii. 显示的图片
iii. 类型
iv. 初始的类型
b)拥有的方法:
i. 重置障碍物的方法
ii. 改变障碍物的显示图片(依据障碍物的类型)
六、Mario类的开发
a)所包含的属性
i. 坐标(X、Y)
ii. 显示的图片
iii. 使用一个String类型的变量来描述Mario当前的状态(移动、方向、跳跃等)
iv. 生命数及分数
b)拥有的方法:
i. 移动(左、右)
ii. 停止(左、右)
iii. 跳跃
将Mario对象显示到窗体中
为Mario加入移动功能
移动是一直在进行的,所以要用到线程。引入Runnable结果,实现其run方法
为Mario和窗体类都加入线程
移动功能完成,再在Mario类中加入显示图片的控制
完成Mario与障碍物的横向坐标判断
完成Mario的跳跃功能
判断Mario是否可以跳跃
加入跳跃图片的显示判断
当mario跳跃中,与障碍物碰撞时,会发生不同的情况
当Mario移动到屏幕的最右端,需要将当前场景切换为下一个场景
七、敌人类的开发
a)所包含的属性
i.坐标(X、Y)ii.初始坐标(X、Y)
iii.类型
iv.显示的图片
v.移动的方向
vi.最大移动坐标(Y,一般有两个,上和下)
b)所具有的方法
i. 重置ii. 死亡
iii. 引入runnable接口实现线程,run方法
因为敌人是可以自己移动的,所以也要引入线程
完成敌人与Mario的碰撞
对于敌人死亡的操作
八、开始游戏的功能
a)将开始游戏的场景画面读入到程序中
b)完成对游戏结束的设置
程序主体:
游戏界面展示:
操作
- 左右键移动
- 空格键跳跃
- 砖块从下向上顶一下会消失
- 问号从下向上顶一下会变化
- 碰到食人花死
- 左右碰到三角怪会死,从上向下踩它它会死
- 到达旗杆后会脱离用户控制自己运动到终点
视频教程: