软件技术毕业设计(论文)-基于C语言或JAVA语言实现的五子棋游戏.doc_第1页
软件技术毕业设计(论文)-基于C语言或JAVA语言实现的五子棋游戏.doc_第2页
软件技术毕业设计(论文)-基于C语言或JAVA语言实现的五子棋游戏.doc_第3页
软件技术毕业设计(论文)-基于C语言或JAVA语言实现的五子棋游戏.doc_第4页
软件技术毕业设计(论文)-基于C语言或JAVA语言实现的五子棋游戏.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

学号: XXXXXX 大学大学 毕毕业业设设计计论论文文 题目: 基于 C 语言或 JAVA 语言 实现的五子棋游戏 专 业: 软件技术 班 级: 学生姓名: 导师姓名: 起止时间: *计算机学院 2 摘 要 五子棋,是一种两人对弈的纯策略型棋类游戏,亦称“串珠” 、 “连五子” ;是中国民 间非常熟知的一个古老棋种。相传,它起源于四千多年前的尧帝时期,比围棋的历史还 要悠久。 五子棋游戏容易上手,老少皆宜,而且趣味横生,引人入胜;它不仅能使人娱乐, 也能够开发人的智力,而且富含哲理,有助于修身养性。 本文主要讲的是用 Eclipse 开发工具与 Java 开发语言开发的一个直观大方的自定义 界面的带部分 AI 功能的五子棋游戏,游戏程序实现人机对弈和人人对弈,自动智能计算 最佳落子位置,而且程序能够自动的判定游戏的获胜方和游戏的结束与否,实现对战双 方顺利进行博弈。 关键词:Eclipse 游戏 Java 人机对弈 五子棋 Abstract Gobang is a two-type board game of pure strategy, also known as even five sons is a very well-known Chinese folk kind of an old chess. According to legend, it originated in the period of four thousand years ago, Emperor Yao, but also a long history of more than chess. Gobang easy to use, all ages, and amusing, fascinating; it not only makes fun, but also to develop human intelligence, and rich in philosophy will help self-cultivation. This article is primarily concerned with the Eclipse development tools and java programming language developed an intuitive interface and generous custom backgammon game, chess games and everyone to achieve human-computer chess, the program can automatically determine the winner the game and the game the end or not, the two sides to achieve Battle Game. 3 Key words: Eclipse Games Java Human chess Gobang 目 录 摘摘 要要 .2 前前 言言 .4 1 1概述概述.5 1.1程序开发语言.5 1.2开发平台.5 1.2.1开发环境.5 1.2.2运行环境.5 2 2开发设计开发设计.6 2.1概要设计.6 2.1.1流程图:.6 2.1.2功能分析:.7 2.2详细设计.7 3 3功能测试及运行效果功能测试及运行效果.13 3.1游戏主界面.13 3.2游戏落子控制界面.13 3.3游戏输赢判定控制界面.14 3.4结论.14 3.5几点补充说明.15 总总 结结 .16 致致 谢谢 .17 参考文献参考文献 .18 4 前 言 计算机已经深入到人们日常工作和生活的方方面面,各程序软件也逐渐进 入大众的视野,并开始影响人们的工作生活,与计算机相关的产业进入快速发 展期。 作为一名学生,特别是软件技术专业的程序编程学生,在系统的学习了一 些编程语言之后,更加觉得自己应该多动手编程,做实训项目。不进行实际的 操作,很难在编写程序上有进步!编写自己的软件,即使是小程序,你也会向 前迈进一大步。我个人比较喜欢 Java,可以说我通过这次设计,把所学的各项 技能很好的整合在一起。又一次感受到了编程的乐趣,从中也学到了不少知识 技巧,向前迈进了一大步! 5 1概述 程序开发选用功能强大的 Eclipse 开发工具和 SUN 公司的 jdk-6u20- windows,其中 Eclipse 是一个开源的、基于 Java 的可扩展开发平台,它是辅 助开发一个框架和一组服务,用于通过插件组件构建开发环境。而且 Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT) ,更有利于程序开发。 1.1程序开发语言 Java 是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的 安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。当 1995 年 SUN 推出 Java 语言之后,全世界的目光都被这个神奇的语言所吸引! Java 语言的强大是我选择这门语言的主要原因,当然我个人也对 Java 比 较感兴趣。 1.2 开发平台 1.2.1开发环境 通过 Eclipse 可扩展开发平台编辑系统程序,因为用功能强大的开源工具 Eclipse 来开发,相对较为方便,eclipse 比较通用,而且支持很多插件,大大 的减少工作量。然后再通过 jdk-6u20-windows 编译运行程序,这样开发的程序 比较好。 1.2.2运行环境 能够正常使用的 Windows XP,对系统配置的要求不是很高,中等的电脑配 置都可以很好的运行了,当然高配置效果会更好。安装了 Java 的开发平台 Java 2 Standard Edition (J2SE),带运行环境(JRE) ,并能正常使用,就能 够正常运行,如果安装了 Eclipse 那就更好。 6 2开发设计 2.1概要设计 2.1.1流程图: N Y N Y N Y 初始化棋盘 默认人机对弈 人人对弈 黑棋先下 横竖斜有五个同 色棋子相连 黑棋 下棋 输出:黑方胜利!输出:白方胜利! 开始 7 2.1.2功能分析: 程序主窗体设计简洁得体,布局合理,五子棋游戏的基本功能齐全。 菜单中的“新游戏”能够实现五子棋游戏开始、清盘,当玩家不想玩该局 时可以点击该项重新开始。 游戏默认模式为人机对弈,可以手动更改对弈模式,点击游戏模式可以 实现更改对弈模式。游戏默认为黑棋先下! 游戏人机对弈能够实现每一步都通过计算最佳落子位置,然后做出相 应的操作,玩家要赢有难度! 程序有很好的退出关闭功能。 程序编程规范,具有良好的编程风格。 2.2详细设计 整个程序创建建了两个类 WZQ 类和 MainPanel 类,主要是通过 WZQ 类实现, MainPanel 类辅助控制来达到预期目的。 WZQ 类继承 JFrame 并且实现监听,创建类方法() ,且通过类 方法加载各组件并显示于窗体上。然后调用 MainPanel 创建棋盘。 关键代码: panel = new MainPanel1515; for (int i = 0; i panel.length; i+) for (int j = 0; j paneli.length; j+) panelij = new MainPanel(); centerPanel.add(panelij); panelij.addMouseListener(this); 判断输赢模块 public void isWin(MainPanel panel) ,联系 到各个模块,它是判定控制模块,凸显重要性。判断是否有一方已经取胜,再 执行下一步操作。关键代码: 8 int i, j, sum_chess; for (i = 0; i panel.length; i+) / 判断每一行是否有五个黑子或白子连在一起 for (j = 0; j paneli.length - 4; j+) sum_chess = panelij.chess + panelij + 1.chess + panelij + 2.chess + panelij + 3.chess + panelij + 4.chess; if (sum_chess = 5) / 如果是有 5 个白子连在一起,则显示白棋胜利的提示框 dia1.setVisible(true); addComputer = false; else if (sum_chess = -5) / 如果是有 5 个黑子连在一起,则显示白棋胜利的提示框 dia2.setVisible(true); addComputer = false; 整个系统最为关键的控制模块为判定执行(人机对弈)模块: public void computerDo(MainPanel panel) ,它是系统 AI 的核心。它 是通过准确的判定,四子相连,三子相连,两子相连,一个棋子,得出最佳落 子位置,再执行落子操作!关键代码: for (i = 0; i panel.length; i+) / 判断电脑的白子在一行上是否有四个相连 for (j = 0; j paneli.length - 3; j+) sum_chess = panelij.chess + panelij + 1.chess + panelij + 2.chess + panelij + 3.chess; if (sum_chess = 4) start_x = i; start_y = j - 1; 9 end_x = i; end_y = j + 4; if (panelstart_xstart_y.chess = 0) panelstart_xstart_puter_do = true; panelstart_xstart_y.repaint(); isDo = true; dia1.setVisible(true); System.out.println( 判断电脑的白子在一行上是否有四个相连的); break; else if (panelend_xend_y.chess = 0) panelend_xend_puter_do = true; panelend_xend_y.repaint(); isDo = true; dia1.setVisible(true); System.out.println( 判断电脑的白子在一行上是否有四个相连的); break; 严格的条件控制,防止程序达不到预期目的。关键代码: if (!isDo) for (i = 0; i panel.length - 3; i+) / 判断每一列是否有四个电脑的白子连在一起 for (j = 0; j paneli.length; j+) sum_chess = panelij.chess + paneli + 1j.chess + paneli + 2j.chess + paneli + 3j.chess; if (sum_chess = 4) 10 start_x = i - 1; start_y = j; end_x = i + 4; end_y = j; if (panelstart_xstart_y.chess = 0) panelstart_xstart_puter_do = true; panelstart_xstart_y.repaint(); isDo = true; dia1.setVisible(true); System.out.println( 判断电脑的白子在一列上是否有四个相连); break; else if (panelend_xend_y.chess = 0) panelend_xend_puter_do = true; panelend_xend_y.repaint(); isDo = true; dia1.setVisible(true); System.out.println( 判断电脑的白子在一列上是否有四个相连); break; 弹出信息控制项。关键代码: if (e.getSource() = button1) dia1.setVisible(false); new WZQ(); frame.setVisible(false); 11 / 刷新屏幕,防止开始游戏时出现无法显示的情况. this.repaint(); else if (e.getSource() = button2) dia2.setVisible(false); new WZQ(); frame.setVisible(false); / 刷新屏幕,防止开始游戏时出现无法显示的情况. this.repaint(); 菜单信息控制项。关键代码: else if (e.getSource() = newgame) new WZQ(); frame.setVisible(false); / 刷新屏幕,防止开始游戏时出现无法显示的情况. This.repaint(); else if (e.getActionCommand().equals(“退出”) System.exit(0); else if (e.getActionCommand().equals(“人人对弈”) addComputer = false; else if (e.getActionCommand().equals(“版本信息”) dia3.setVisible(true); MainPanel 类为辅助控制类,主要有该哪方落子和画棋子,关键代码: 12 super.paintComponent(g); this.setBackground(Color.lightGray); if (person_do | computer_do) if (mark = 0) g.setColor(Color.BLACK); g.fillOval(4, 4, 15, 15); chess = -1; mark = 1; else if (mark = 1) g.setColor(Color.WHITE); g.fillOval(4, 4, 15, 15); chess = 1; mark = 0; 13 3功能测试及运行效果 3.1游戏主界面 图 3-1 系统主窗口 点击菜单“游戏” ,出现如上游戏界面。 3.2游戏落子控制界面 图 3-2 落子情况 开始游戏后落子控制情况 14 3.3游戏输赢判定控制界面 图 3-3 输赢判定 游戏落子输赢判定控制情况 3.4结论 程序运行正常,各项功能正常,整个系统达到预期目的。不足之处程序 AI 计算落子边界控制做得不够好,有待改善! 15 3.5几点补充说明 考虑到程序的执行效率,人机对弈算法只对玩家的棋子进行了一步的推 测。 计算机在落子时选取的是最佳的落子位置,所以如果玩家需要开动脑筋 考虑清楚该在哪里落子,不然难有机会获胜! 人机对弈这个算法的开销很大,每一步落子都会考虑棋盘布局,又考虑 对手的落子,从而达到步步为营的目的。 程序还有很多地方需要完善,例如:人机对弈边界处理不是很好,有待 完善;还可以开发为网络对战游戏及完善游戏相关功能。 16 总 结 通过编写这个程序,我体会最为深刻的一点是系统架构和设计模式的重要 性。即使是对于一个再小的程序,你已经做过但忘了的,再做一次又何妨,代 码的组织和系统架构都是非常重要的,还因为这关系到日后的维护以及扩展。 在开始编写这个程序的时候,我很模糊,没有什么头绪,实在编写不下去 了。后来经过我详细了解,参阅相关资料,询问老师同学后,才慢慢做下来, 坚持下来。分析五子棋算法,把代码的有效地组织,即系统架构,然后开发出 这个简单的五子棋程序。 设计这个程序之后,我感觉自己不仅实际动手能力有所提高,更重要的是 进一步激发了我对专业知识的兴趣,是理论与实际得到一次很好的结合,并能 够结合实际存在的问题在专业领域内进行更深入的学习。 对于我们计算机专业的学生来说,实际能力的培养至关重要,而这种实际 能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。只有通过企业 式的实训,才会了解工作需要什么,自己要学什么。通过这次程序设计,使我 了解自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,从 而走上程序开发的专业道路。 17 致 谢 这次毕业设计的开发过程中,我特别感谢我的指导老师和我的同学好友对 我的支持鼓励和好心帮助。在这次开发过程中,我了解了许多有关程序员应该 具备相关专业知识,使我了解自身状况与实际需要的差距,知道自己要学的知 识,清楚地认识到自己努力的方向。我再次感谢你们! 18 参考文献 1 耿祥义、张跃平.Java 2 实用教程(第三版)M.北京:清华大学出 版社,2006 2 刘宏.实用 Java 程序设计M. 北京:清华大学出版社,2007 3 孙芳.Java 经典实例(第二版)M 北京:中国电力出版社 2009 毕业设计(论文)诚信声明书毕业设计(论文)诚信声明书 本人声明:本人所提交的毕业论文 是本人在指导教师指导下独立研究、写作的 成果,论文中所引用他人的无论以何种方式发布的文字、研究成果, 均在论文中加以说明;有关教师、同学和其他人员对本文的写作、 修订提出过并为我在论文中加以采纳的意见、建议,均已在我的致 谢辞中加以说明并深致谢意。 本论文和资料若有不实之处,本人承担一切相关责任。 论文作者: (签字) 时间: 年 月 日 指导教师已阅: (签字) 时间: 年 月 日 * 计 算 机 学 院 毕业设计(论文)任务书毕业设计(论文)任务书 学生姓名班 级学 号 开始日期 2009 年 10 月 完成日期2009 年 12 月 研究报告型 开发文档型 毕业设计 题目 开发设计型 任务与要求 指导教师(签字) 年 月 日 是 指 导 教 师 填 写 是否计算机专业学生毕业论文(设计)指导及范例 参考选题否 审核人(签字) 年 月 日 注:本任务书一式两份,一份交系保存,一份学生自己保存,毕业设计(论文)完成时按 规定装订到毕业设计(论文)中;“研究报告型”或“开发文档型” 或“开发设计型”栏目 中用“”标注。 毕业设计(论文)指导记录表毕业设计(论文)指导记录表 学生姓名: 专业: 学号: 题 目: 时时 间间毕业设计(论文)指导情况毕业设计(论文)指导情况指导教师(签名)指导教师(签名) 月 日 月 日

温馨提示

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

评论

0/150

提交评论