Java程序设计
实
验
报
告
专 业: 嵌入式工程技术
年 级: 2012
姓 名: 黄泽康
学 号: 20125003
指导教师: 贺伟
阿坝师专物理与电子科学系
Java编程超级玛丽的游戏设计
题目简介:
本游戏是利用java语言在JCreator Pro和jdk的环境下,经过两个星期的编写与调试完成的一个超级玛丽游戏。本游戏代码长度约3000行,编写过程中历经两个版本(V1.0 版大约2000行代码、V2.0 版大约3000简单的java游戏代码行代码)。V1.0版本用时一个星期,V2.0版本用时一个星期,此游戏操作简单、界面美观、功能基本较齐全。整个游戏分功能类模块,约实现了超级玛丽游戏经典版的所有功能的 80%。
一、 实验目的:
1、熟悉类和了解如何创建类,对创建的类进行测试。让我们更加了解学习面向对象设计的目的和作用;
2、了解java面向对象编程设计与C语言、C++编程的区别;
3、学会使用各种程序命令、了解各种包的作用和功能,从而设计图形界面等;
4、掌握java面向对象中的各种使用语句;
5、学会设计和编写简单的程序或游戏。
二、实验原理、要求及主要设计思想:
原理:利用建立的各种类和包的调用来实现各自的作用,并且实现游戏编写的效果。
设计要求:
实现一个简单的超级玛丽游戏程序的基本要求:
在二维平面里画出地图(道具、敌人等)、玛丽,根据超级玛丽的动作和高度在确定地图的高度,并且还要对人的动作进行设计,;
玩家能通过控制按键A左走、D右走、L大跳、J小跳、K发子弹等来控制玛丽的动作;
在游戏中添加声音效果,如:游戏进行的声音、玛丽吃金币的声音、玛丽撞墙的声音、玛丽发子弹的声音、玛丽死亡的提示音等等;
玛丽游戏界面上有文件(退出游戏、打开地图)、游戏(暂停、开始、新游戏)、工具(自定义地图)、帮助(关于、使用说明)的菜单,并且在每个子菜单上添加特定的标志;
设计思路:
1、 首先设计游戏主界面、游戏界面上的控制菜单,
控制菜单包括:文件、游戏、工具、游戏帮助。
文件、游戏等菜单又包含了以下子菜单:
文件:单击打开地图,就可以选择已创建好的地图关卡;单击退出游戏,就直接退出整个游戏主界面。
游戏:单击新游戏,游戏就会从第一关重新开始;单击开始游戏,游戏就开始进行,玩家可以通过键盘的按键来对玛丽的动作进行控制;单击暂停游戏,游戏就暂停运行。
工具:单击工具里的自定义地图,就会弹出自定义地图框,可以在框内进行新地图的创建。
游戏帮助:单击使用说明,里面有玩此游戏的所有操作说明;单击关于,就会有制作人和版本说明。
注意:在对游戏设计的每一步,我们都需要进行功能的测试,这样才能保证编程游戏的正常进行。
2、 游戏控制界面图:
二、 类模块的设计:
此游戏是用对创建的类中的静态方法的调用来实现的,而且类与类之间是相互嵌套的;
通过对游戏的功能要求分析,将超级玛丽的功能划分成了十五个类模块:
zkml类、chuangkou类、gui类、game类、wenjian类、zi_map类、ml_map类、Photos类、Wav类、ma_li类、Enemy类、Skill类、Bullet类、move_wall类:Record类。
下面是对每个类的简单介绍:
zkml类:
在zkml类里面包含了main方法,由于程序的运行是从主方法开始,所以zkml类是游戏的主类;主要代码:
public class zkml {
public static void main(String[] args) {
chuangkou aa1=new chuangkou();
new photos(aa1);//装载图片
new game(aa1).start();//创建游戏时钟线程
new ma_li().start();//创建玛丽运动线程
new enemy().start();//创建敌人运动线程
new skill().start();//创建技能运动线程
new bullet().start();//创建子弹运动线程
new record().start();//创建动态显示计分类
new move_wall().start();//创建移动的墙类
}
}
chuangkou类和gui类:
在Chuangkou类里面创建游戏主界面;主要代码如下:
class chuangkou extends JFrame implements ActionListener{·······}//主界面
在gui类是游戏运行窗口类;主要代码:
class gui extends JPanel implements KeyListener,Runnable{
………………………………………..
public void paint(Graphics g) {·······}// 游戏框
public void keyReleased(KeyEvent e) {·······}// 释放某个键时调用此方法
public void keyPressed(KeyEvent e) {·······}//按下某个键时调用此方法
public void keyTyped(KeyEvent e) {·······};
public void run(){·······}//按键处理线程(实现多按键处理)
}
game类:
是游戏数据类(包含游戏中的所有重要数据);主要代码:
class game extends Thread{
public static chuangkou aa1;
public static int money,life,guan_qia,time; //life玛丽生命
public static boolean show,stealth;//show控制显示,stealth玛丽是否隐身
public static long score;//得分
public static boolean suspend=true,games=false;//suspend暂停游戏 games 是否游戏
public static int mk,l=0,lm=0;//控制变量
game(chuangkou aa1){
this.aa1=aa1;
}
public static void inints(){·······}//新游戏初始
public static void inint(){·······}//(菜单文件)打开地图初始(每死亡地图从新打开一次)
public static void new_inint(){·······}// 过关初始
public static void inint_ml(){·······}//玛丽死亡后初始
public static void add_score(int x,int y,int choose){ ·······}//加分
public static void gameover(){·······}//游戏结束
public void run(){·······}//线程
}
wenjian类:
是文件类型类;代码:
class wenjian extends FileFilter{
public String ext;
public wenjian(String ext){
=ext;
}
public boolean accept(File file){
if(file.isDirectory())
return true;
String f_Name();
int dex=f_name.lastIndexOf(".");
if(dex>0&&dex<f_name.length()-1){
String pd=f_name.substring(dex+1).toLowerCase();
if(pd.equals(ext))
return true;
}
return false;
}
public String getDescription(){
if(ext.equals("hzk"))
return "地图文件(*.hzkml)";
if(ext.equals("hzks"))
return "游戏进度文件(*.hzkmls)";
return "";
}
}
zi_map类:
是自定义地图类(地图的绘画);主要代码:
class zi_map extends JPanel implements KeyListener,ActionListener{·······}//自定义地图容器
public File file;
public chuangkou aa1=null;
public JFileChooser kuang=null;//文件框
public gui go=null;
public Container games=null;
public boolean ps[]=new boolean[6];//按键检测
public JButton b1,b2,b3;
public JLabel ts,ah,ah1,ah2,ah3;
public JTextField x1,y1;
public static int i,j;
public zi_map(chuangkou aa1,Container games,gui go,JFileChooser kuang){
public void paint(Graphics g) {·······}//画框
public void key(){·······}//按键处理
public void keyReleased(KeyEvent e) {·······}// 释放某个键时调用此方法
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论