龟兔赛跑程序设计报告全解_第1页
龟兔赛跑程序设计报告全解_第2页
龟兔赛跑程序设计报告全解_第3页
龟兔赛跑程序设计报告全解_第4页
龟兔赛跑程序设计报告全解_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、目录前言 1工程概况 12.1 项目所用的时间 12.2 项目负责人 12.3 项目指导人 1正文 13.1 设计的目的和意义 13.2 目标与总体方案 23.3 设计方法和内容 23.3.1 开发环境 23.3.2 设计方法 23.3.4 设计体会 83.4 设计创新与关键技术 83.4.1 设计创新 83.4.2 关键技术 93.5 结论 9致谢 9参考文献 10附录 11刖百在科技日新月异的今天,电脑成为人的生活中不可缺少的一部分。作为计算机专业的学生,应该充分 利用所学知识,把实际问题转移到电脑上去,通过电脑的编程,使复杂问题简单化,深奥问题浅显化,抽 象问题具体化。在学过Java程序

2、设计语言后,我们对计算机有了更深的了解。Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。当1995年SUNB出Java语言之后,全世界的目光都被这个神奇的语言所吸引。Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了 “一次编译、到处执行” 的跨平台特性。本次课设我选择的是龟兔赛跑游戏的制作。这个游戏实际上主要是对我们JAVA学习中的线程部分的考察,尤其是多线程的定义,运行等。同时还要保证

3、游戏有一个真实的操作界面和人性化操作设计。在设计龟兔赛跑这个游戏中我也遇到了技术上的一些困难,但通过查阅资料,并且在老师的帮助下最 终问题得以解决。正如龟兔赛跑这个故事一样,虽然我们在技术上不是很优秀,但只要有乌龟一样坚持不 懈的精神,最终胜利到达终点。工程概况2.1 项目所用的时间从这个项目开始到结束总共历时12天。完成于2015年6月19日。2.2 项目负责人孙肖肖,女,计算机科学与技术17-4,学生。2.3 项目指导人高贤强,男,信息工程学院教师,讲师。正文3.1设计的目的和意义本设计要求学生开发一个龟兔赛跑游戏,主要是对学生多线程编程、游戏方案设计、游戏背景及动漫 制作等能力进行培养锻

4、炼,同时还要求保证游戏有一个真实的操作界面和人性化操作设计。此外,学生通 过该题目的设计过程,可以初步应用软件系统的开发原理和开发方法,全面培养软件开发过程中的分析、 设计、编码、测试及文档规范书写的能力,得到软件工程的训练,提高解决实际问题的能力。( 1 )有助于加深我们对Java 程序设计这门课程的理解,我们在课堂上学的都是基础理论知识,对于如何用程序语言来描述所学知识还是有一定的难度。通过课程设计,我们可以真正理解其内涵。( 2 )有利于我们逻辑思维的锻炼,程序设计能直接有效地训练学生的创新思维、培养分析问题、解决问题的能力。即使是一个简单的程序,依然需要学生有条不紊的构思。( 3 )有

5、利于培养严谨认真的学习态度,在程序设计的过程中,当我们输入程序代码的时候,如果不够认真细心,那么就可能导致语法错误,从而无法得出运行结果。那么,这个我们反复调试,反复修改的过程,其实也是对我们认真严谨治学的一个锻炼。3.2 目标与总体方案( 1 )用图形用户界面实现游戏界面,同时通过设置布局,背景,字体等来丰富界面,最大程度的模拟龟兔赛跑的场景。( 2 )能设置比赛时间,龟兔的数量等等,实现对比赛中龟兔的数量,比赛时间等参数的设置。( 3 )在任意时间段内龟兔的速度是随机的,为了模拟龟兔赛跑结果的不确定性,在游戏开始后乌龟和兔子的速度都是通过随机函数产生的,保证兔子比乌龟速度要快,兔子在赛跑途

6、中看到乌龟落后下会偷懒睡觉的前提下给予乌龟, 兔子以随机的速度, 从而使得游戏的结果不确定, 给用户更多的游戏的真实感。( 4 )开始比赛之后以动画显示赛跑过程,用户进入游戏界面后,先选择游戏模式,然后单击开始按钮,乌龟和兔子将会以随机的速度开始朝终点线爬行,通过重复刷新技术达到动画效果,给用户更逼真的感官。( 5 )系统的开发可以采用Java 语言来实现;( 6 )在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。3.3 设计方法和内容3.3.1 开发环境硬件环境:一台清华同方电脑,其配置为: CPU: Intel(R) Core(TM) i5-4570 3.2GHz 内存:

