《Java小程序之山寨版超级玛丽》由会员分享,可在线阅读,更多相关《Java小程序之山寨版超级玛丽(17页珍藏版)》请在金锄头文库上搜索。
1、Java小程序之山寨版超级玛丽一、游戏基本功能1、能够向左向右行走(键盘监听)2、能够跳跃3、能够发射子弹4、能够检测和障碍物之间的碰撞5、背景图片的移动二、游戏运行界面三、游戏大致实现思路:1.窗体2.自己角色的添加3.背景图片的添加4.背景图片的移动5.人物的移动和跳跃6.砖头、水管等等障碍物的添加7.任务和障碍物的碰撞难点分析:1.人物的多键控制1)给人物设定方向boolean 变量:向左、向右、向上、向下2)通过键盘监听来修改方向的变量值按下某个键的时候,我们把相应方向改为true,释放的时候改false 2.地图配置自定义文件读取方式实现:文件流的使用和字符串String 类的方法调
2、用3.碰撞检测封装一个 Rectangle 类的对象4.子弹添加1)先定义一个容器,这个用于封装所有的子弹对象2)按下某个键的时候,创建一个子弹对象(以角色的坐标为基准初始化)3)把子弹对象添加到容器当中4)在 paint 方法中,遍历容器,取出子弹对象并进行绘制5)检测子弹如果超出了窗体边界,则需要把当前子弹从容器当中移除掉四、程序源代码:代码结构图:分了三个包、敌人类包、游戏界面类包、游戏地图配置包com.huaxin.mario 包:java view plain copy print?在 CODE 上查看代码片派生到我的代码片package com.huaxin.mario; impo
3、rt 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 mari
4、o; public Enery pipe,cion,brick; /背景图片public BackgroundImage bg ; /容器装敌人public ArrayList eneryList = new ArrayList(); /子弹容器public ArrayList boomList = new ArrayList(); /子弹的速度public int bspeed=0; /画地图,制定规则,是1 画砖头,是2 画金币,是3 画水管public int map =null; /构造函数里面初始化背景图片和马里奥对象public GameFrame() throws Excepti
5、on 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
6、i = 0; i 800) boomList.remove(i); java view plain copy print?在 CODE 上查看代码片派生到我的代码片package com.huaxin.mario; import java.awt.Image; import java.awt.Rectangle; import javax.swing.ImageIcon; import com.huaxin.enery.Enery; /自己的角色类public class Mario extends Thread public GameFrame gf; public boolean jump
7、Flag=true; /马里奥的坐标public int x=0,y=358; /马里奥的速度public int xspeed=5,yspeed=1; /马里奥的宽高public int width=30,height=32; /马里奥的图片public Image img = new ImageIcon(“image/mari1.png“).getImage(); public boolean left=false,right=false,down=false,up=false; public String Dir_Up=“Up“,Dir_Left=“Left“,Dir_Right=“Ri
8、ght“,Dir_Down=“Down“; public Mario (GameFrame gf) this.gf=gf; this.Gravity(); public void run() while(true) /向左走if(left) /碰撞到了if(hit(Dir_Left) this.xspeed=0; if(this.x=0) this.x-=this.xspeed; this.img=new ImageIcon(“image/mari_left.gif“).getImage(); this.xspeed=5; /向右走if(right) if(hit(Dir_Right) thi
9、s.xspeed=0; /任人物向右移动if(this.x=400) /背景向左移动gf.bg.x-=this.xspeed; /障碍物项左移动for (int i = 0; i =358) isGravity=false; else isGravity=true; y+=yspeed; try sleep(10); catch (InterruptedException e) e.printStackTrace(); .start(); java view plain copy print?在 CODE 上查看代码片派生到我的代码片package com.huaxin.mario; impo
10、rt java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.ImageIcon; /键盘按下监听类public class KeyListener extends KeyAdapter public GameFrame gf; public boolean jumpFlag=true; public KeyListener(GameFrame gf) this.gf=gf; /键盘监听public void keyPressed(KeyEvent e) int code = e.getKeyC
11、ode(); switch(code) /向右走case 39: gf.mario.right=true; break; /向左走case 37: gf.mario.left=true; break; case 66: addBoom(); break; /向上跳case 74: gf.mario.up=true; break; /添加子弹public void addBoom() Boom b = new Boom(gf.mario.x,gf.mario.y+5,10); if(gf.mario.left) b.speed=-2; if(gf.mario.right) b.speed=2;
12、gf.boomList.add(b); /键盘释放监听public void keyReleased(KeyEvent e) int code=e.getKeyCode(); if(code=39) gf.mario.right=false; gf.mario.img=new ImageIcon(“image/mari1.png“).getImage(); if(code=37) gf.mario.left=false; gf.mario.img=new ImageIcon(“image/mari_left1.png“).getImage(); if(code=74) gf.mario.up=
13、false; java view plain copy print?在 CODE 上查看代码片派生到我的代码片package com.huaxin.mario; import java.awt.Image; import javax.swing.ImageIcon; public class BackgroundImage public int x=0,y=0; public int ox=0,oy=0; public Image img=new ImageIcon(“image/startBack.jpg“).getImage(); java view plain copy print?在
14、CODE 上查看代码片派生到我的代码片package com.huaxin.mario; /子弹类public class Boom /子弹的坐标,大小,速度int x,y; int width; int speed=1; public Boom(int x, int y, int width) super(); this.x = x; this.y = y; this.width = width; 主函数类,作为整个程序的入口java view plain copy print?在 CODE 上查看代码片派生到我的代码片package com.huaxin.mario; public cla
15、ss Test /主函数,程序入口public static void main(String args) throws Exception GameFrame gf = new GameFrame(); gf.initFrame(); com.huaxin.enery 包:java view plain copy print?在 CODE 上查看代码片派生到我的代码片package com.huaxin.enery; import java.awt.Image; /障碍物的抽象父类public abstract class Enery public int x,y; public int w
16、idth,height; public Image img; public Enery(int x, int y, int width, int height,Image img) this.x = x; this.y = y; this.width = width; this.height = height; this.img=img; java view plain copy print?在 CODE 上查看代码片派生到我的代码片package com.huaxin.enery; import java.awt.Image; /金币类public class Coin extends Enery