ImageVerifierCode 换一换
格式:DOCX , 页数:80 ,大小:1.36MB ,
资源ID:7312158      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7312158.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(超级玛丽Java课程设计文档格式.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

超级玛丽Java课程设计文档格式.docx

1、清华大学出版社,2009四、要求的设计(调查/论文)成果1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析1天总体设计1天详细设计1.5天编制源程序实现3.5天测试与修改1天撰写课设报告2天六、主要参考资料1 张广彬. Java课程设计案例精编(第二版).北京:清华大学出版社, 2011. 2 耿祥义. Java课程设计(第二版).北京:清华大学出版社, 2008.3 耿祥义JAVA大学实用教程北京:4 邹林达陈国君 Java2程序设计基础北京:清华大学出版社,20105 邹林达Java2程序设计基础实验指导北京:清华大学,2010指导教师(签名): 20 年 月 日1需

2、求与总体设计1.1需求分析提供一个友好的用户交互界面,简单明了容易操作。并且游戏有一定的难度和娱乐性。开发一个Mario类。一个场景类,以及敌人类,障碍物类。让超级玛丽能够在场景中完成各种动作。并且有场景的切换等等功能。游戏中设计了一些很有意思的陷阱,玩家一步小心掉入陷阱,超级玛丽就会死亡。这样会给人意想不到的惊奇,达到娱乐大众,增加游戏难度的效果。游戏的设计匠心独具,并且都经过了各种测试,除了为玩家增加一些意想不到的游戏陷阱以外,还必须保证玩家能够通关。1.2程序功能图如图1所示:图11.3程序类图系统的整体类图的框架如图2所示。首先是窗体类。他需要调用到Mario和BackGround类中

3、的方法。以便动态的显示Mario类和BackGround。而BackGround里面又包含了Enemy和Obstruction。Enemy,Obstruction和Mario类又调用静态类StaticValue的方法,用以显示真实的图片。而StaticValue则是一个静态类,将存储在硬盘的图片资源加载进入内存以便其他模块调用。图22详细设计2.1 MyFrame实现2.1.1窗体对象的序列图窗体对象继承了JFrame类并且实现了Runnable接口。作为窗体对象,它首先显示窗体,绘制背景。然后启动线程。在run方法里面动态得绘制窗体中需要显示的Mario的图片,障碍物的图片,敌人的图片。该窗

4、体的run方法是一个死循环,每次执行一个 循环调用sleep方法睡眠50毫秒。序列图如图3所示。图32.1.2 Myframe详细类图private Mario mario;/Mario对象private boolean isStart = false;/标识游戏是否已经开始this.paintAllEnemys(g2);/绘制所有的敌人this.paintAllObstruction(g2);/绘制所有障碍物2.2 Mario实现2.2.1 Mario对象的序列图因为需要有一个专门的线程来实时监测Mario的移动状况,和障碍物和敌人的碰撞情况。所以让Mario类继承了Runnable接口。M

5、ario先启动线程。该线程的run方法也是一个死循环。首先根据Mario的状态changeMarioImage方法修改Mario的显示图片。再根据Mario的determinexy方法决定Mario的移动。然后通过deterMarioWithObstruction方法检测Mario和障碍物之间的碰撞,在根据marioTouchEnemys方法检测Mario和敌人之间的碰撞。然后调用sleep()方法让线程休息5毫秒。如此结束一个循环。序列图如图4所示。图42.2.2 Mario类图类图中:private int x;/Mario的x坐标private int y;/Mario的y坐标priva

6、te int life;/Mario的生命BackGround bg = null;/Mario所在的背景private int uptime;/Mario的上升时间String status;/Mario的移动状态int score;/Mario的分数Thread t;/Mario的线程int xmove;/Mario的x移动距离int ymove;/Mario的y移动距离private boolean isClear = false;/标识用户是否通关。isClear为true时代表用户通关了2.3 Enemy类的实现/敌人的x坐标/敌人的y坐标private int startX;/敌人

7、的初始x坐标private int startY;/敌人的初始y坐标private boolean startIsLeftOrUp;/敌人初始的移动方向private int startImageType;/初始的显示图片private int type;/敌人的类型1代表蘑菇,2代表食人花,3代表乌龟private BufferedImage bufferedImage;private BackGround bg;/障碍物所在的背景private int imageType;/移动的极限范围详细类图如下:2.4 Obstruction类的实现/障碍物的x坐标/障碍物的y坐标private B

8、ufferedImage showImage = null;/障碍物的显示图片/障碍物的类型private int startType;/障碍物的初始类型 /标识该障碍物在哪一个场景中2.5 BackGround类实现private int sort;/背景的序列号private boolean flag;/标识是否是最后一张图片,flag为true时代表到了最后一张图片 private boolean isOver = false;/标识游戏是否已经结束private boolean isDown = false;/标志是否降旗结束3编码实现源代码import java.awt.image.

9、BufferedImage;import java.util.ArrayList;import java.util.List;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.Iterator;import javax.swing.JFrame;import javax.swing.JOptionPane;import java.io.File;import javax.imageio

10、.ImageIO;public class MyFrame extends JFrame implements KeyListener,Runnable public static void main(String args) new MyFrame(); private List allBg = new ArrayList(); /当前背景 private BackGround nowBg = null; private Mario mario; private boolean isStart = false; public void setNowBg(BackGround nowBg) t

11、his.nowBg = nowBg; private Thread t; /* */ public MyFrame() this.setSize(900,600); this.setTitle(马里奥游戏); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; this.setLocati

12、on(width - 900) / 2,(height - 600) / 2); this.addKeyListener(this); StaticValue.init(); this.setVisible(true); /绘制出所有的背景 for(int i = 1; i = 4; i+) this.allBg.add(new BackGround(i, i = 4 ? true : false); this.nowBg = this.allBg.get(0); this.mario = new Mario(0, 480); this.mario.setBg(nowBg); this.set

13、Resizable(false); t = new Thread(this); t.start(); Override public void paint(Graphics g) BufferedImage image = new BufferedImage(900, 600, BufferedImage.TYPE_4BYTE_ABGR); if(isStart) Graphics g2 = image.getGraphics(); g2.drawImage(this.nowBg.getBgImage(), 0, 0, this);/绘制背景 g2.drawString(生命: + this.

14、mario.getLife(), 800, 60);/显示生命数分数: + this.mario.getScore(), 60, 60); this.paintAllEnemys(g2); this.paintAllObstruction(g2); else g2.drawImage(StaticValue.startImage, 0, 0, this);/绘制游戏开始的图片 g.drawImage(image, 0, 0, this); public void keyPressed(KeyEvent e)/ int k = e.getKeyCode(); /获得键盘的ASCII码 Syste

