
龟兔赛跑课程设计.doc
23页成 绩《Java程序设计》课程设计设计题目 龟兔赛跑 设计时间 2012.6.18 至 2012.6.24 学生姓名 任命 学生学号 所在班 指导教师 摘要本次课设我选择的是龟兔赛跑游戏的制作这个游戏实际上主要是对我们JAVA学习中的线程部分的考察,尤其是多线程的定义、运行,Java小程序的编写,图形界面的实现,Java小程序中背景音乐的插入等同时还要保证游戏有一个真实的操作界面和人性化操作设计,所以我在设计过程中重点强调了对线程部分内容的复习和实践 在设计龟兔赛跑这个游戏中我们也遇到了技术上的一些困难,但通过查资料、阅读大量的文献最终问题得以解决正如龟兔赛跑这个故事一样,虽然我在技术上不是很优秀,但我有像乌龟一样坚持不懈的精神,最终胜利到达终点关键字Java小程序;多线程;图形界面;画图;背景音乐目 录1需求分析………………………………………………………………………………………1 1.1图形用户界面……………………………………………………………………………11.2动态画面…………………………………………………………………………………11.3图片切换…………………………………………………………………………………11.4字符切换…………………………………………………………………………………11.5背景音乐设置……………………………………………………………………………11.6比赛场地的设置…………………………………………………………………………12设计方法及设计方案…………………………………………………………………………22.1设计良好游戏界面………………………………………………………………………22.2线程类的设计……………………………………………………………………………23系统设计………………………………………………………………………………………44系统的开发和运行环境及安装配置说明……………………………………………………74.1在DOS命令行界面中编译运行…………………………………………………………74.2在Textpad界面中编译运行……………………………………………………………74.3文件打包存放……………………………………………………………………………75系统实现………………………………………………………………………………………85.1登陆界面…………………………………………………………………………………85.2赛跑界面…………………………………………………………………………………86总结与心得体会………………………………………………………………………………11参考文献………………………………………………………………………………………12附录……………………………………………………………………………………………131需求分析1.1图形用户界面在兔子乌龟比赛之前,显示界面如右图:通过在Java Application或者Applet中添加标签、按钮、面板等组件来显示本软件基本信息,以及操作命令(进入游戏、退出游戏)。
1.2动态画面创建多线程,至少是一只兔子和一只乌龟的线程,兔子可能睡觉也可能不睡觉,乌龟不睡觉,兔子睡觉的时间、兔子的速度、乌龟的速度、随机,但总体总体速度比乌龟快1.3片切换当兔子睡觉或先到终点或乌龟先到终点的时候切换画面1.4符切换适时切换图片下面的字幕1.5景音乐设置插入符合主题的背景音乐1.6赛场地的设置画出圆角矩形比赛场地、直线跑道、终点线,通过使用java中、drawLine、drawImage、drawString、drawRoundRect等命令来实现图形用户界面,同时通过设置布局,背景,字体等来丰富界面,最大程度的模拟龟兔赛跑的场地2设计方法及设计方案2.1设计良好游戏界面功能:实现基本的开始、退出游戏功能、选择游戏模式等基本步骤:RRTT extends Applet添 加在其上添加乌龟标签panellabelbutton胜利信息的呈现兔子标签选择按钮提示模式信息呈现用于选择不同的比赛模式开始按钮退出按钮添 加ItemSelect在实现过程中会遇到的问题及解决方案:1.背景面板上加载图片时需要重写paint方法2.布局根据需要设置(BorderLayout或FlowLayout FowLayout)3.添加背景面板监听重置各面板位置才能实现窗口放大时的相对位置不变2.2线程类的设计功能:实现乌龟,兔子的多线程运行具体步骤:Canvas类的子类Imagecanvas,设置画布Frame类的子类frameRabbitThread线程class RRTT类(是主类,继承JApplet主要用于初始界面的显示,调用线程类对象)Applet的子类RRTTTortoiseThread线程ItemSelect类第二步会遇到的问题及解决方案:1.建立兔子线程,继承接口Runnable并正确的实现run()方法。
同时要特别注意兔子在比赛中还要模拟睡觉的动作2.建立乌龟线程,继承接口Runnable并实现其run()方法,要与兔子多线程运行;3.为了实现可选择多只龟兔进行赛跑,要实现多个兔子,乌龟线程,并能并发运行4.游戏中提供了模式选择的功能,通过建立ItemSelect类来建立不同的游戏模式3系统设计龟兔赛跑程序主要由以下几个模块构成:模块一:初始图形界面模块public class RRTT extends Applet implements ActionListener{ Graphics g; Panel panel; Label label1,label2,label3; Button button1,button2; RabTor1 rabTor1; public void init()//Applet中的初始化函数有类中构造函数的作用!最先调用! { panel=new Panel(); panel.setLayout(new FlowLayout()); label1=new Label("欢迎使用该软件,1.0版本,不足之处,请多多指教!"); label2=new Label("*********东瑞制作*****程序员*****陈杰*********"); label3=new Label(); button1=new Button("进入游戏"); button2=new Button("退出游戏"); button1.addActionListener(this); button2.addActionListener(this); setLayout(new BorderLayout()); panel.add(button1); panel.add(label3); panel.add(button2); add(label1,BorderLayout.NORTH); add(label2,BorderLayout.SOUTH); add(panel,BorderLayout.CENTER); } public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { rabTor1=new RabTor1(); //dispose(); } else if(e.getSource()==button2) { System.exit(0); } }}该模块主要是用来提供进入该程序游戏的初始图形用户界面,显示该程序的基本信息,提示用户进行操作。
模块二:兔子线程模块该模块主要是实现兔子运行线程,类RabbitThread 继承了接口Runnable并实现其方法run(),主要有两个功能的实现:1.来为兔子定义随机速度x1=x1+(int)(Math.random()*30);2.兔子动的实现方法if(threadName.equals("rabbit")&&x1<=800) int t1=0,t2=0; str1="rabbit"; x1=x1+(int)(Math.random()*30); rab_time=rab_time+1; rab_road+=(int)(Math.random()*25); 3.兔子获得一个随机的时间睡眠(0—30秒)str1="乌龟跑这么慢,我先睡一会"; str2="哼,别以为自己是兔子就了不起!你就睡吧!"; rabbit = getImage( getCodeBase(),"4.jpg"); try { t1=(int)(Math.random()*30000); Thread.currentThread().sleep(t1);} catch (InterruptedException e){}模块三:乌龟线程模块该模块主要是实现乌龟运行线程,类TortoiseThread继承了接口Runnable并实现其方法run(),主要功能的实现:乌龟移动实现的方法!else if(threadName.equals("tortoise")&&x2<=600) { x2+=(int)(Math.random()*20); tor_road+=(int)(Math.random()*20); tor_time=tor_time+1; if(x2>140&&x2<240) { str2="tortoise"; } if(x2>255&&x2<=480) { str2="tortoise"; } if(x2>480&&x1<580) { str2="就快到终点了,我要坚持下去,坚持就是胜利!";}通过随机函数实现乌龟随机速度爬行。
模块四:画布界面的设置与布局class Imagecanvas extends Canvas{ Toolkit tool; Image image1; Imagecanvas() { setSize(800,500); tool=ge。












