龟兔赛跑程序设计报告.docx

上传人:b****2 文档编号:159208 上传时间:2023-04-28 格式:DOCX 页数:15 大小:22.61KB
下载 相关 举报
龟兔赛跑程序设计报告.docx_第1页
第1页 / 共15页
龟兔赛跑程序设计报告.docx_第2页
第2页 / 共15页
龟兔赛跑程序设计报告.docx_第3页
第3页 / 共15页
龟兔赛跑程序设计报告.docx_第4页
第4页 / 共15页
龟兔赛跑程序设计报告.docx_第5页
第5页 / 共15页
龟兔赛跑程序设计报告.docx_第6页
第6页 / 共15页
龟兔赛跑程序设计报告.docx_第7页
第7页 / 共15页
龟兔赛跑程序设计报告.docx_第8页
第8页 / 共15页
龟兔赛跑程序设计报告.docx_第9页
第9页 / 共15页
龟兔赛跑程序设计报告.docx_第10页
第10页 / 共15页
龟兔赛跑程序设计报告.docx_第11页
第11页 / 共15页
龟兔赛跑程序设计报告.docx_第12页
第12页 / 共15页
龟兔赛跑程序设计报告.docx_第13页
第13页 / 共15页
龟兔赛跑程序设计报告.docx_第14页
第14页 / 共15页
龟兔赛跑程序设计报告.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

龟兔赛跑程序设计报告.docx

《龟兔赛跑程序设计报告.docx》由会员分享,可在线阅读,更多相关《龟兔赛跑程序设计报告.docx(15页珍藏版)》请在冰点文库上搜索。

龟兔赛跑程序设计报告.docx

龟兔赛跑程序设计报告

前言

在科技日新月异的今天,电脑成为人的生活中不可缺少的一部分。

作为计算机专业的学生,应该充分利用所学知识,把实际问题转移到电脑上去,通过电脑的编程,使复杂问题简单化,深奥问题浅显化,抽象问题具体化。

在学过《Java程序设计》语言后,我们对计算机有了更深的了解。

Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。

当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。

Java不同于一般的编译执行计算机语言和解释执行计算机语言。

它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。

本次课设我选择的是龟兔赛跑游戏的制作。

这个游戏实际上主要是对我们JAVA学习中的线程部分的考察,尤其是多线程的定义,运行等。

同时还要保证游戏有一个真实的操作界面和人性化操作设计。

在设计龟兔赛跑这个游戏中我也遇到了技术上的一些困难,但通过查阅资料,并且在老师的帮助下最终问题得以解决。

正如龟兔赛跑这个故事一样,虽然我们在技术上不是很优秀,但只要有乌龟一样坚持不懈的精神,最终胜利到达终点。

工程概况

项目所用的时间

从这个项目开始到结束总共历时12天。

完成于2015年6月19日。

项目负责人

孙肖肖,女,计算机科学与技术17-4,学生。

项目指导人

高贤强,男,信息工程学院教师,讲师。

正文

设计的目的和意义

本设计要求学生开发一个龟兔赛跑游戏,主要是对学生多线程编程、游戏方案设计、游戏背景及动漫制作等能力进行培养锻炼,同时还要求保证游戏有一个真实的操作界面和人性化操作设计。

此外,学生通过该题目的设计过程,可以初步应用软件系统的开发原理和开发方法,全面培养软件开发过程中的分析、设计、编码、测试及文档规范书写的能力,得到软件工程的训练,提高解决实际问题的能力。

(1)有助于加深我们对Java程序设计这门课程的理解,我们在课堂上学的都是基础理论知识,对于如何用程序语言来描述所学知识还是有一定的难度。

通过课程设计,我们可以真正理解其内涵。

(2)有利于我们逻辑思维的锻炼,程序设计能直接有效地训练学生的创新思维、培养分析问题、解决问题的能力。

即使是一个简单的程序,依然需要学生有条不紊的构思。

