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

下载本文档

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

文档简介

精品文档 0欢迎下载 目录目录 前言 0 工程概况 1 2 1 项目所用的时间 1 2 2 项目负责人 1 2 3 项目指导人 1 正文 1 3 1 设计的目的和意义 1 3 2 目标与总体方案 1 3 3 设计方法和内容 2 3 3 1 开发环境 2 3 3 2 设计方法 2 3 3 4 设计体会 8 3 4 设计创新与关键技术 8 3 4 1 设计创新 8 3 4 2 关键技术 9 3 5 结论 9 致谢 9 参考文献 10 附录 11 精品文档 第 1 页 共 19 页1欢迎下载 前言前言 在科技日新月异的今天 电脑成为人的生活中不可缺少的一部分 作为计算机专业的学生 应该充 分利用所学知识 把实际问题转移到电脑上去 通过电脑的编程 使复杂问题简单化 深奥问题浅显化 抽象问题具体化 在学过 Java 程序设计 语言后 我们对计算机有了更深的了解 Java 是一种简单的 跨平台的 面向对象的 分布式的 解释的 健壮的安全的 结构的中立的 可移植的 性能很优异的 多线程的 动态的语言 当 1995 年 SUN 推出 Java 语言之后 全世界的目光都被这个神奇的语言所吸引 Java 不同于一般的编译执行计算机语言和解释执行计算机语言 它首先将源代码编译成二进制字节码 bytecode 然后依赖各种不同平台上的虚拟机来解释执行字节码 从而实现了 一次编译 到处执行 的跨平台特性 本次课设我选择的是龟兔赛跑游戏的制作 这个游戏实际上主要是对我们 JAVA 学习中的线程部分的 考察 尤其是多线程的定义 运行等 同时还要保证游戏有一个真实的操作界面和人性化操作设计 在设计龟兔赛跑这个游戏中我也遇到了技术上的一些困难 但通过查阅资料 并且在老师的帮助下 最终问题得以解决 正如龟兔赛跑这个故事一样 虽然我们在技术上不是很优秀 但只要有乌龟一样坚 持不懈的精神 最终胜利到达终点 工程概况工程概况 2 1 项目所用的时间 从这个项目开始到结束总共历时 12 天 完成于 2015 年 6 月 19 日 2 2 项目负责人 孙肖肖 女 计算机科学与技术 17 4 学生 2 3 项目指导人 高贤强 男 信息工程学院教师 讲师 正文正文 3 1 设计的目的和意义 本设计要求学生开发一个龟兔赛跑游戏 主要是对学生多线程编程 游戏方案设计 游戏背景及动 漫制作等能力进行培养锻炼 同时还要求保证游戏有一个真实的操作界面和人性化操作设计 此外 学 生通过该题目的设计过程 可以初步应用软件系统的开发原理和开发方法 全面培养软件开发过程中的 精品文档 第 2 页 共 19 页2欢迎下载 分析 设计 编码 测试及文档规范书写的能力 得到软件工程的训练 提高解决实际问题的能力 1 有助于加深我们对 Java 程序设计这门课程的理解 我们在课堂上学的都是基础理论知识 对 于如何用程序语言来描述所学知识还是有一定的难度 通过课程设计 我们可以真正理解其内涵 2 有利于我们逻辑思维的锻炼 程序设计能直接有效地训练学生的创新思维 培养分析问题 解 决问题的能力 即使是一个简单的程序 依然需要学生有条不紊的构思 3 有利于培养严谨认真的学习态度 在程序设计的过程中 当我们输入程序代码的时候 如果不 够认真细心 那么就可能导致语法错误 从而无法得出运行结果 那么 这个我们反复调试 反复修改 的过程 其实也是对我们认真严谨治学的一个锻炼 3 2 目标与总体方案 1 用图形用户界面实现游戏界面 同时通过设置布局 背景 字体等来丰富界面 最大程度的模 拟龟兔赛跑的场景 2 能设置比赛时间 龟兔的数量等等 实现对比赛中龟兔的数量 比赛时间等参数的设置 3 在任意时间段内龟兔的速度是随机的 为了模拟龟兔赛跑结果的不确定性 在游戏开始后乌龟 和兔子的速度都是通过随机函数产生的 保证兔子比乌龟速度要快 兔子在赛跑途中看到乌龟落后下会 偷懒睡觉的前提下给予乌龟 兔子以随机的速度 从而使得游戏的结果不确定 给用户更多的游戏的真 实感 4 开始比赛之后以动画显示赛跑过程 用户进入游戏界面后 先选择游戏模式 然后单击开始按 钮 乌龟和兔子将会以随机的速度开始朝终点线爬行 通过重复刷新技术达到动画效果 给用户更逼真 的感官 5 系统的开发可以采用 Java 语言来实现 6 在基本要求达到后 可进行创新设计 如改善算法性能 友好的人机界面 3 3 设计方法和内容 3 3 1 开发环境 硬件环境 一台清华同方电脑 其配置为 CPU Intel R Core TM i5 4570 3 2GHz 内存 4G 硬 盘 500G 主板 4260LA 2922P 软件环境 Windows 7 旗舰版版本 2009 Service Pack 1 并且安装了可供编程的 eclipse standard kepler SR1 win32 3 3 2 设计方法 赛跑的过程是两个比赛对象并行前进的过程 考虑到应用需求 我们可以利用多线程技术 所谓多 线程就是指同时存在几个执行体 按几条不同的执行线索共同工作的情况 这与要求刚好吻合 Java 语 言对多线程提供强大的支持 用直观图形描述龟兔赛跑前进过程 每过一秒 兔子走过的文本框中增加三个 号 乌龟走过的 路程文本框中增加一个 号 跑完路程结束线程 并显示各自跑完全程总共用的时间 精品文档 第 3 页 共 19 页3欢迎下载 3 3 3 主体内容 一 设计分析 第一步 设计良好游戏界面 功能 实现基本的开始 退出游戏功能 选择游戏模式等 基本步骤 图图 3 3 3 13 3 3 1 基本步骤基本步骤 1 1 在实现过程中会遇到的问题及解决方案 1 背景面板上加载图片时需要重写 paintComponent 方法 2 布局必须合理设置 GridLayout 不能改变组件的具体位置但可以缩放时相对位置不变 FlowLayout 默认是占满第一行转向第二行 并且放大时相对位置改变 Null 布局可以自由布置组件位置 和大小 但不易实现窗口放大时相对大小随之变化 若设置不合理 就可能出现多种错误 列如 无 法插入背景图片 组建不能显现 组件位置与设计不符等等 3 添加背景面板监听重置各面板位置才能实现窗口放大时的相对位置不变 第二步 线程类的设计 功能 实现多只乌龟 兔子的多线程运行 具体步骤 在其上添加 精品文档 第 4 页 共 19 页4欢迎下载 图图 3 3 3 23 3 3 2 基本步骤基本步骤 2 2 第二步会遇到的问题及解决方案 1 建立兔子线程 继承接口 Runnable 并正确的实现 run 方法 同时要特别注意兔子在比赛中还要 模拟睡觉的动作 2 建立乌龟线程 继承接口 Runnable 并实现其 run 方法 要与兔子多线程运行 3 为了实现可选择多只龟兔进行赛跑 要实现多个兔子 乌龟线程 并能并发运行 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 中的初始化函数有类中构造函数的作用 最先调用 panel new Panel panel setLayout new FlowLayout label1 new Label 欢迎使用该软件 1 0 版本 不足之处 请多多指教 label2 new Label 东瑞制作 程序员 陈杰 label3 new Label 精品文档 第 5 页 共 19 页5欢迎下载 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 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 精品文档 第 6 页 共 19 页6欢迎下载 catch InterruptedException e 模块三 乌龟线程模块 该模块主要是实现乌龟运行线程 类 TortoiseThread 继承了接口 Runnable 并实现其方法 run 主 要功能的实现 乌龟移动实现的方法 else if threadName equals tortoise 通过随机函数实现乌龟随机速度爬行 模块四 画布界面的设置与布局 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 this this public Image getImage return image1 精品文档 第 7 页 共 19 页7欢迎下载 三 操作方法及试验结果 第一局比赛开始 兔子领先 精品文档 第 8 页 共 19 页8欢迎下载 兔子胜利 第二局比赛开始 兔子中途睡觉 乌龟反超兔子 最终胜利 3 3 4 设计体会 本系统是一个基于多线程模式的龟兔赛跑小游戏 系统的规模很有限 功能实现也相对简单 但 作为一个完整的系统 在整个过程中我还是学到了不少的知识 也对 java 语言有了较深的体会 通过本次课设试验 我对 java 的熟练程度得到了很大的提升 对包括多线程在内的 java 语言高级 技术掌握的也更加熟练了 更对面向对象的分析思想 面向对象的设计方法有了直观的体会 同时 在 精品文档 第 9 页 共 19 页9欢迎下载 游戏的制作过程中要用到很多课本上并未介绍到的知识 例如多线程队列事件等等 通过网络学习和与 老师同学的交流使得自己对该部分的知识有了更广泛更深刻的体会 当然本次课设 通过我不断的尝试 不断的修改错误 解决问题 终于明白了程序员生活中天堂与地狱的感觉是什么了 虽然这个过程很苦 但我对 java 的熟练程度得到了很大的提升 同时 在游戏的制作过程中要用到很多课本上并未介绍到的 知识 如当我遇到如何在一个 Japplet 类中创建另外一个 Applet 类的对象并运行线程的问题时 我纠结 了很久没能找到解决办法 最终通过上网百度 不断尝试 不断错 在不断改 终于解决了 通过网络 学习使得自己对该部分的知识有了更广泛更深刻的体会 这次的课程设计时间有点短 仅有二周的时间 在调试过程中屡调屡败的状态下 老师给了我热情的帮助 老师指导我们调试程序 说哪些是错的 哪 些是多余的 哪些是必要的 一个杂乱无章的程序被修改得有条不紊 很显然结果也是最最正确的 本次系统的功能相对还比较单一 只能选择两种游戏模式 并且游戏也相对单调 缺乏趣味性 离 一个真正的游戏软件还相差很远 以后如有时间 可以考虑去做一个真正的游戏软件 3 4 设计创新与关键技术 3 4 1 设计创新 1 用图形用户界面实现游戏界面 通过使用 java 中 Jlabel Jbutton JtextArea JcomboBox 等 swing 组件来实现图形用户界面 同 时通过设置布局 背景 字体等来丰富界面 最大程度的模拟龟兔赛跑的场景 2 能设置比赛时间 龟兔的数量等等 通过组合框组件的使用以及事件的订阅来实现用户对不同游戏模式的选择 在本程序中只是简单的 设计了两种游戏模式供用户选择 也一定程度上实现了对比赛中龟兔的数量 比赛时间等参数的设置 3 在任意时间段内龟兔的速度是随机的 为了模拟龟兔赛跑结果的不确定性 在游戏开始后乌龟和兔子的速度都是通过随机函数产生的 当 然 我们会在保证兔子比乌龟速度要快 兔子在赛跑途中看到乌龟落后下会偷懒睡觉的前提下给予乌龟 兔子以随机的速度 从而使得游戏的结果不确定 给用户更多的游戏的真实感 4 开始比赛之后以动画显示赛跑过程 用户进入游戏界面后 先选择游戏模式 然后单击开始按钮 乌龟和兔子将会以随机的速度开始朝 终点线爬行 通过 java 中重复刷新技术达到动画效果 给用户更逼真的感官 3 4 2 关键技术 游戏中提供了模式选择的功能 通过建立 ItemSelect 类来建立不同的游戏模式 建立兔子和 乌龟线程 继承接口 Runnable 并正确的实现 run 方法 3 5 结论 程序的语法错误很容易查找和修改 但找出了语法错误并不代表程序已经完成 很多编译错误是由 于函数名或变量名等程序对象的拼写错误引起的 在编写程序的过程中 需要认真仔细 以免出现拼写 错误 增加调试程序的工序 浪费不必要的时间和精力 在这个过程中 我收获颇多 不仅理论知识掌 握的更牢 实际动手能力也有所提高 再次让我感受到 Java 语言强大的功能 更激发了我 Java 语言的 兴趣 如果说以前的编程仅仅是按照课本的要求进行的 那这个课程设计难度就提高了一个级别 它让 精品文档 第 10 页 共 19 页10欢迎下载 们将所知道的知识联系到了一起 更加显示了程序的强大 致谢致谢 首先我要感谢我的老师在课程设计上给予我们的指导和提供给我们的支持和帮助 这是我们能顺利 完成这次课程设计的主要原因 更重要的是老师帮我解决了许多技术上的难题 让我们能把程序做得更 加完善 在此期间 我不仅学到了许多新的知识 而且也开阔了视野 提高了自己的设计能力 其次 我要感谢曾经帮助过我的同学 他们也为我解决了不少我不太明白的设计语言 和一些细节上的差错 本 次设计是在高贤强老师的悉心指导下完成的 老师渊博的知识 严谨的治学态度 一丝不苟的工作作风 平易近人的性格都是我们学习的楷模 在论文的整理期间 高老师给了我们很多的意见和指导 才使得 论文得以顺利的完成 最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学 在此 我诚心的 对所有帮助过我的老师同学们说一句 谢谢 参考文献参考文献 1 丁振凡 Java 语言使用教程 北京邮件大学出版社 2006 9 2 丁振凡 Java 语言使用教程实验指导 北京邮件大学出版社 2006 9 3 Bruce Eckel Java 编程思想 机械工业出版社 2007 6 4 耿祥义 JAVA2 实用教程 清华大学出版社 2009 5 5 陈国君 java 程序设计基础 第二版 清华大学出版社 6 刘艺 吴英 Java 程序设计大学教程 M 北京 科学出版社 2005 年 7 赵文靖 Java 程序设计基础与上机指导 北京 清华大学出版社 2006 年 8 吴其庆 Java 程序设计实例教程 北京 冶金工业出版社 2006 年 9 耿祥义 张跃平 Java 基础教程 第 2 版 M 北京 清华大学出版社 2007 年 10 美 Bruce Eckel Thinking In Java 英文第 4 版 北京 机械工业出版社 2007 11 杨昭编著 二级 Java 语言程序设计教程 北京 中国水利水电出版社 2006 12 赵文靖编著 Java 程序设计基础与上机指导 北京 清华大学出版社 2006 13 张海藩 软件工程导论 第四 五版 M 北京 清华大学出版社 2008 14 Cay S 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 精品文档 第 11 页 共 19 页11欢迎下载 附录附录 源程序源程序 package sxx 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 applet Applet import java applet AudioClip import URL SuppressWarnings unused serial class Imagecanvas extends Canvas Toolkit tool Image image1 Imagecanvas setSize 800 500 tool getToolkit 精品文档 第 12 页 共 19 页12欢迎下载 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 implements ActionListener Panel 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 Button 进入游戏 button2 new Button 退出游戏 button1 addActionListener this button2 addActionListener this label1 setText 欢迎使用该软件 1 0 版本 不足之处 请多多指教 label2 setText 东瑞制作 程序员 孙肖肖 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 200 setVisible true validate 精品文档 第 13 页 共 19 页13欢迎下载 public void actionPerformed ActionEvent e 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 Graphics 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 Applet 中的初始化函数有类中构造函数的作用 最先调用 backpic getImage getCodeBase 起跑 jpg 将图片对象与图片 绑定 rabbit getImage getCodeBase 兔子 gif tortoise getImage getCodeBase 乌龟 jpg zhongdian getImage getCodeBase 乌龟赢了 png tortoise2 getImage getCodeBase 小乌龟 jpg rabbit2 getImage getCodeBase 兔子在前 jpg rabbit3 getImage getBase 3 jpg 精品文档 第 14 页 共 19 页14欢迎下载 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 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 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 in

温馨提示

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

评论

0/150

提交评论