四川理工学院 推箱子 JAVA_第1页
四川理工学院 推箱子 JAVA_第2页
四川理工学院 推箱子 JAVA_第3页
四川理工学院 推箱子 JAVA_第4页
四川理工学院 推箱子 JAVA_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、四四 川川 理理 工工 学学 院院课 程 设 计 书学院 计算机学院 专业 软 件 工 程 班级 2013 级 4 班 题目 推箱子游戏制作推箱子游戏制作 教师 华才健华才健 学生 黄凡,刘祥宽黄凡,刘祥宽 目目 录录1.项目开发背景项目开发背景 .11.1设计目的.11.2设计目的.11.3现状分析.11.4背景分析.12.功能需求分析功能需求分析.24.1项目功能描述.24.2软件功能模块结构图.23.系统设计系统设计.33.1类的设计.33.1.1MainFrame 类的设计.33.1.2window 类的设计.33.1.2 tanchuang 类的设计 .43.1.3LogicHelp

2、er类的设计.43.2方法实现的流程图.43.3接口设计(类的关联图).54.代码实现代码实现.54.1游戏人物创建功能代码实现.54.2图片标识符代码实现.124.3.游戏启动窗体代码实现 .134.4游戏人物创建功能代码实现.154.5图片标识符代码实现.155.功能测试功能测试.155.1游戏启动窗体功能的结果与测试.155.2游戏帮助功能的结果与测试.155.3游戏运行功能的结果与测试.175.4游戏结果检测,判定以及胜利弹窗功能的结果与测试.186.总结总结.19第 0 页1,项目开发背景,项目开发背景1.1 设计目的设计目的通过编写 java 小程序锻炼自己写程序的能力与想法,和合

3、作伙伴的分工合作,协调相互之间的代码,提升个人的团队合作意识。熟悉 java 编程的 AWT+Swing界面交互制作,java 编程的包与类的运用等等。1.2 设计目标设计目标用 java 的类和方法来实现制作推箱子游戏。通过 JLabel 添加图片的方式,将游戏用的人物,目标,障碍等图片添加进程序中。通过“碰撞算法”来判断人物的移动,操作人物的移动以及最后游戏目标的达成。运用 java 的 JFrame 窗口制作。来实现程序的交互设计。以及最后游戏的评价。1.3 现状分析现状分析随着现在手机平台,电脑平台的走进寻常百姓家,电子产品已经融入到人们生活的方方面面。通过手机,电脑,人们可以完成绝大

4、部分生活中的需求。游戏,作为软件平台的一大不可或缺的一部分,在软件领域里可谓是重工业。游戏已经成为人们日常生活中的娱乐方式之一。1.4 设计背景设计背景随着科学技术的发展,人们的生活水平越来越繁忙,在充满竞争的社会条件下,压力往往带给人们很多烦恼,所以合理的解压方式称为现代人的共同心愿. 为了给大家提供一个合理的解压平台, 我们在本次课程设计中为大家开发了一款适合休闲娱乐的小游戏, 本次课程设计是配合 JAVA 程序设计课程,深入学习掌握 JAVA 语言,熟练 运用 Java 工具对系统的编写.通过课程设计各个项目的综合训练,培养学生实 际分析问题,编程和动手能力,提高学生的综合素质第 1 页

5、2. 功能需求功能需求分析分析2.1 项目功能描述项目功能描述窗口制作:将游戏用的图片添加到窗体中。人物移动规则:判断人物移动的条件,以及移动箱子的条件。移动人物时,对人物的图片坐标进行修改。加入键盘监听事件。游戏胜利规则:判断游戏是否胜利,并且产生一个信息菜单窗口,供用户选择返回游戏首页还是直接进入下一关。游戏首页:制作一个友好型界面,来启动游戏。提供新游戏,继续游戏,信息帮助,离开游戏等功能。2.2 项目功能模块图项目功能模块图游戏启动游戏主界面窗口设计人物障碍可视化实现碰撞模型设计开始游戏游戏帮助关闭游戏图片布局监听事件移动规则人物移动箱子移动目标实现第 2 页3. 系统设计系统设计3.

6、1 类的设计类的设计3.11MainFrame 的设计的设计成员方法方法功能Private void dateUI()人物箱子目标布局实现Private void dateInit()障碍的布局(采用二维数组实现)Private void backgroundUI()游戏背景的设置Private void mainFrameBaseUI()游戏运行界面的框架Pribvate static void move(.)图片移动控制Public void keyPressed(keyEvent e)人物移动的各种判定以及键盘监听事件的实现方法Private void victory()游戏胜利的判定算