(3)有利于培养严谨认真的学习态度,在程序设计的过程中,当我们输入程序代码的时候,如果不够认真细心,那么就可能导致语法错误,从而无法得出运行结果。

那么,这个我们反复调试,反复修改的过程,其实也是对我们认真严谨治学的一个锻炼。

目标与总体方案

(1)用图形用户界面实现游戏界面,同时通过设置布局,背景,字体等来丰富界面,最大程度的模拟龟兔赛跑的场景。

(2)能设置比赛时间,龟兔的数量等等,实现对比赛中龟兔的数量,比赛时间等参数的设置。

(3)在任意时间段内龟兔的速度是随机的,为了模拟龟兔赛跑结果的不确定性,在游戏开始后乌龟和兔子的速度都是通过随机函数产生的,保证兔子比乌龟速度要快,兔子在赛跑途中看到乌龟落后下会偷懒睡觉的前提下给予乌龟,兔子以随机的速度,从而使得游戏的结果不确定,给用户更多的游戏的真实感。

(4)开始比赛之后以动画显示赛跑过程,用户进入游戏界面后,先选择游戏模式,然后单击开始按钮,乌龟和兔子将会以随机的速度开始朝终点线爬行,通过重复刷新技术达到动画效果,给用户更逼真的感官。

(5)系统的开发可以采用Java语言来实现;

(6)在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。

设计方法和内容

硬件环境:

一台清华同方电脑,其配置为:

CPU:

Intel(R)Core(TM)i5-4570内存:

4G硬盘:

500G主板:

4260LA-2922P

软件环境:

Windows7旗舰版版本2009ServicePack1,并且安装了可供编程的eclipse-standard-kepler-SR1-win32

赛跑的过程是两个比赛对象并行前进的过程,考虑到应用需求,我们可以利用多线程技术,所谓多线程就是指同时存在几个执行体,按几条不同的执行线索共同工作的情况,这与要求刚好吻合,Java语言对多线程提供强大的支持。

用直观图形描述龟兔赛跑前进过程:

每过一秒,兔子走过的文本框中增加三个“#”号,乌龟走过的路程文本框中增加一个“#”号。

跑完路程结束线程,并显示各自跑完全程总共用的时间。

一、设计分析

第一步:

设计良好游戏界面

功能:

实现基本的开始、退出游戏功能、选择游戏模式等。

基本步骤:

在其上添加

在实现过程中会遇到的问题及解决方案:

1、背景面板上加载图片时需要重写paintComponent方法

2、布局必须合理设置(GridLayout不能改变组件的具体位置但可以缩放时相对位置不变。

FlowLayout默认是占满第一行转向第二行,并且放大时相对位置改变。

Null布局可以自由布置组件位置和大小,但不易实现窗口放大时相对大小随之变化。

)若设置不合理,就可能出现多种错误。

列如:

无法插入背景图片,组建不能显现,组件位置与设计不符等等。

3、添加背景面板监听重置各面板位置才能实现窗口放大时的相对位置不变

第二步:

线程类的设计

功能:

实现多只乌龟,兔子的多线程运行

具体步骤:

第二步会遇到的问题及解决方案:

1、建立兔子线程,继承接口Runnable并正确的实现run()方法。

同时要特别注意兔子在比赛中还要模拟睡觉的动作。

2、建立乌龟线程,继承接口Runnable并实现其run()方法,要与兔子多线程运行;

3、为了实现可选择多只龟兔进行赛跑,要实现多个兔子,乌龟线程,并能并发运行。

4、游戏中提供了模式选择的功能,通过建立ItemSelect类来建立不同的游戏模式。

二、各模块的功能及程序说明

龟兔赛跑程序主要由以下几个模块构成:

模块一:

初始图形界面模块

publicclassRRTTextendsAppletimplementsActionListener

