Java小程序之山寨版超级玛丽
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java小程序之山寨版超级玛丽
一、游戏基本功能
1、能够向左向右行走(键盘监听)
2、能够跳跃
3、能够发射子弹
4、能够检测和障碍物之间的碰撞
5、背景图片的移动
二、游戏运行界面
三、游戏大致实现思路:
1.窗体
2.自己角色的添加
3.背景图片的添加
4.背景图片的移动
5.人物的移动和跳跃
6.砖头、水管等等障碍物的添加
7.任务和障碍物的碰撞
难点分析:
1.人物的多键控制
1)给人物设定方向boolean变量:向左、向右、向上、向下
2)通过键盘监听来修改方向的变量值
按下某个键的时候,我们把相应方向改为true,释放的时候改false 2.地图配置
自定义文件读取方式实现:文件流的使用和字符串String类的方法调用3.碰撞检测
封装一个Rectangle类的对象
4.子弹添加
1)先定义一个容器,这个用于封装所有的子弹对象
2)按下某个键的时候,创建一个子弹对象(以角色的坐标为基准初始化)
3)把子弹对象添加到容器当中
4)在paint方法中,遍历容器,取出子弹对象并进行绘制
5)检测子弹如果超出了窗体边界,则需要把当前子弹从容器当中移除掉
四、程序源代码:
代码结构图:分了三个包、敌人类包、游戏界面类包、游戏地图配置包
com.huaxin.mario包:
[java] view plain copy print?在CODE上查看代码片派生到我的代码片package com.huaxin.mario;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import com.huaxin.enery.Enery;
import com.huaxin.enery.Pipe;
import Util.Map;
public class GameFrame extends JFrame{
public Mario mario;
public Enery pipe,cion,brick;
//背景图片
public BackgroundImage bg ;
//容器装敌人
public ArrayList
//子弹容器
public ArrayList
//子弹的速度
public int bspeed=0;
//画地图,制定规则,是1画砖头,是2画金币,是3画水管public int [][] map =null;
//构造函数里面初始化背景图片和马里奥对象
public GameFrame() throws Exception {
mario = new Mario(this);
mario.start();
Map mp= new Map();
bg = new BackgroundImage();
//窗体重绘线程
new Thread(){
public void run(){
while(true){
//重绘窗体
repaint();
//检查子弹是否出界
checkBoom();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
map=mp.readMap();
//读取地图,并配置地图
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[0].length; j++) {
//读取到的是1,画砖头
if(map[i][j]==1){
brick = new Pipe(j*30,i*30,30,30,new ImageIcon("image/brick.png").getImage());
eneryList.add(brick);
}
//读到2画金币
if(map[i][j]==2){
cion = new Pipe(j*30,i*30,30,30,new ImageIcon("image/coin_brick.png").getImage());
eneryList.add(cion);
}
//读到3画水管
if(map[i][j]==3){
pipe = new Pipe(j*30,i*30,60,120,new ImageIcon("image/pipe.png").getImage());
eneryList.add(pipe);
}
}
}
//设置背景音乐
com.huaxin.music.Util.startMusic("music/bg1.wav");
}
public void initFrame(){
//设置窗体相关属性
this.setSize(800,450);
this.setTitle("山寨版超级玛丽");
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(3);
this.setVisible(true);
//该窗体添加键盘监听
KeyListener kl = new KeyListener(this);
this.addKeyListener(kl);
}