龟兔赛跑课程设计(10信计2班 陈杰20100406228)_第1页
龟兔赛跑课程设计(10信计2班 陈杰20100406228)_第2页
龟兔赛跑课程设计(10信计2班 陈杰20100406228)_第3页
龟兔赛跑课程设计(10信计2班 陈杰20100406228)_第4页
龟兔赛跑课程设计(10信计2班 陈杰20100406228)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 成 绩10信计2011-2012(二)Java程序设计课程设计设计题目 龟兔赛跑 设计时间 2012.6.18 至 2012.6.24 学生姓名 陈杰 学生学号 20100406228 所在班级 10信计2 指导教师 刘 风 华 徐州工程学院数学与物理科学学院摘要本次课设我选择的是龟兔赛跑游戏的制作。这个游戏实际上主要是对我们JAVA学习中的线程部分的考察,尤其是多线程的定义、运行,Java小程序的编写,图形界面的实现,Java小程序中背景音乐的插入等。同时还要保证游戏有一个真实的操作界面和人性化操作设计,所以我在设计过程中重点强调了对线程部分内容的复习和实践。 在设计龟兔赛跑这个游戏中我们

2、也遇到了技术上的一些困难,但通过查资料、阅读大量的文献最终问题得以解决。正如龟兔赛跑这个故事一样,虽然我在技术上不是很优秀,但我有像乌龟一样坚持不懈的精神,最终胜利到达终点。关键字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.

3、2赛跑界面86总结与心得体会11参考文献12附录131需求分析1.1图形用户界面在兔子乌龟比赛之前,显示界面如右图:通过在Java Application或者Applet中添加标签、按钮、面板等组件来显示本软件基本信息,以及操作命令(进入游戏、退出游戏)。1.2动态画面创建多线程,至少是一只兔子和一只乌龟的线程,兔子可能睡觉也可能不睡觉,乌龟不睡觉,兔子睡觉的时间、兔子的速度、乌龟的速度、随机,但总体总体速度比乌龟快。1.3片切换当兔子睡觉或先到终点或乌龟先到终点的时候切换画面。1.4符切换适时切换图片下面的字幕。1.5景音乐设置插入符合主题的背景音乐。1.6赛场地的设置画出圆角矩形比赛场地、

4、直线跑道、终点线,通过使用java中、drawLine、drawImage、drawString、drawRoundRect等命令来实现图形用户界面,同时通过设置布局,背景,字体等来丰富界面,最大程度的模拟龟兔赛跑的场地。2设计方法及设计方案2.1设计良好游戏界面功能:实现基本的开始、退出游戏功能、选择游戏模式等基本步骤:RRTT extends Applet添 加在其上添加乌龟标签panellabelbutton胜利信息的呈现兔子标签选择按钮提示模式信息呈现用于选择不同的比赛模式开始按钮退出按钮添 加ItemSelect在实现过程中会遇到的问题及解决方案:1背景面板上加载图片时需要重写pai

5、nt方法2布局根据需要设置(BorderLayout或FlowLayout FowLayout)3添加背景面板监听重置各面板位置才能实现窗口放大时的相对位置不变2.2线程类的设计功能:实现乌龟,兔子的多线程运行具体步骤:Canvas类的子类Imagecanvas,设置画布Frame类的子类frameRabbitThread线程class RRTT类(是主类,继承JApplet主要用于初始界面的显示,调用线程类对象)Applet的子类RRTTTortoiseThread线程ItemSelect类第二步会遇到的问题及解决方案:1.建立兔子线程,继承接口Runnable并正确的实现run()方法。同

6、时要特别注意兔子在比赛中还要模拟睡觉的动作。2.建立乌龟线程,继承接口Runnable并实现其run()方法,要与兔子多线程运行;3.为了实现可选择多只龟兔进行赛跑,要实现多个兔子,乌龟线程,并能并发运行。4.游戏中提供了模式选择的功能,通过建立ItemSelect类来建立不同的游戏模式。3系统设计龟兔赛跑程序主要由以下几个模块构成:模块一:初始图形界面模块public class RRTT extends Applet implements ActionListener Graphics g; Panel panel; Label label1,label2,label3; Button b

7、utton1,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