{Graphicsg;

Panelpanel;

Labellabel1,label2,label3;

Buttonbutton1,button2;

RabTor1rabTor1;

publicvoidinit()为兔子定义随机速度

x1=x1+(int)()*30);

2.兔子动的实现方法

if("rabbit")&&x1<=800)

intt1=0,t2=0;

str1="rabbit";

x1=x1+(int)()*30);

rab_time=rab_time+1;

rab_road+=(int)()*25);

3.兔子获得一个随机的时间睡眠(0—30秒)

str1="乌龟跑这么慢,我先睡一会";

str2="哼,别以为自己是兔子就了不起!

你就睡吧!

";

rabbit=getImage(getCodeBase(),"");

try

{t1=(int)()*30000);

().sleep(t1);}

catch(InterruptedExceptione){}

模块三:

乌龟线程模块

该模块主要是实现乌龟运行线程,类TortoiseThread继承了接口Runnable并实现其方法run(),主要功能的实现:

乌龟移动实现的方法!

elseif("tortoise")&&x2<=600)

{

x2+=(int)()*20);

tor_road+=(int)()*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="就快到终点了,我要坚持下去,坚持就是胜利!

";}

通过随机函数实现乌龟随机速度爬行。

模块四:

画布界面的设置与布局

classImagecanvasextendsCanvas

{

Toolkittool;

Imageimage1;

Imagecanvas()

{setSize(800,500);

tool=getToolkit();

image1=("");

}

publicvoidpaint(Graphicsg)

{(image1,10,10,(this),(this),this);

}

publicImagegetImage()

{returnimage1;

}

}

三、操作方法及试验结果:

(第一局比赛开始)(兔子领先)

(兔子胜利)(第二局比赛开始)

(兔子中途睡觉)(乌龟反超兔子,最终胜利)

本系统是一个基于多线程模式的龟兔赛跑小游戏,系统的规模很有限,功能实现也相对简单,但作为一个完整的系统,在整个过程中我还是学到了不少的知识,也对java语言有了较深的体会。

通过本次课设试验,我对java的熟练程度得到了很大的提升,对包括多线程在内的java语言高级技术掌握的也更加熟练了,更对面向对象的分析思想,面向对象的设计方法有了直观的体会。

同时,在游戏的制作过程中要用到很多课本上并未介绍到的知识,例如多线程队列事件等等,通过网络学习和与老师同学的交流使得自己对该部分的知识有了更广泛更深刻的体会。

当然本次课设,通过我不断的尝试,不断的修改错误,解决问题,终于明白了程序员生活中天堂与地狱的感觉是什么了。

虽然这个过程很苦,但我对java的熟练程度得到了很大的提升。

同时,在游戏的制作过程中要用到很多课本上并未介绍到的知识,如当我遇到如何在一个Japplet类中创建另外一个Applet类的对象并运行线程的问题时,我纠结了很久没能找到解决办法,最终通过上网XX,不断尝试,不断错,在不断改,终于解决了。

通过网络学习使得自己对该部分的知识有了更广泛更深刻的体会。

这次的课程设计时间有点短,仅有二周的时间。

在调试过程中屡调屡败的状态下,老师给了我热情的帮助,老师指导我们调试程序,说哪些是错的,哪些是多余的,哪些是必要的,一个杂乱无章的程序被修改得有条不紊,很显然结果也是最最正确的。

本次系统的功能相对还比较单一,只能选择两种游戏模式,并且游戏也相对单调,缺乏趣味性,离一个真正的游戏软件还相差很远,以后如有时间,可以考虑去做一个真正的游戏软件。

设计创新与关键技术

设计创新

1、用图形用户界面实现游戏界面;

通过使用java中Jlabel,Jbutton,JtextArea,JcomboBox等swing组件来实现图形用户界面,同时通过设置布局,背景,字体等来丰富界面,最大程度的模拟龟兔赛跑的场景。

2、能设置比赛时间,龟兔的数量等等。

