JAVA课程设计之赛马游戏
- 格式:doc
- 大小:416.50 KB
- 文档页数:26
目录一.需求分析................................... 错误!未定义书签。
1.1 概述 (2)1.2 课题分析 (2)1.3实现功能步骤 (2)1.4设计工作详解 (2)1.5外部界面需求 (2)1.6 运行环境 (2)二.概要设计 (3)2.1系统流程图 (3)2.2功能模块图 (4)2.3赛马比赛模拟程序初始化块 (4)2.4赛马比赛区模块 (4)2.5投注区模块 (5)2.6线程启动及结束模块 (5)2.7比赛结果显示区模块 (5)三.详细设计 (6)3.1 赛马比赛模拟程序初始化模块 (6)3.2赛马比赛区模块 (7)63.3投注区模块.......................... 63.4线程启动及结束模块9 3.5 比赛结果显示区模块.. (126)3.6 程序流程...................................................12错误!未定义书签。
3.7 系统界面 (6)四.调试分析 (13)4.1调试过程中所遇到的问题及解决方法 (13)4.2经验与体会 (13)五.用户使用说明 (14)六.测试结果 (14)七.参考文献 (18)八.附录 (18)一、需求分析1.1 概述Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
本次使用的是eclipse 开发软件。
以下就给出这次课题设计的题目:模拟赛马比赛。
1.2 课题分析a.课设题目:模拟赛马比赛内容:1.设计一个模拟赛马比赛软件,比赛显示赛马过程,每匹马每个时刻的加速度都是随机的。
2.能统计每匹马所跑完所需的总时间,最终的名次。
3.支持用户对马进行投注,并记录输赢,保存到文件或数据库中。
b.从这个题目来分析,要做的主要有四大点:1.第一点就是要设计用户登录赛马的页面,登陆后才能进行赛马和投注等功能。
2.第二点就是要能在页面上进行投注和赛马。
其中包括:(1)用户进行选马,和对选中的马进行有效的投注。
(2)开始赛马,期间用户不得进行其他操作。
(3)赛马结束,显示比赛输赢和投注金额的变化。
3.第三点就是用户能进行重新比赛等操作。
1.3 实现功能步骤程序开始后,会进入用户登录界面,用户输入自己的姓名和密码后,选择登录会进入到赛马比赛的界面,这时可以看见赛马场和马匹的编号,用户可以选择任何一个编号的马进行投注,输入有效的投注金额(因为系统设置了初始金额,所以不得投注的超过初始金额)。
投注完成后用户可以选择开始比赛,赛马期间用户不得进行任何操作,赛马结束后,用户可以重新进行新一轮的赛马比赛,方法上同。
1.4 设计工作详解通过这个分析,我认为主要是通过线程来实现马的运动,thread的子类创建线程,线程的开始使马进行运动,再通过线程的休眠,随机获得休眠时间使马获得随机的加速度,最后线程的终止使马停止运动。
期间还包括用Draw类以及各种repaint()等方法来绘制马匹。
1.5 外部界面需求本程序JFrame类其子类创建的对象是窗体,通过按钮JButton及标签组件JLabel来实现用户的登录界面。
赛马界面还运用到JPanel创建面板和FlowLayout 布局变量,区分赛马、投注、显示区域,还使用Draw类画马匹,来丰富整个赛马的界面。
1.6 运行环境系统软件:Window 7所需文件:JTextDemo.java,Run.java,DateUtil.java工具软件:Eclipse二.概要设计2.1 系统流程图图2.1 系统流程图2.2 功能模块图图2.2 功能模块图2.3 赛马比赛模拟程序初始化模块在这一模块中,要求对赛马场、投注区及显示区的布局进行设置,初始化程序窗口的大小,并创建程序窗口。
2.4 赛马比赛区模块其中此模块包括对画出马匹和赛道部分,通过使用Draw类来向Jpanel面板中添加马和赛道。
部分代码:class Draw extends JPanel{int x=0;String s;int w,h;public void paint(Graphics g){super.paint(g);this.setBackground(Color.WHITE);w=this.getWidth();h=this.getHeight();g.setColor(Color.BLACK);g.drawLine(66,h/2-44,666,h/2-44);g.drawLine(66,h/2+40,666,h/2+40);g.setColor(Color.BLACK);g.drawLine(66,0,66,h);g.setColor(Color.red);g.drawLine(666,0,666,h);g.drawRect(36+x,h/2-10,30,20);//马的显示g.setColor(Color.BLACK);//文字显示g.drawString(s,26,h/2-12);}}2.5 投注区模块a.投注马匹模块主要是实现马匹的选择及投注的模拟,增加JRadioButton单选按钮选择马匹。
b. 投注金额模块TextField来输入投注金额,tfget接收后与总金额进行比较。
c. 赌金变化模块同时变量tz控制金额改变。
2.6 线程启动及结束模块a. 线程启动及结束部分模块使用 racing().start()启动线程,马匹开始运动。
b. 获取比赛初始系统时间模块线程run启动时,通过使用Calendar类来获取比赛开始时的系统时间,其中使用getNow_HMS()方法来获取比赛的初始时间。
c. 获取比赛结束系统时间模块当比赛结束,线程终止时,通过使用Calendar类来获取比赛结束时的系统时间,其中使用getNow_HMS()方法来获取比赛的结束时间。
2.7 比赛结果显示区模块在JTextArea()分布的空间内,通过方法append()显示马匹的名次,用时等信息。
三.详细设计3.1 赛马比赛模拟程序初始化模块在这一模块中,要求对赛马场、投注区及显示区的布局进行设置。
模块代码: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;h1.s="1号马";h2.s="2号马";h3.s="3号马";h4.s="4号马";b1=new JRadioButton("1号马");b2=new JRadioButton("2号马");b3=new JRadioButton("3号马");b4=new JRadioButton("4号马");bg=new ButtonGroup();money=new JLabel("总金额为"+String.valueOf(tz));tf=new TextField(10);ta=new JTextArea("",5,10);//放置单选按钮bg.add(b1); bg.add(b2); bg.add(b3); bg.add(b4);//设置投注区p3.add(new JLabel("投注区"));p3.add(b1);p3.add(b2);p3.add(b3);p3.add(b4);p3.add(money); p3.add(tf);//设置P2p2.setBackground(Color.white);ly.setHgap(30);//设置布局的水平间隙p2.setLayout(ly);p2.add(p3);p2.add(jb);p2.add(ta);//设置赛马区p1.setBackground(Color.white);p1.add(new JLabel("赛马区"));p1.setLayout(new GridLayout(5,1));//设置成5行1列的网格p1.add(h1);p1.add(h2);p1.add(h3);p1.add(h4);//界面设定frame.setLayout(new BorderLayout());frame.add("Center",p1);frame.add("South",p2);frame.setBounds(100,100,800,620);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置结束窗口tf.addActionListener(this);jb.addActionListener(this);b1.addActionListener(new RadioListener());//按钮监听器b2.addActionListener(new RadioListener());b3.addActionListener(new RadioListener());b4.addActionListener(new RadioListener());frame.setVisible(true);}3.2赛马比赛区模块使用Draw添加马和赛道。
模块代码:public class Run extends JFrame implements ActionListener{racing ht;//赛马的进程Draw h1,h2,h3,h4;//画出马的运动图形JPanel p1;//赛马区……}class Draw extends JPanel{int x=0;String s;int w,h;public void paint(Graphics g)super.paint(g);this.setBackground(Color.WHITE);w=this.getWidth();h=this.getHeight();g.setColor(Color.BLACK);g.drawLine(66,h/2-44,666,h/2-44);g.drawLine(66,h/2+40,666,h/2+40);g.setColor(Color.BLACK);g.drawLine(66,0,66,h);g.setColor(Color.red);g.drawLine(666,0,666,h);g.drawRect(36+x,h/2-10,30,20);//马的显示g.setColor(Color.BLACK);//文字显示g.drawString(s,26,h/2-12);}}3.3 投注区模块这一模块包括投注马匹和投注金额模块。