JAVA课程设计之赛马游戏

JAVA课程设计之赛马游戏
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)整个程序进入时需要在第一个对话框中输入姓名和密码,之后跳转到赛马界面。

相关主题
相关文档
最新文档