通过组合框组件的使用以及事件的订阅来实现用户对不同游戏模式的选择,在本程序中只是简单的设计了两种游戏模式供用户选择,也一定程度上实现了对比赛中龟兔的数量,比赛时间等参数的设置。

3、在任意时间段内龟兔的速度是随机的。

为了模拟龟兔赛跑结果的不确定性,在游戏开始后乌龟和兔子的速度都是通过随机函数产生的,当然,我们会在保证兔子比乌龟速度要快,兔子在赛跑途中看到乌龟落后下会偷懒睡觉的前提下给予乌龟,兔子以随机的速度,从而使得游戏的结果不确定,给用户更多的游戏的真实感。

4、开始比赛之后以动画显示赛跑过程。

用户进入游戏界面后,先选择游戏模式,然后单击开始按钮,乌龟和兔子将会以随机的速度开始朝终点线爬行,通过java中重复刷新技术达到动画效果,给用户更逼真的感官。

关键技术

游戏中提供了模式选择的功能,通过建立ItemSelect类来建立不同的游戏模式。

建立兔子和乌龟线程,继承接口Runnable并正确的实现run()方法。

结论

程序的语法错误很容易查找和修改,但找出了语法错误并不代表程序已经完成。

很多编译错误是由于函数名或变量名等程序对象的拼写错误引起的。

在编写程序的过程中,需要认真仔细,以免出现拼写错误,增加调试程序的工序,浪费不必要的时间和精力。

?

在这个过程中,我收获颇多,不仅理论知识掌握的更牢,实际动手能力也有所提高,再次让我感受到Java语言强大的功能,更激发了我Java语言的兴趣。

如果说以前的编程仅仅是按照课本的要求进行的,那这个课程设计难度就提高了一个级别,它让们将所知道的知识联系到了一起,更加显示了程序的强大。

致谢

首先我要感谢我的老师在课程设计上给予我们的指导和提供给我们的支持和帮助,这是我们能顺利完成这次课程设计的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我们能把程序做得更加完善。

在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。

其次,我要感谢曾经帮助过我的同学,他们也为我解决了不少我不太明白的设计语言,和一些细节上的差错。

本次设计是在高贤强老师的悉心指导下完成的,老师渊博的知识,严谨的治学态度,一丝不苟的工作作风,平易近人的性格都是我们学习的楷模。

在论文的整理期间,高老师给了我们很多的意见和指导,才使得论文得以顺利的完成。

最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。

在此,我诚心的对所有帮助过我的老师同学们说一句:

谢谢!

参考文献

[1]丁振凡《Java语言使用教程》.北京邮件大学出版社,

[2]丁振凡《Java语言使用教程实验指导》.北京邮件大学出版社,

[3]BruceEckel《Java编程思想》.机械工业出版社

[4]耿祥义《JAVA2实用教程》.清华大学出版社

[5]陈国君《java程序设计基础》(第二版)清华大学出版社

[6]刘艺,吴英.《Java程序设计大学教程》[M].北京:

科学出版社,2005年.

[7]赵文靖.《Java程序设计基础与上机指导》.北京:

清华大学出版社,2006年.

[8]吴其庆.《Java程序设计实例教程》.北京:

冶金工业出版社,2006年.

[9]耿祥义,张跃平.《Java基础教程》(第2版)[M].北京:

清华大学出版社,2007年.

[10][美]BruceEckel.ThinkingInJava.英文第4版.北京:

机械工业出版社,2007

[11]杨昭编着.二级Java语言程序设计教程.北京:

中国水利水电出版社,2006

[12]赵文靖编着.Java程序设计基础与上机指导.北京:

清华大学出版社,2006

[13]张海藩.软件工程导论(第四、五版)[M].北京:

清华大学出版社,?

2008.?

[14]CayS?

and?

Gary?

C.?

Java2核心技术(卷?

1:

?

基础知识)[M].机械工业出版社,2003.