15、m.out.println(k); if(this.isStart) if(e.getKeyCode() = 39) this.mario.rightMove(); if(e.getKeyCode() = 37) this.mario.leftMove(); if(e.getKeyCode() = 32) this.mario.jump(); /按下空格键,Mario的生命加10 if(70 = e.getKeyCode() this.mario.setLife(this.mario.getLife() + 10); this.isStart = true; this.nowBg.enemys

16、StartMove(); public void keyReleased(KeyEvent e) if(e.getKeyCode() = 39) this.mario.rightStop(); if(e.getKeyCode() = 37) this.mario.leftStop(); public void keyTyped(KeyEvent e) / TODO Auto-generated method stub public void run() while(true) this.repaint(); if(840 = this.mario.getX() this.intoNewBack

17、Ground();/进入下一张图片 if(this.mario.isClear() JOptionPane.showMessageDialog(this, 恭喜您通关了,敬请期待新的关卡 System.exit(0); if(this.mario.isDead() this.gameOver();/游戏结束 this.sleep(); /进入下一张图片 private void intoNewBackGround() this.nowBg = this.allBg.get(this.nowBg.getSort(); this.mario.setBg(this.nowBg); this.mari

18、o.setX(0); this.mario.setY(480); this.mario.setUptime(0); this.nowBg.enemysStartMove(); /绘制所有的敌人 private void paintAllEnemys(Graphics g2) Iterator iterEnemy = this.nowBg.getAllEnemy().iterator(); while(iterEnemy.hasNext() Enemy e = iterEnemy.next(); g2.drawImage(e.getBufferedImage(), e.getX(), e.get

19、Y(), this); /绘制所有障碍物 private void paintAllObstruction(Graphics g2)Obstruction iter = this.nowBg.getAllObstruction().iterator(); while(iter.hasNext() Obstruction ob = iter.next(); g2.drawImage(ob.getShowImage(), ob.getX(), ob.getY(), this); g2.drawImage(mario.getShowImage(), mario.getX(), mario.getY(

20、), this); private void sleep() try Thread.sleep(20); catch (InterruptedException e) e.printStackTrace(); /游戏结束 private void gameOver() JOptionPane.showMessageDialog(this, 马里奥死亡 this.mario.setDead(false); System.exit(0);class BackGround private BufferedImage bgImage = null; private int sort; private

21、boolean flag;/标识是否是最后一张图片,flag为true时代表到了最后一张图片 allEnemy = new ArrayList/所有敌人的集合 /所有障碍物的集合 allObstruction = new ArrayList /所有被移除的敌人的集合 removeEnemy = new ArrayList /所有被移除的障碍物的集合 removeObstruction = new ArrayList private boolean isOver = false; private boolean isDown = false; public boolean isDown() re

22、turn isDown; public void setDown(boolean isDown) this.isDown = isDown; public boolean isOver() return isOver; public void setOver(boolean isOver) this.isOver = isOver; public boolean isFlag() return flag; public void setFlag(boolean flag) this.flag = flag; public int getSort() return sort; public vo

23、id setSort(int sort) this.sort = sort; public BufferedImage getBgImage() return bgImage; public List getAllObstruction() return allObstruction; getRemoveObstruction() return removeObstruction; getAllEnemy() return allEnemy; getRemoveEnemy() return removeEnemy; * * param sort 背景的序列号 * param flag 标识是否是最后一张背景 public BackGround(int sort, boolean flag) if(flag) bgImage = StaticValue.endImage; bgImage = StaticValue.bgImage; switch(sort) case 1: this.creat1Map(); break; case 2: this.creat2Map(); case 3: this.creat3Map(); case 4: this.creat4Map(); public void reset() thi

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2