JAVA课程设计之赛马游戏
目录
一.需求分析 ............................错误!未定义书签。
概述 (2)
课题分析 (2)
实现功能步骤 ......................... 错误!未定义书签。
设计工作详解.......................... 错误!未定义书签。
外部界面需求.......................... 错误!未定义书签。
运行环境...................................................错误!未定义书签。
二.概要设计 ............................错误!未定义书签。
系统流程图............................ 错误!未定义书签。
功能模块图............................ 错误!未定义书签。
赛马比赛模拟程序初始化块 (4)
赛马比赛区模块 (4)
投注区模块 (5)
线程启动及结束模块 (5)
比赛结果显示区模块 (5)
三.详细设计 ............................错误!未定义书签。
赛马比赛模拟程序初始化模块 (6)
赛马比赛区模块 (7)
错误!未定义书签。投注区模块错误!未定义书签。线程启动及结束模块 (9)
比赛结果显示区模块.........................................12错误!未定义书签。程序流程...................................................12错误!
未定义书签。
系统界面...................................................错误!未定义书签。
四.调试分析 (13)
调试过程中所遇到的问题及解决方法...... 错误!未定义书签。
经验与体会............................ 错误!未定义书签。五.用户使用说明 ........................错误!未定义书签。六.测试结果 ............................错误!未定义书签。七.参考文献 ............................错误!未定义书签。八.附录................................错误!未定义书签。
一、需求分析
概述
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。本次使用的是eclipse开发软件。
以下就给出这次课题设计的题目:
模拟赛马比赛。
课题分析
a.课设题目:模拟赛马比赛
内容:
1.设计一个模拟赛马比赛软件,比赛显示赛马过程,每匹马每个
时刻的加速度都是随机的。
2.能统计每匹马所跑完所需的总时间,最终的名次。
3.支持用户对马进行投注,并记录输赢,保存到文件或数据库中。
b.从这个题目来分析,要做的主要有四大点:
1.第一点就是要设计用户登录赛马的页面,登陆后才能进行赛马和投注等功能。
2.第二点就是要能在页面上进行投注和赛马。其中包括:
(1)用户进行选马,和对选中的马进行有效的投注。
(2)开始赛马,期间用户不得进行其他操作。
(3)赛马结束,显示比赛输赢和投注金额的变化。
3.第三点就是用户能进行重新比赛等操作。
实现功能步骤
程序开始后,会进入用户登录界面,用户输入自己的姓名和密码后,选择登录会进入到赛马比赛的界面,这时可以看见赛马场和马匹的编号,用户可以选择任何一个编号的马进行投注,输入有效的投注金额(因为系统设置了初始金额,所以不得投注的超过初始金额)。投注完成后用户可以选择开始比赛,赛马期间用户不得进行任何操作,赛马结束后,用户可以重新进行新一轮的赛马比赛,方法上同。设计工作详解
通过这个分析,我认为主要是通过线程来实现马的运动,thread 的子类创建线程,线程的开始使马进行运动,再通过线程的休眠,随机获得休眠时间使马获得随机的加速度,最后线程的终止使马停止运动。期间还包括用Draw类以及各种repaint()等方法来绘制马匹。外部界面需求
本程序JFrame类其子类创建的对象是窗体,通过按钮JButton
及标签组件JLabel来实现用户的登录界面。
赛马界面还运用到JPanel创建面板和FlowLayout 布局变量,区分赛马、投注、显示区域,还使用Draw类画马匹,来丰富整个赛马的界面。
运行环境
系统软件:Window 7
所需文件:,,
工具软件:Eclipse
二.概要设计
系统流程图
重新开始
图系统流程图功能模块图
赌
获取比赛获取比赛结束系统时间
金初始系统
变时间
化
图功能模块图
赛马比赛模拟程序初始化模块
在这一模块中,要求对赛马场、投注区及显示区的布局进行设置,初始化程序窗口的大小,并创建程序窗口。
赛马比赛区模块
其中此模块包括对画出马匹和赛道部分,通过使用Draw类来向
Jpanel面板中添加马和赛道。
部分代码:
class Draw extends JPanel
{
int x=0;
String s;
int w,h;
public void paint(Graphics g) {
(g);
;
w=();
h=();
;
(66,h/2-44,666,h/2-44);
(66,h/2+40,666,h/2+40);
;
(66,0,66,h);
;
(666,0,666,h);
(36+x,h/2-10,30,20);投注金额模块
TextField来输入投注金额,tfget接收后与总金额进行比较。
c. 赌金变化模块
同时变量tz控制金额改变。
线程启动及结束模块
a. 线程启动及结束部分模块
使用 racing().start()启动线程,马匹开始运动。
b. 获取比赛初始系统时间模块
线程run启动时,通过使用Calendar类来获取比赛开始时的系统时间,其中使用getNow_HMS()方法来获取比赛的初始时间。
c. 获取比赛结束系统时间模块
当比赛结束,线程终止时,通过使用Calendar类来获取比赛结束时的系统时间,其中使用getNow_HMS()方法来获取比赛的结束时间。
比赛结果显示区模块
在JTextArea()分布的空间内,通过方法append()显示马匹的名次,用时等信息。
三.详细设计
赛马比赛模拟程序初始化模块
在这一模块中,要求对赛马场、投注区及显示区的布局进行设置。模块代码:
public Run()
{
frame=new JFrame("赛马");
p1=new JPanel();
p2=new JPanel();
p3=new JPanel();
ly=new FlowLayout();
jb=new JButton("开始");
h1=new Draw();
h2=new Draw();
h3=new Draw();
h4=new Draw();
no=0;
tz=20000;
cotrol=true;
="1号马";
="2号马";
="3号马";
="4号马";
b1=new JRadioButton("1号马");
b2=new JRadioButton("2号马");
b3=new JRadioButton("3号马");
b4=new JRadioButton("4号马");
bg=new ButtonGroup();
money=new JLabel("总金额为"+(tz));
tf=new TextField(10);
ta=new JTextArea("",5,10);
tart();
new racing(h2,this).start();
new racing(h3,this).start();
new racing(h4,this).start();
("重新开始");线程启动及结束部分模块模块代码:
public void actionPerformed(ActionEvent e) {
……
("比赛开始了"+'\n');
new racing(h1,this).start();
new racing(h2,this).start();
new racing(h3,this).start();
new racing(h4,this).start();
("重新开始");获取比赛初始系统时间模块
线程run启动时,通过使用Calendar类来获取比赛开始时的系统时间,其中使用getNow_HMS()方法来获取比赛的初始时间。
模块代码:
import .*;
public class DateUtil{
public static String getNow_M(){
Calendar c=();
String minute=);
if()==1){
minute="0"+minute;
}
String ms1=minute;
return ms1;
}
public static String getNow_S(){ Calendar c=();
String second=);
if()==1){
second="0"+second;
}
String ms2=second;
return ms2;
}
public int getNow_HMS(){
String s1,s2;
s1=getNow_M();
s2=getNow_S();
int a=(s1)*60+(s2);
return a;
}
public static void main(String[] args) { DateUtil d;
d=new DateUtil();
();
}
}
public int Time(){
int oo=();
return oo;
}
c. 获取比赛结束系统时间模块
当比赛结束,线程终止时,通过使用Calendar类来获取比赛结束时的系统时间,其中使用getNow_HMS()方法来获取比赛的结束时间。
模块代码:
public void run()
{ int t;
int o,y;
o=();
……
y=();
int z=y-o;
("用时:"+z+"秒"+'\n');
}
比赛结果显示区模块
在JTextArea()分布的空间内,通过方法append()显示马匹的名次,用时等信息。
程序流程
进入赛马比赛界面
点击任意一匹马的编号
向投注区内输入投注的金额
点击开始比赛按钮
比赛结束
点击重新开始比赛进入上面循环
直到用户金额为空或者自行退出比赛
系统界面
四.调试分析
调试过程中所遇到的问题及解决方法
本次课设遇到几个问题,但是通过仔细查找资料也能很快的进行解决:
1.本次要求中有需要马的加速度的随机的,这个问题后来使用线
程的休眠来解决的。通过使用随机来获得休眠时间,最后每匹马的休眠时间的不同,从而达到每匹马的加速度的不同,马匹
运动的快慢就不一样了。
2.比赛还需要计数每匹马跑的最终时间,解决方法是比赛开始时
获取一次系统时间,到后来每匹马的线程终止了就分别获取终止时的系统时间,这样相减就得到每匹马跑完的时间。通过使用日期类 Calendar 来解决。
经验与体会
通过这次的课设,使我收获良多。首先对与java的知识我有了更加深刻的理解和掌握,仅仅靠书本上的知识,而不去亲手实践运用是没有用的,而这次的实验,我把课堂上的知识结合起来,自己理解的更加透彻,使课设做起来十分的应手。虽然遇到了一些问题,但是通过查找资料和提问同学,使得问题慢慢的解决,最后使得课设尽自己最大的努力做到了最好。对于界面的设计、线程的使用还有对JAVA也有了更加多的掌握,所以,还是要多进行实践来丰富自己的知识。五.用户使用说明
(1)这次程序的编译环境是Eclipse工具,同时还有包含3个文件:,,。
(2)整个程序进入时需要在第一个对话框中输入姓名和密码,之后跳转到赛马界面。