7、法以及弹窗按钮实现3.12window 类的设计类的设计成员方法方法功能Private void ck()游戏首页窗口设计加入按钮事件,包括游戏开始的界面切换链接,游戏帮助的弹窗,离开游戏按钮。Private void background()游戏首页背景的添加大小设置Public window()窗体的整合第 3 页3.13tanchuang 类的设计类的设计成员方法方法功能Public tanchuang extends JFrame设置关于游戏的信息小弹窗3.14LogicHelper 类类成员数据功能标示FLOOR空地为 0WALL障碍为 1BOX箱子为 2TARGET目标点为 4BO

8、X_AND_TARGET箱子进入目标点改变为 63.2 方法实现的流程图方法实现的流程图开始游戏移动?移动障碍?不移动推箱子移动目标达成信息选项弹窗第 4 页3.3 接口设计(类的关联图)接口设计(类的关联图)4. 代码实现代码实现4.1 游戏人物创建代码游戏人物创建代码package UI;import UI.window;import java.awt.Container;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseAdapter;import jav

9、a.awt.event.MouseEvent;import javax.swing.ImageIcon;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;Window 类Tanchuang 类MainFrame 类LogicHelper 类App.Java第 5 页import app.LogicHelper;public class MainFrame extends JFrame implements KeyListenerprivate Container panel;privat

10、e JLabel player;/人物所处行private int playerX;/人物所处列private int playerY;/任务完成计数器int count = 0;/任务完成总数int total = 3;public MainFrame()/主窗体 UI 初始化this.mainFrameBaseUI();/UI 数据初始化this.dateInit();/UI 初始化this.dateUI();/背景地板 UI 初始化this.backgroundUI();/窗体添加键盘监听this.addKeyListener(this);this.setVisible(true);pr

