龟兔赛跑游戏设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2014年春季学期
工程开发综合训练课程设计说明书
题目:龟兔赛跑游戏设计与实现
专业班级:计算机科学与技术11级4班
姓名:姚亮
学号: 11240404
指导教师:刘树群
成绩:
目录
摘要 (1)
1.问题描述 (2)
2.系统设计 (3)
3.系统实现 (5)
4.系统测试 (9)
5.总结 (14)
参考文献 (15)
摘要
本次课设我的题目是龟兔赛跑游戏设计与实现。
而这个游戏本身实际上主要是对我们JAVA学习中的线程部分的运用,尤其是多线程的定义、运行,Java小程序的编写,图形界面的实现,Java小程序中图片的插入等。
同时还要保证此游戏有一个较真实的操作界面和人性化操作设计,所以我在设计过程中重点强调了对线程部分内容的复习和实践。
在设计龟兔赛跑这个游戏中我也遇到了许多的困难,但通过查资料、阅读大量的文献、向老师请教以至于最终问题得以解决。
正如龟兔赛跑这个故事一样,虽然我在技术上不是很优秀,但是我不会就此放弃,我会继续努力的学习知识来完善自身的技术。
关键词:Java小程序;多线程;图形界面;画图;背景音乐
1.问题描述
对于龟兔赛跑系统来说,开发的总体任务是实现游戏的可操作性、美观性、及时性。
开发过程遵循软件工程规范,可采用结构化或面向对象分析设计方法。
最主要是对学生多线程编程、游戏方案设计、游戏背景及动漫制作等能力进行培养锻炼和对所学的知识进行加深理解,同时还要求保证游戏有比较一个真实的操作界面和人性化操作设计。
另外,通过该题目的设计过程,可以初步应用软件系统的开发原理和开发方法,全面培养软件开发过程中的分析、设计、编码、测试及文档规范书写的能力,加深所学的知识,得到软件工程的训练,提高解决实际问题的能力。
2.系统设计
本系统采用多线程机制来完成,主要有界面模块,乌龟模块和兔子模块
1.功能:实现基本的开始、退出游戏功能、选择游戏模式等
基本运行步骤:
图2-1
在实现过程中会遇到的问题及解决方案:
1.背景面板上加载图片时需要重写paint方法
2.布局根据需要设置(BorderLayout或FlowLayout FowLayout)
3.添加背景面板监听重置各面板位置才能实现窗口放大时的相对位置不变
2各模块.功能:实现乌龟,兔子的多线程运行
具体的步骤:
图2-2
第二步会遇到的问题及解决方案:
1.建立兔子线程,继承接口Thread并正确的实现move()方法。
2.建立乌龟线程,继承接口Thread并实现其move()方法,要与兔子多线程运行;
3.为了实现可选择多只龟兔进行赛跑,要实现多个兔子,乌龟线程,并能并发运行。
4.游戏中提供了模式选择的功能,通过建立ItemSelect类来建立不同的游戏模式。
5.游戏中提供了每个模式重新开始的功能,实现模块重新开始move()方法。
3.系统实现
龟兔赛跑程序主要由以下几个模块构成:
模块一:初始图形界面模块
private Button quit = new Button("退出");
private Button stop = new Button("暂停");
private Button restart1 = new Button("重新开始1");
private Button restart2 = new Button("重新开始2");
private Button model1_start = new Button("模式1开始");
private Button model2_start = new Button("模式2开始");
JLabel l=new JLabel();该模块主要是用来提供进入该程序游戏的初始图形用户界面,显示该程序的基本信息,提示用户进行操作。
模块二:兔子线程模块
private double xdir = 10;
private boolean running = false;
private SevenPointTwo spt = null;
protected double x, y;
private int flag1=0;
Image tu = Toolkit.getDefaultToolkit().getImage("src\\tu.png");
public Tu(SevenPointTwo _spt, double _x, double _y) {
spt = _spt;
x = _x;
y = _y;
确定兔子的随机速度,并时刻的显示兔子的位置。
并不只是一只兔子,而是所有的兔子。
模块三:乌龟线程模块
private double xdir = 5;
private boolean running = false;
private SevenPointTwo spt = null;
protected double x, y;
public int flag1=0;
Image gui = Toolkit.getDefaultToolkit().getImage("src\\gui.png");
public Gui(SevenPointTwo _spt, double _x, double _y) {
spt = _spt;
x = _x;
y = _y;
}
确定乌龟的随机速度,并时刻的显示兔乌龟的位置。
并不只是一只乌龟,而是所有的乌龟。
模块四:画布界面的设置与布局
private static final long serialVersionUID = 1L;
private Button quit = new Button("退出");
private Button stop = new Button("暂停");
private Button restart1 = new Button("重新开始1");
private Button restart2 = new Button("重新开始2");
private Button model1_start = new Button("模式1开始");
private Button model2_start = new Button("模式2开始");
JLabel l=new JLabel();
private Tu tuzi;
private Tu1 tuzi1;
private Gui wugui;
private Gui1 wugui1;
Image tu = Toolkit.getDefaultToolkit().getImage("src\\tu.png");
Image gui = Toolkit.getDefaultToolkit().getImage("src\\gui.png");
public SevenPointTwo() {
super("龟兔赛跑");
setLayout(new FlowLayout());
super.setBackground(Color.GRAY);
int tx = 950;
int ty = 200;
tuzi = new Tu(this, tx, ty);
tuzi1=new Tu1(this,tx,ty+70);
wugui = new Gui(this, tx, ty+140);
wugui1 = new Gui1(this,tx,ty+210);
add(model1_start);
model1_start.addActionListener(this);
add(restart1);
restart1.addActionListener(this);
add(model2_start);
model2_start.addActionListener(this);
add(restart2);
restart2.addActionListener(this);
add(stop);
stop.addActionListener(this);
add(quit);
quit.addActionListener(this);
validate();
setSize(1000, 600);
setVisible(true);
addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);
}
}
);
}
此模块是显示初进时的登陆界面,显示总共的比赛选手,和比赛的模式、暂停、结束。
4.系统测试
对代码进行编译,按动界面上的按钮,观察乌龟和兔子的动作。
确保程序的正确性和可行性。
并多次编译观察结果是否为随机。
4.1初始界面登陆
图4-1
4.2模块一运行
图4-2 4.3模块一结束、显示胜利者
图4-3
4.4模块二运行
图4-4 4.5模块二结束、显示胜利者
图4-5
图4-6
图4-7 按动退出按钮时,程序关闭运行,界面消失。
5.总结
我所做的一个基于多线程模式的龟兔赛跑小游戏,系统的规模大小很有限,实现的功能也很简单,但还算是一个完整的系统,在整个课程设计过程中我还是学到了不少的知识,也对以前所学的知识有了更多的了解,并且对java语言有了较深的体会。
通过本次课设试验在试验过程中,虽然刚开始什么都不会,但是我不断的尝试,不断的修改错误,遇到问题,查找资料,请教老师,并解决问题,终于明白了每个功能模块的作用。
虽然这个过程很苦,但我对java的熟练程度得到了很大的提升,对包括多线程在内的java语言高级技术掌握的也更加熟练了,更对面向对象的分析思想,面向对象的设计方法有了直观的体会。
同时,在游戏的制作过程中要用到很多课本上并未介绍到的知识,如当我遇到如何在一个Japplet类中创建另外一个Applet类的对象并运行线程的问题时,我纠结了很久没能找到解决办法,最终通过上网问百度,不断尝试,不断错,在不断改,终于解决了。
通过网络学习使得自己对该部分的知识有了更广泛更深刻的体会。
由于知识有限,本次的游戏制作有些简单,还有时间的原因以至于兔子领先的时候睡觉的程序并没有设计完,所以显得游戏相对单调,离一个真正的游戏软件还相差很远,以后如有时间和精力,可以考虑去做一个真正的游戏软件,来锻炼自己,相信我会做得更好!
参考文献
1. 张海藩.软件工程导论(第四、五版)[M].北京:清华大学出版社, 2008.
2. Cay S and Gary C. Java2 核心技术 (卷 1: 基础知识)[M]. 机械工业出版社, 200
3.
3.邓光伟, 李阿午, 朱志. Java 2 核心技术 (卷 2: 高级特性)[M]. 机械工业出版社, 2000.
4. Liberty J. Programming C#: Building. Net applications with C#[M]. O'Reilly Media, 2009.
5.耿祥义.Java 2 实用教程.北京:清华大学,2006-8
6.陈轶.姚晓昆编著.Java程序设计实验指导.北京:清华大学出版社,2006
7.赵毅主编.跨平台程序设计语言——Java.西安:西安电子科技大学出版社,2006
8.[美]Rogers Cadenhead. Java编程入门经典.梅兴文译.第4版.北京:人民邮电出版社,2007。