7、 4G 硬盘: 500G 主板: 4260LA-2922P软 件 环 境 : Windows 7 旗 舰 版 版 本 2009 Service Pack 1 , 并 且 安 装 了 可 供 编 程 的 eclipse-standard-kepler-SR1-win323.3.2 设计方法赛跑的过程是两个比赛对象并行前进的过程,考虑到应用需求,我们可以利用多线程技术,所谓多线程就是指同时存在几个执行体,按几条不同的执行线索共同工作的情况, 这与要求刚好吻合, Java 语言对 多线程提供强大的支持。用直观图形描述龟兔赛跑前进过程:每过一秒,兔子走过的文本框中增加三个“# ”号,乌龟走过的路程文本

8、框中增加一个“# ”号。跑完路程结束线程,并显示各自跑完全程总共用的时间。3.3.3 主体内容一、设计分析第一步:设计良好游戏界面功能:实现基本的开始、退出游戏功能、选择游戏模式等。基本步骤:huttoii乌他株签兔子续选择裔提示模式信息呈现用于选择不同的比一 模式退出按钮图3.3.3.1 基本步骤1在实现过程中会遇到的问题及解决方案:1、背景面板上加载图片时需要重写 paintComponent方法2、布局必须合理设置 (GridLayout不能改变组件的具体位置但可以缩放时相对位置不变。FlowLayout默认是占满第一行转向第二行,并且放大时相对位置改变。 Null布局可以自由布置组件位

9、置和大小, 但不 易实现窗口放大时相对大小随之变化。 )若设置不合理,就可能出现多种错误。歹U如:无法插入背景图片, 组建不能显现,组件位置与设计不符等等。3、添加背景面板监听重置各面板位置才能实现窗口放大时的相对位置不变第二步:线程类的设计功能:实现多只乌龟,兔子的多线程运行具体步骤:图3.3.3.2 基本步骤2第二步会遇到的问题及解决方案:1、建立兔子线程,继承接口 Runnable并正确的实现run()方法。同时要特别注意兔子在比赛中还要 模拟睡觉的动作。2、建立乌龟线程,继承接口 Runnable并实现其run()方法,要与兔子多线程运行;3、为了实现可选择多只龟兔进行赛跑,要实现多个

10、兔子,乌龟线程,并能并发运行。4、游戏中提供了模式选择的功能,通过建立ItemSelect类来建立不同的游戏模式。二、各模块的功能及程序说明龟兔赛跑程序主要由以下几个模块构成:模块一:初始图形界面模块public class RRTT extends Applet implements ActionListener Graphics g;Panel panel;Label label1,label2,label3;Button button1,button2;RabTor1 rabTor1;public void init()/Applet中的初始化函数有类中构造函数的作用!最先调用! pan

11、el=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(thi

12、s);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.getSourc

13、e()=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

14、"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(

15、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<

16、;240) str2="tortoise" if(x2>255&&x2<=480) str2="tortoise" if(x2>480&&x1<580) str2=" 就快到终点了,我要坚持下去,坚持就是胜利! "通过随机函数实现乌龟随机速度爬行。模块四:画布界面的设置与布局class Imagecanvas extends CanvasToolkit tool;Image image1;Imagecanvas() setSize(800,500);tool=getToolkit

17、();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;三、操作方法及试验结果:(兔子领先)(第一局比赛开始)(兔子胜利)(第二局比赛开始)(兔子中途睡觉)(乌龟反超兔子,最终胜利)3.3.4设计体会本系统是一个基于多线程模式的龟兔赛跑小游戏,系统的规模很有限,功能实现也相对简单,

18、但 作为一个完整的系统,在整个过程中我还是学到了不少的知识,也对 java语言有了较深的体会。通过本次课设试验,我对java的熟练程度得到了很大的提升,对包括多线程在内的java语言高级技术掌握的也更加熟练了,更对面向对象的分析思想,面向对象的设计方法有了直观的体会。同时,在游戏 的制作过程中要用到很多课本上并未介绍到的知识,例如多线程队列事件等等,通过网络学习和与老师同 学的交流使得自己对该部分的知识有了更广泛更深刻的体会。当然本次课设,通过我不断的尝试,不断的 修改错误,解决问题,终于明白了程序员生活中天堂与地狱的感觉是什么了。虽然这个过程很苦,但我对 java的熟练程度得到了很大的提升。

19、同时,在游戏的制作过程中要用到很多课本上并未介绍到的知识,如 当我遇到如何在一个 Japplet类中创建另外一个 Applet类的对象并运行线程的问题时,我纠结了很久没 能找到解决办法,最终通过上网百度,不断尝试,不断错,在不断改,终于解决了。通过网络学习使得自 己对该部分的知识有了更广泛更深刻的体会。这次的课程设计时间有点短,仅有二周的时间。在调试过程 中屡调屡败的状态下,老师给了我热情的帮助,老师指导我们调试程序,说哪些是错的,哪些是多余的, 哪些是必要的,一个杂乱无章的程序被修改得有条不紊,很显然结果也是最最正确的。本次系统的功能相对还比较单一,只能选择两种游戏模式,并且游戏也相对单调,