8、 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(Act

9、ionEvent 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(thre

10、adName.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.兔子获得一个随机的时间睡眠(030秒)str1="乌龟跑这么慢,我先睡一会" str2="哼,别以为自己是兔子就了不起!你就睡吧!" rabbit = getImage( getCodeBase

11、(),"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

12、); 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 ex

13、tends Canvas Toolkit tool; Image image1; Imagecanvas() setSize(800,500); tool=getToolkit(); image1=tool.getImage("6.gif"); public void paint(Graphics g) g.drawImage(image1,10,10,image1.getWidth(this),image1.getHeight(this),this); public Image getImage() return image1; 4系统的开发和运行环境及安装配置说明4.1

14、在DOS命令行界面中编译运行如果使用DOS命令行界面编译运行则应注意本程序的特殊性(Java小程序),步骤如下:(1)编译 如:C:1000javac TTRR.java(2)运行 Java Applet必须由浏览器来运行,因此必须编写一个超文本文件(含有applet标记的Web页),通知浏览器来运行这个程序(Java Applet)。下面是一个最简单的HTML文件,用于通知浏览器运行Java Applet。使用记事本编辑如下:<applet code=TTRR.class height=100 width=300></applet>(3)在DOS命令行执行:C:100

15、0appletviewer Boy.html4.2在Textpad界面中编译运行该程序在Textpad中编译运行比较方便,步骤如下:找到文件“单击右键”“单击Textpad”打开工具“编译”正确无误后单击工具中的“运行(Applet)”4.3文件打包存放由于该程序中需要导入一些图片、音频文件,故在编译运行该程序时要将所需文件放在同一文件夹下,以便程序能够找到。5系统实现5.1登陆界面图所示登陆图形用户界面5.2赛跑界面(兔子在睡觉,乌龟跑到了前面)(兔子到了终点嘲笑乌龟跑得慢)(乌龟先到了终点,兔子在埋怨呢) (最后冲刺,兔子赢了,乌龟挺到了最后,坚持就是胜利)(兔子和乌龟走的步数)6总结与心

16、得体会本系统是一个基于多线程模式的龟兔赛跑小游戏,系统的规模很有限,功能实现也相对简单,但作为一个完整的系统,在整个过程中我还是学到了不少的知识,也对java语言有了较深的体会。通过本次课设试验在试验过程中,我不断的尝试,不断的修改错误,遇到问题,查找资料,解决问题,终于明白了程序员生活中天堂与地狱的感觉是什么了。虽然这个过程很苦,但我对java的熟练程度得到了很大的提升,对包括多线程在内的java语言高级技术掌握的也更加熟练了,更对面向对象的分析思想,面向对象的设计方法有了直观的体会。同时,在游戏的制作过程中要用到很多课本上并未介绍到的知识,如当我遇到如何在一个Japplet类中创建另外一个

17、Applet类的对象并运行线程的问题时,我纠结了很久没能找到解决办法,最终通过上网问百度,不断尝试,不断错,在不断改,终于解决了。通过网络学习使得自己对该部分的知识有了更广泛更深刻的体会。 本次系统的功能相对还比较单一,由于时间原因选择模式、以及游戏最后结束时的提示界面没来得及实现、游戏相对单调,缺乏趣味性,离一个真正的游戏软件还相差很远,以后如有时间,可以考虑去做一个真正的游戏软件,来锻炼自己,相信我会做得更好!参考文献1耿祥义.Java 2 实用教程.北京:清华大学,2006-82陈轶.姚晓昆编著.Java程序设计实验指导.北京:清华大学出版社,20063赵毅主编.跨平台程序设计语言Jav

18、a.西安:西安电子科技大学出版社,20064美Rogers Cadenhead. Java编程入门经典.梅兴文译.第4版.北京:人民邮电出版社,2007附录源代码:import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import javax.swing.JApplet;import java.awt.*;import java.awt.event.*;import java.util.Arrays;import java.lang.*;import java.lang.Class;import java.ap

19、plet.Applet;import java.applet.AudioClip;import .URL;class Imagecanvas extends Canvas Toolkit tool; Image image1; Imagecanvas() setSize(800,500); tool=getToolkit(); image1=tool.getImage("6.gif"); public void paint(Graphics g)g.drawImage(image1,10,10,image1.getWidth(this),image1.getHeight(t

20、his),this); public Image getImage() return image1; /*public class frame extends Frame implements ActionListenerPanel panel;Label label1,label2,label3;Button button1,button2; RabTor1 rabTor1;frame()panel=new Panel();panel.setLayout(new FlowLayout();label1=new Label("欢迎使用该软件,1.0版本,不足之处,请多多指教!&quo

21、t;);label2=new Label("*东瑞制作*程序员*陈杰*");label3=new Label();button1=new Button("进入游戏");button2=new Button("退出游戏");button1.addActionListener(this);button2.addActionListener(this);/label1.setText("欢迎使用该软件,1.0版本,不足之处,请多多指教!");/label2.setText("*东瑞制作*程序员*陈杰*"

22、;);setLayout(new BorderLayout();panel.add(button1);panel.add(label3);panel.add(button2);add(label1,BorderLayout.NORTH);add(label2,BorderLayout.SOUTH);add(panel,BorderLayout.CENTER);addWindowListener(new WindowAdapter() public void WindowClosing(WindowEvent e) System.exit(0); ); setBounds(300,200,300

23、,200); setVisible(true); validate(); public void actionPerformed(ActionEvent e)if(e.getSource()=button2) rabTor1=new RabTor1();*/ public class RabTor1 extends JApplet implements Runnable Graphics g; int i=1; Image backpic,rabbit,tortoise,zhongdian,tortoise2,rabbit2; int x1=0,y1=80,j=0; int x2=0,y2=1

24、80;/图片的位移! int rab_road=0,tor_road=0;/图片跑的路程! double rab_time=0.0,tor_time=0.0;/图片移动用的时间 String str1="rabbit",str2="tortoise"/给字符串付初值! setSize(800,400); */为什么没用? public void init()/Applet中的初始化函数有类中构造函数的作用!最先调用! backpic = getImage(getCodeBase(), "IMGP3457.JPG");/将图片对象与图片

25、 绑定! rabbit = getImage( getCodeBase(),"rabbit.gif"); tortoise = getImage(getCodeBase(), "tortoise.gif"); zhongdian = getImage(getCodeBase(), "13.png"); tortoise2 = getImage(getCodeBase(),"6.gif"); rabbit2=getImage(getCodeBase(),"3.jpg"); /rabbit3=get

26、Image(getBase(),"3.jpg"); public void paint(Graphics g)/此函数第四个调用! this.g=g; setSize(760,360); if(i=1) g.drawImage(backpic, 0, 0, 800, 600, this); g.setColor(Color.green); g.fillRect(0, 0, 1600, 800);/填充矩形 g.setColor(Color.red); g.drawString("-背景音乐陈杰制作",30,30); g.drawLine(0,75,600

27、,75);/画跑道 g.drawLine(0,160,600,160); g.drawLine(0,260,600,260); g.drawLine(603,80,603,300); g.drawRoundRect(0,10,680,300,60,60);/圆角矩形 g.setColor(Color.black); g.drawImage(rabbit, x1, y1, 60, 60, this); g.drawString(str1, x1, y1+80); g.drawImage(tortoise, x2, y2, 60, 60, this); g.drawString(str2, x2,

28、 y2+80); g.drawImage(zhongdian, 600, 0, 60, 80, this); else if(i=2) g.drawImage(tortoise2, 600, 180, 60, 60, this); /*else if(i=3) int x3=245,y3=80; g.drawImage(rabbit2,600,80,60,60,this); else int x4=490,y4=80; g.drawImage(rabbit2,x4,y4,60,60,this); */ /System.out.println(j); public void update(Gra

29、phics g)/用不到! public void start()/此函数第二个调用! Thread rab = new Thread(this, "rabbit");/创建一个兔子线程,this表示在这个类中找.rabbit是线程的名子. Thread tor = new Thread(this, "tortoise"); rab.start();/线程对象调用start()方法!然后调用对应的run()方法! tor.start(); /*public void stop() tryrab.stop(); rab=null; tor.stop();

30、tor=null; catch(Exception e) */ /为什么没用? /public void destory() / public void run()/此函数第三个调用! URL codebase=getCodeBase(); System.out.println(codebase); AudioClip audio1=getAudioClip(codebase,"龟兔赛跑.wav"); g.drawString("-背景音乐陈杰制作",30,30); audio1.loop(); boolean stop=false;/标志,此函数的精典

31、之处.控制兔子,龟什么时候停! while(!stop) try Thread.currentThread().sleep(1000);/当前线程调用sleep()函数. catch (InterruptedException ex) String threadName=Thread.currentThread().getName();/取得当前线程的名子. if(threadName.equals("rabbit")&&x1<=800)/兔子动的实现方法! int t1=0,t2=0; str1="rabbit" x1=x1+(i

32、nt)(Math.random()*30); rab_time=rab_time+1; rab_road+=(int)(Math.random()*25); if(x1>=120&&x1<=140&&x1<x2) str1="乌龟跑这么慢,我肯定能追上他!我先睡一会" str2="哼,别以为自己是兔子就了不起!你就睡吧!" rabbit = getImage( getCodeBase(),"4.jpg"); if(x1>=120&&x1<=130) str1

33、="乌龟跑这么慢,我先睡一会" str2="哼,别以为自己是兔子就了不起!你就睡吧!" rabbit = getImage( getCodeBase(),"4.jpg"); int i=3; try t1=(int)(Math.random()*30000); Thread.currentThread().sleep(t1); catch (InterruptedException ex) rab_time+=(double)t1/1000; if(x1>140) int i=5; rabbit = getImage( getC

34、odeBase(),"rabbit.gif"); if(x1>=240&&x1<=250) int i=3; str1="乌龟跑这么慢,让我再睡一会吧" str2="哼,别以为自己是兔子就了不起!你就睡吧!" rabbit = getImage( getCodeBase(),"4.jpg"); try t2=(int)(Math.random()*20000); Thread.currentThread().sleep(t2); catch (InterruptedException ex) rab_t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论