【预期效果】
java实现超级马里亚游戏SuperMario-B-.zip资源-CSDN文库
一、实现思路
【操作方式】
启动方式
鼠标点击【start】选择关卡开始。
操作方法
左右← →控制人物移动,↓下蹲,↑跳。
游戏目标
通过操作帮助马里亚通关。
当实现一个超级马里奥游戏时,可以按照以下步骤进行:
- 创建游戏场景:设计并创建2D游戏场景,包括地图、背景、障碍物等元素。
- 设计角色和敌人:设计超级马里奥角色的形象和动作,并创建相关动画;设计敌人的外观和行为。
- 实现角色控制:编写代码实现角色的移动、跳跃、攻击等操作,并设置与键盘或手柄的输入交互。
- 实现碰撞检测:编写代码实现角色与障碍物、敌人的碰撞检测,以及相关的反应和处理逻辑。
- 添加道具和动画:创建金币、蘑菇、星星等道具,以及相关的动画效果,并实现角色与道具的交互逻辑。
- 设定关卡目标:设计关卡目标,如到达终点、收集特定数量的道具等,编写代码实现相关逻辑。
- 添加音效和背景音乐:选择合适的音效和背景音乐,并添加到游戏中,使游戏更加生动和有趣。
- 测试和优化:测试游戏的各项功能和性能,优化游戏体验,包括角色控制的流畅度、敌人难度的设置等。
以上是一个大致的实现步骤,当然在实际开发过程中会涉及到更多的细节和技术实现。
二、分析实现
1、游戏主界面
定义了一个 background背景类(地图类),包括以下属性要素:
sort:记录当前是第几个场景
flag:是否是最后一个场景
obstacleList:存放我们的所有障碍物
enemyList:存放我们的所有敌人
gan:用于显示旗杆
tower:用于显示城堡
isReach:判断马里奥是否到达旗杆位置
isBase:判断旗子是否落地
【详细代码】
public class BackGround {
//当前场景要显示的图像
private BufferedImage bgImage = null;
//记录当前是第几个场景
private int sort;
//判断是否是最后一个场景
private boolean flag;
//用于存放我们的所有障碍物
private List<Obstacle> obstacleList = new ArrayList<>();
//用于存放我们的所有敌人
private List<Enemy> enemyList = new ArrayList<>();
//用于显示旗杆
private BufferedImage gan = null;
//用于显示城堡
private BufferedImage tower = null;
//判断马里奥是否到达旗杆位置
private boolean isReach = false;
//判断旗子是否落地
private boolean isBase = false;
public BackGround() {
}
}
【游戏背景图】
【马里奥图片】
【怪物】
2、马里奥类
该类维护马里奥的相关属性,例如动作、运行速度、当前状态等,同时控制其移动进程。以向右移动为例子,判断马里奥是否碰到旗子,还有当前的运动状态。这里需要注意的是,同样是向右移动,如果是在下落途中,马里奥的动作将需要切换。
【动作】
//马里奥向右移动 public void rightMove() { xSpeed = 5; //判断马里奥是否碰到旗子 if (backGround.isReach()) { xSpeed = 0; } if (status.indexOf("jump") != -1) { status = "jump--right"; }else { status = "move--right"; } }
【详细代码】
public class Mario implements Runnable{
//用于表示横纵坐标
private int x;
private int y;
//用于表示当前的状态
private String status;
//用于显示当前状态对应的图像
private BufferedImage show = null;
//定义一个BackGround对象,用来获取障碍物的信息
private BackGround backGround = new BackGround();
//用来实现马里奥的动作
private Thread thread = null;
//马里奥的移动速度
private int xSpeed;
//马里奥的跳跃速度
private int ySpeed;
//定义一个索引
private int index;
//表示马里奥上升的时间
private int upTime = 0;
//用于判断马里奥是否走到了城堡的门口
private boolean isOK;
//用于判断马里奥是否死亡
private boolean isDeath = false;
//表示分数
private int score = 0;
public Mario() {
}
public Mario (int x,int y) {
this.x = x;
this.y = y;
show = StaticValue.stand_R;
this.status = "stand--right";
thread = new Thread(this);
thread.start();
}
}
3、游戏障碍物
//用于表示坐标 private int x; private int y; //用于记录障碍物类型 private int type; //用于显示图像 private BufferedImage show = null; //定义当前的场景对象 private BackGround bg = null; //定义一个线程对象 private Thread thread = new Thread(this);
4、怪物类
需要写一个监听器,控制怪物左右自由移动,并且遵从一定的顺序速度。
//存储当前坐标 private int x; private int y; //存储敌人类型 private int type; //判断敌人运动的方向 private boolean face_to = true; //用于显示敌人的当前图像 private BufferedImage show; //定义一个背景对象 private BackGround bg; //食人花运动的极限范围 private int max_up = 0; private int max_down = 0; //定义线程对象 private Thread thread = new Thread(this); //定义当前的图片的状态 private int image_type = 0;
5、经典背景音乐
利用Player类读取输入流,播放音乐。
三、效果展示
1、第一关
2、第二关
3、第三关
4、旗帜滑降
5、通关