20、缺乏趣味性,离一 个真正的游戏软件还相差很远,以后如有时间,可以考虑去做一个真正的游戏软件。3.4 设计创新与关键技术3.4.1 设计创新1、用图形用户界面实现游戏界面;通过使用 java 中 Jlabel , Jbutton , JtextArea , JcomboBox 等 swing 组件来实现图形用户界面,同时通过设置布局,背景,字体等来丰富界面,最大程度的模拟龟兔赛跑的场景。2、能设置比赛时间,龟兔的数量等等。通过组合框组件的使用以及事件的订阅来实现用户对不同游戏模式的选择,在本程序中只是简单的设计了两种游戏模式供用户选择,也一定程度上实现了对比赛中龟兔的数量,比赛时间等参数的设置。

21、3、在任意时间段内龟兔的速度是随机的。为了模拟龟兔赛跑结果的不确定性, 在游戏开始后乌龟和兔子的速度都是通过随机函数产生的, 当然,我们会在保证兔子比乌龟速度要快,兔子在赛跑途中看到乌龟落后下会偷懒睡觉的前提下给予乌龟,兔子以随机的速度,从而使得游戏的结果不确定,给用户更多的游戏的真实感。4、开始比赛之后以动画显示赛跑过程。用户进入游戏界面后,先选择游戏模式,然后单击开始按钮,乌龟和兔子将会以随机的速度开始朝终点线爬行,通过java 中重复刷新技术达到动画效果,给用户更逼真的感官。3.4.2 关键技术游戏中提供了模式选择的功能,通过建立ItemSelect 类来建立不同的游戏模式。 建立兔子和

22、乌龟线程,继承接口 Runnable 并正确的实现run() 方法。3.5 结论程序的语法错误很容易查找和修改,但找出了语法错误并不代表程序已经完成。很多编译错误是由于函数名或变量名等程序对象的拼写错误引起的。 在编写程序的过程中, 需要认真仔细, 以免出现拼写错误,增加调试程序的工序, 浪费不必要的时间和精力。 在这个过程中, 我收获颇多, 不仅理论知识掌握的更牢,实际动手能力也有所提高,再次让我感受到 Java 语言强大的功能,更激发了我Java 语言的兴趣。如果说以前的编程仅仅是按照课本的要求进行的,那这个课程设计难度就提高了一个级别,它让们将所知道的知识联系到了一起,更加显示了程序的强

23、大。致谢首先我要感谢我的老师在课程设计上给予我们的指导和提供给我们的支持和帮助,这是我们能顺利完成这次课程设计的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我们能把程序做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢曾经帮助过我的同学, 他们也为我解决了不少我不太明白的设计语言,和一些细节上的差错。本次设计是在高贤强老师的悉心指导下完成的,老师渊博的知识,严谨的治学态度,一丝不苟的工作作风,平易近人的性格都是我们学习的楷模。在论文的整理期间,高老师给了我们很多的意见和指导,才使得论文得以顺利的完成。最后再一次感谢所有在设计中曾经

24、帮助过我的良师益友和同学。在此,我诚心的对所有帮助过我的老师同学们说一句:谢谢!参考文献1 丁振凡 Java 语言使用教程 . 北京邮件大学出版社, 2006.92 丁振凡 Java 语言使用教程实验指导 . 北京邮件大学出版社, 2006.93 Bruce Eckel Java 编程思想 . 机械工业出版社2007.64耿祥义JAVA2实用教程.清华大学出版社 2009.55 陈国君 java 程序设计基础(第二版) 清华大学出版社6 刘艺,吴英 Java 程序设计大学教程 M 北京:科学出版社, 2005 年7 赵文靖 . Java 程序设计基础与上机指导 . 北京:清华大学出版社, 20

25、06 年 .8 吴其庆 . Java 程序设计实例教程 . 北京:冶金工业出版社, 2006 年 .9 耿祥义,张跃平 Java 基础教程(第2 版) M 北京:清华大学出版社, 2007 年10 美Bruce Eckel. Thinking In Java. 英文第4版.北京:机械工业出版社,200711 杨昭编著 . 二级 Java 语言程序设计教程. 北京:中国水利水电出版社, 200612 赵文靖编著.Java 程序设计基础与上机指导 . 北京:清华大学出版社, 200613 张海藩 . 软件工程导论( 第四、五版)M. 北京 : 清华大学出版社,2008.14Cay S and Ga