[15]邓光伟,李阿午,朱志.Java2核心技术(卷2:

高级特性)[M].机械工业出版社,2000.

[16]Watson?

K,Nagel?

C,齐立波.C#入门经典[M].清华大学出版社,2002.?

[17]张广彬,孟红蕊,张永宝.C++课程设计案例精编[M].清华大学出版社,2005.

[18]朱喜福.C++程序设计[M].人民邮电出版社,2005.?

[19]宛延闿.实用C++程序设计教程[M].机械工业出版社,2006.

附录

源程序

packagesxx;

import.*;

import.*;

@SuppressWarnings({"unused","serial"})

classImagecanvasextendsCanvas

{

Toolkittool;

Imageimage1;

Imagecanvas()

{setSize(800,500);

tool=getToolkit();

image1=("");

}

publicvoidpaint(Graphicsg)

{(image1,10,10,(this),(this),this);

}

publicImagegetImage()

{returnimage1;

}

}

/*publicclassframeextendsFrameimplementsActionListener

{

Panelpanel;

Labellabel1,label2,label3;

Buttonbutton1,button2;

RabTor1rabTor1;

frame()

{

panel=newPanel();

(newFlowLayout());

label1=newLabel("欢迎使用该软件,版本,不足之处,请多多指教!

");

label2=newLabel("*****东瑞制作*****程序员*****孙肖肖******");

label3=newLabel();

button1=newButton("进入游戏");

button2=newButton("退出游戏");

(this);

(this);

pg");if");

tortoise=getImage(getCodeBase(),"乌龟.jpg");

zhongdian=getImage(getCodeBase(),"乌龟赢了.png");

tortoise2=getImage(getCodeBase(),"小乌龟.jpg");

rabbit2=getImage(getCodeBase(),"兔子在前.jpg");

abbit是线程的名子.

Threadtor=newThread(this,"tortoise");

();av");

("-————背景音乐————鲁晶晶制作",30,30);

();

booleanstop=false;制兔子,龟什么时候停!

while(!

stop)

{

try

{

();

(1000);}

catch(InterruptedExceptionex)

{}

StringthreadName=().getName();if("rabbit")&&x1<=800)pg");

}

if(x1>=120&&x1<=130)

{

str1="乌龟跑这么慢,我先睡一会";

str2="哼,别以为自己是兔子就了不起!

你就睡吧!

";

rabbit=getImage(getCodeBase(),"兔子睡觉.jpg");

try

{

t1=(int)()*30000);

();

(t1);

}

catch(InterruptedExceptionex)

{}

rab_time+=(double)t1/1000;

}

if(x1>140)

{rabbit=getImage(getCodeBase(),"");}

if(x1>=240&&x1<=250)

{str1="乌龟跑这么慢,让我再睡一会吧";

str2="哼,别以为自己是兔子就了不起!

你就睡吧!

";

rabbit=getImage(getCodeBase(),"兔子睡觉.jpg");

try

{

t2=(int)()*20000);

();

(t2);

}

catch(InterruptedExceptionex)

{}

rab_time+=(double)t2/1000;

}

if(x2>=600&&x1<600)pg");//换图片

str2="我要坚持!

";//乌龟继续跑

}

if(x1>=600&&x2>=570)

{stop=true;

str2="虽然我失败了,但我并不会气馁!

"+"总用时(秒):

"+tor_time;

}

}

elseif("tortoise")&&x2<=600)//乌龟移动实现的方法!

{

x2+=(int)()*20);

tor_road+=(int)()*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="就快到终点了,我要坚持下去,坚持就是胜利!

";

}

if(x2>=600&&x1<600)

{

i=2;

str2="我到终点啦!

总用时(秒):

"+tor_time;

str1="不!

这一局不算数,我刚才睡觉了才输的,在比一局的话,我肯定能赢!

";

stop=true;

repaint();

newImagecanvas();

}

}

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2