11、ivate JLabel uis = new JLabel1216;private void dateUI() /墙初始化for (int i = 0; i dates.length; i+) for (int j = 0; j = 37 & keyCode = 40)/人物图片切换/上 38/下 40/左 37/右 39player.setIcon(new ImageIcon(x+y+.png);/碰地板检测,碰目标检测if(datesplayerX-xplayerY-y = LogicHelper.FLOOR | datesplayerX-xplayerY-y = LogicHel

12、per.TARGET)move(player,x,y);playerX = playerX-x;第 9 页playerY = playerY-y;return;/碰箱子检测if(datesplayerX-xplayerY-y = LogicHelper.BOX | datesplayerX-xplayerY-y = LogicHelper.BOX_AND_TARGET)/同方向是否为空地板或目标位置/获取前方移动障碍物码int code1 = datesplayerX-xplayerY-y;int code2 = datesplayerX-x*2playerY-y*2;if(code2 = L

13、ogicHelper.FLOOR | code2 = LogicHelper.TARGET)/箱子移动JLabel box = uisplayerX-xplayerY-y;move(box,x,y);/uis 模型更新uisplayerX-x*2playerY-y*2 = uisplayerX-xplayerY-y;uisplayerX-xplayerY-y = null;/dates 模型更新/从箱子到空地if(code1 = LogicHelper.BOX & code2 = LogicHelper.FLOOR )datesplayerX-x*2playerY-y*2 = Logi

14、cHelper.BOX;datesplayerX-xplayerY-y = LogicHelper.FLOOR;/从箱子到目标if(code1 = LogicHelper.BOX & code2 = LogicHelper.TARGET)datesplayerX-x*2playerY-y*2 = LogicHelper.BOX_AND_TARGET;datesplayerX-xplayerY-y = LogicHelper.FLOOR;/改变箱子模型box.setIcon(new ImageIcon(40.png);count+;/从箱子目标到空地if(code1 = LogicHel

15、per.BOX_AND_TARGET & code2 = LogicHelper.FLOOR )datesplayerX-x*2playerY-y*2 = LogicHelper.BOX;datesplayerX-xplayerY-y = LogicHelper.TARGET;第 10 页/改变箱子模型box.setIcon(new ImageIcon(4.png);count-;/从箱子目标到目标if(code1 = LogicHelper.BOX_AND_TARGET & code2 = LogicHelper.TARGET)datesplayerX-x*2playerY-

16、y*2 = LogicHelper.BOX_AND_TARGET;datesplayerX-xplayerY-y = LogicHelper.TARGET;/改变箱子模型box.setIcon(new ImageIcon(40.png);/人物模型移动move(player,x,y);/人物坐标更新playerX = playerX-x;playerY = playerY-y;victory();return;/胜利判定private void victory() if(count = total)/移除窗体键盘事件,避免用户多余操作this.removeKeyListener(this);J

17、Dialog victory = new JDialog(this,老婆今天晚上可以吃羊了!,true);victory.setSize(400, 300);victory.setLocationRelativeTo(null);victory.setLocation(300,250);victory.setLayout(null);JLabel info = new JLabel(new ImageIcon(gg.jpg);info.setBounds(2, 2, 380, 180);victory.add(info);JLabel MAINFRAME = new JLabel(new Im

18、ageIcon(gg2.jpg);MAINFRAME.setBounds(2, 182, 200, 88);第 11 页MAINFRAME.addMouseListener(new MouseAdapter()public void mousePressed(MouseEvent e) new window();MainFrame.this.setVisible(false););victory.add(MAINFRAME);JLabel NEXTGAME = new JLabel(new ImageIcon(gg3.jpg);NEXTGAME.setBounds(200, 182, 200,

19、 88);NEXTGAME.addMouseListener(new MouseAdapter()public void mousePressed(MouseEvent e) if(LogicHelper.N3)new MainFrame(); MainFrame.this.setVisible(false); );victory.add(NEXTGAME);victory.setVisible(true); public void keyReleased(KeyEvent e) int keyCode = e.getKeyCode();if(keyCode=27)LogicHelper.N-

20、;new window();MainFrame.this.setVisible(false);if(keyCode=116)LogicHelper.N-;MainFrame.this.setVisible(false);new MainFrame();public void keyTyped(KeyEvent e) 4.2 地图显示图片标识类地图显示图片标识类第 12 页package app;public class LogicHelper public static final int FLOOR = 0;public static final int WALL = 1;public st

21、atic final int BOX = 2;public static final int TARGET = 4;public static final int BOX_AND_TARGET = 6; public static int N=0;4.3 游戏启动窗体游戏启动窗体package UI;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;import app.LogicHelper;public class win

22、dow extends JFrame implements ActionListener /* * */private static final long serialVersionUID = -7312789319638249447L;private JButton button1,button2, button3,button4; Container container;public window() ck(); background(); private void ck()container=this.getContentPane(); this.setLayout(null); thi

23、s.setLocation(250,50); this.setTitle(推箱子 V1.0 BY2013 级软件四班黄凡,刘祥宽);button1=new JButton(新游戏);button1.setBounds(350, 100, 90,30 );button4=new JButton(继续游戏);button4.setBounds(350, 200, 90,30 );button2=new JButton(获取帮助);第 13 页button2.setBounds(350, 300, 90,30 );button3=new JButton(退出游戏);button3.setBounds

24、(350, 400, 90,30 );container.add(button1);container.add(button2);container.add(button3);container.add(button4);setResizable(false);/窗口大小锁定 this.setVisible(true); this.setSize(800,600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); button1.addActionListener(new ActionListener()public void acti

25、onPerformed(ActionEvent e) LogicHelper.N=0; new MainFrame();window.this.setVisible(false); ); button2.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) new tanchuang();); button3.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) button1.s

26、etVisible(false); System.exit(0);); button4.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) if(LogicHelper.N=3)LogicHelper.N=0; new MainFrame();window.this.setVisible(false); );private void background()Icon i=new ImageIcon(bg.jpg);JLabel ct_bg=new JLabel(i);ct_bg.set

27、Bounds(8,12,800,600);第 14 页this.add(ct_bg);Overridepublic void actionPerformed(ActionEvent e) / TODO 自动生成的方法存根4.4 帮助弹窗源代码帮助弹窗源代码package UI;import java.awt.Color;import java.awt.FlowLayout;import java.awt.TextArea;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextArea;public class tanchuang extends JFrame/private JLabel help;public tanchuang() JTextArea center;this.setLayout(new FlowLayout();this.setTitle(游戏帮助);this.setVisible(true); this.setSize(400,100); this.setLocation(300,250); setResizable(false);/窗口大小锁定 center = new JTextArea(留言内容:通过键盘上下左右移动实现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论