26、ry C. Java2 核心技术 (卷 1: 基础知识 )M. 机械工业出版社 ,2003.15 邓光伟 , 李阿午 , 朱志 .Java2 核心技术 (卷 2: 高级特性 )M. 机械工业出版社 ,2000.16Watson K,NagelC,齐立波.C#入门经典M.清华大学出版社,2002.17张广彬,孟红蕊,张永宝.C+课程设计案例精编M.清华大学出版社,2005.18朱喜福.C+程序设计M.人民邮电出版社,2005.19宛延闿.实用C+和序设af教程M.机械工业出版社,2006.附录源程序package sxx;import java.awt.Color;import java.awt

27、.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.applet.Applet;import java.applet.AudioClip;import .URL;SuppressWarnings( "unused", "serial" )class Imagecanvas extends Canva

28、sToolkit 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;/*public class frame extends Frame implem

29、ents ActionListenerPanel panel;Label label1,label2,label3;Button button1,button2;RabTor1 rabTor1;frame()panel=new Panel(); panel.setLayout(new FlowLayout();label1=new Label(" 欢迎使用该软件,1.0 版本,不足之处,请多多指教! ");label2=new Label("* 东瑞制作 * 程序员 * 孙肖肖 *");label3=new Label();button1=new But

30、ton("进入游戏");button2=new Button("退出游戏");button1.addActionListener(this);button2.addActionListener(this);/label1.setText(" 欢迎使用该软件,1.0 版本,不足之处,请多多指教! ");/label2.setText("* 东瑞制作 * 程序员 * 孙肖肖 *");setLayout(new BorderLayout();panel.add(button1);panel.add(label3);pan

31、el.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,200);setVisible(true);validate();public void actionPerformed(ActionEvent e

32、)if(e.getSource()=button2) rabTor1=new RabTor1();*/package sxx;import java.applet.AudioClip;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import .URL;import javax.swing.JApplet;SuppressWarnings("serial")public class RabTor1 extends JApplet implements Runnable Graphic

33、s g;int i=1;Image backpic,rabbit,tortoise,zhongdian,tortoise2,rabbit2;int x1=0,y1=80,j=0;int x2=0,y2=180;/ 图片的位移!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()/

34、Applet 中的初始化函数有类中构造函数的作用 ! 最先调用backpic = getImage(getCodeBase(), " rabbit = getImage( getCodeBase()," tortoise = getImage(getCodeBase(), " zhongdian = getImage(getCodeBase(), " tortoise2 = getImage(getCodeBase()," rabbit2=getImage(getCodeBase()," /rabbit3=getImage(getBa

35、se(),"3.jpg");public void paint(Graphics g)/ this.g=g;起跑 .jpg");/ 将图片对象与图片 绑定 !兔子 .gif");乌龟 .jpg");乌龟赢了 .png");小乌龟 .jpg");兔子在前 .jpg");此函数第四个调用 !setSize(760,360);if(i=1) g.drawImage(backpic, 0, 0, 800, 600, this);g.setColor(Color.green);g.fillRect(0, 0, 1600, 8

36、00);/填充矩形g.setColor(Color.red);g.drawString("-背景音乐孙肖肖制作 ",30,30);g.drawLine(0,75,600,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.drawStri

37、ng(str1, x1, y1+80);g.drawImage(tortoise, x2, y2, 60, 60, this);g.drawString(str2, x2, 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.drawIm

38、age(rabbit2,x4,y4,60,60,this);*/System.out.println(j);public void update(Graphics g)/用不到!public void start()/此函数第二个调用 !Thread rab = new Thread(this, "rabbit");/创建一个兔子线程,this 表示在这个类中找 .rabbit 是线程的名子.Thread tor = new Thread(this, "tortoise");rab.start();/线程对象调用 start() 方法 ! 然后调用对应的

39、 run() 方法 !tor.start(); /*public void stop() tryrab.stop();rab=null;tor.stop();tor=null;catch(Exception e)*/为什么没用?/public void destroy() / public void run()/此函数第三个调用 !URL codebase=getCodeBase();System.out.println(codebase);AudioClip audio1=getAudioClip(codebase,"龟兔赛跑 .wav");g.drawString(&q

40、uot;- 背景音乐鲁晶晶制作 ",30,30);audio1.loop();boolean stop=false;/标志 , 此函数的精典之处. 控制兔子 , 龟什么时候停!while(!stop) tryThread.currentThread();Thread.sleep(1000);/ 当前线程调用 sleep() 函数 .catch (InterruptedException ex) String threadName=Thread.currentThread().getName();/取得当前线程的名子.if(threadName.equals("rabbit&

41、quot;)&&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);if(x1>=120&&x1<=140&&x1<x2) str1="乌龟跑这么慢,我肯定能追上他!我先睡一会"str2="哼,别以为自己是兔子就了不起!你就睡吧!"rabbit = getI

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

温馨提示

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

评论

0/150

提交评论