




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络课程设计报告题 目: 网络五子棋对战 学 院: 计算机科学与工程学院专 业: 软件工程 学生姓名: 学 号: 指导教师: 2012年 3月 9 日目录摘 要I第一章 概述11.1 开发背景11.2 课题意义1第二章 五子棋程序的介绍52.1 用户需求分析52.2 五子棋程序概要设计7第三章 五子棋的详细设计83.1 界面的实现及鼠标事件的监听83.2 按钮功能的实现113.3 棋子表示12 3.4 胜负判断.12第四章 五子棋软件测试18总结23参考文献25 摘 要随着经济的发展,社会竞争的激烈,现在社会进入了竞争的时代。上班族为了完成公司业务,每天超负荷的工作;学生为了不落后他人每天早起晚睡不断地学习,压力巨大。所以为了缓解大家的压力,使大家在工作、学习之余娱乐一下,活跃大脑,提高工作、学习效率,我本人设计了一个简易的五子棋游戏。本系统将利用五子棋游戏作为研究对象,在Windows平台下,运用java语言设计的一个能够实现人机对战的简单游戏。该系统涉及到人工智能方面的知识,而计算机博弈是人工智能研究的一个重要分支,其中还包括几个重要的搜索算法。只有通过一定的研究,才能实现五子棋的人机对战功能。关键词: 网络对战 ; 五子棋;第一章 概述1.1 开发背景随着计算机技术和互联网的飞速发展,游戏软件是当今世界发展最迅速,最有影响力,最有潜力与活力的领域之一电脑游戏的出现为人们提供了新的娱乐平台,丰富了人们的业余生活。因此与游戏有关的软件深受广大青少年的喜爱。随着近几年来软件技术的不断进步、不断发展,软件游戏的操作要求越来越简单而五子棋游戏的诞生更是吸引着不同年龄段的人群,无论男女老少都可以玩,都喜欢玩,而当前微型计算机已经是在广大人群中流行着,用电脑来下五子棋更是一种时尚。现在网络上出现了各种各样的五子棋软件,有大师级的、新手级的等等。所有这些都满足了不同人群的需要,所以当前五子棋越来越被许多人所熟悉。目前的五子棋程序的发展也非常快,从最初的双人发展到人机,然后到现在的网络对战,已经受到越来越多人的喜爱和重视。第二章 五子棋程序的介绍2.1 用户需求分析1.显示一个十五行十五列的五子棋棋盘。2.用鼠标点击棋盘上的交叉点处,则会准确地在该位置显示出棋子。3.玩家1为黑方先下棋,玩家2为白方。4.可以自动判断游戏是否结束,是否黑方或者是白方已经胜利,并且跳出对话框来提示玩家。5.在游戏棋盘上方会有一个游戏信息,这个游戏信息是用来提示当前是黑白双方的哪一方下子,玩家可以根据这个提示来下棋,而不会导致不清楚轮到哪一方下棋。6.可以重新开始游戏,在下棋时如果玩家点击结束按钮,则给出提示“对方已经结束游戏!”,然后如果玩家点击开始按钮,则给出提示“对方请求与你开始游戏,是否同意” ,若点击同意,则可以开始下棋,游戏中,若点击断开,则提示“连接已断开,请重新连接主机和客服端”通过上述用户需求,可以得出一个整体的设计方案,规定游戏的基本功能如下结构图2.2五子棋程序概要设计本五子棋游戏主要的有5大功能它们分别是:主机,客户端,开始,断开,结束。2.4图为软件功能结构图:五子棋游戏结束主机客户端开始断开图2.1软件功能结构图流程图开始菜单、显示棋盘连接主机AND客户端主机玩家先下棋在双方棋盘显示棋子位置,玩家1为黑子,玩家2为白子断开OR结束 NO对方下棋五子一线结束NO开始 YES玩家1胜利玩家2胜利玩家1? YESYESNO第三章 五子棋的详细设计3.1 界面的实现及鼠标事件的监听3.1.1 界面的生成界面包括棋盘,消息提示窗,还有菜单在创建完成一个基本窗口后,将棋盘加载进窗口界面,并加入菜单,就得到了一个简单的棋盘。public static void main(String args) Gobang gobang = new Gobang();gobang.setResizable(false);Dimension s = Toolkit.getDefaultToolkit().getScreenSize(); /获得屏幕对象,以便使窗体居中显示gobang.setSize(450, 500);gobang.setLocation(s.width - gobang.getWidth() / 2, (s.height - gobang.getHeight() / 2);gobang.setVisible(true);public Gobang() super(五子棋);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);menuEvent(); /添加各个菜单的事件监听器menuInit(); /设置各个菜单的Enable属性/添加棋子面板JPanel p1 = new JPanel(new BorderLayout();p1.add(mp, BorderLayout.CENTER);JPanel p2 = new JPanel(new GridLayout(15, 15);for (int i = 0; i 15; i+) for (int j = 0; j 0)g.drawLine(getWidth() / 2, 0, getWidth() / 2, getHeight() / 2);if (row 0)g.drawLine(0, getHeight() / 2, getWidth() / 2, getHeight() / 2);if (col 14)g.drawLine(getWidth() / 2, getHeight() / 2, getWidth(), getHeight() / 2);if (row = 3 & col = 3)g.fillRect(getWidth() / 2 - 2, getHeight() / 2 - 2, 5, 5);if (row = 3 & col = 7)g.fillRect(getWidth() / 2 - 2, getHeight() / 2 - 2, 5, 5);if (row = 3 & col = 11)g.fillRect(getWidth() / 2 - 2, getHeight() / 2 - 2, 5, 5);if (row = 7 & col = 3)g.fillRect(getWidth() / 2 - 2, getHeight() / 2 - 2, 5, 5);if (row = 7 & col = 7)g.fillRect(getWidth() / 2 - 2, getHeight() / 2 - 2, 5, 5);if (row = 7 & col = 11)g.fillRect(getWidth() / 2 - 2, getHeight() / 2 - 2, 5, 5);if (row = 11 & col = 3)g.fillRect(getWidth() / 2 - 2, getHeight() / 2 - 2, 5, 5);if (row = 11 & col = 7)g.fillRect(getWidth() / 2 - 2, getHeight() / 2 - 2, 5, 5);if (row = 11 & col = 11)g.fillRect(getWidth() / 2 - 2, getHeight() / 2 - 2, 5, 5);/设置棋子的直径w = (getWidth() = 5 | sumCol(row, col) = 5 | sumLr(row, col) = 5| sumRl(row, col) = 5) /胜负已分,但要判断是胜还是负String str = c = who ? 恭喜,你赢了! : 哈哈,你输了!;mp.setMessage(str);JOptionPane.showMessageDialog(Gobang.this, str, 五子棋, JOptionPane.INFORMATION_MESSAGE);gameOver();return true; else for (int i = 0; i 15; i+) for (int j = 0; j = 0; h-) if (prowh.f = prowcol.f) l = h; else break;for (int h = col + 1; h = 0; h-) if (phcol.f = prowcol.f) l = h; else break;for (int h = row + 1; h = 0; h-, h2-) if (h2 0)break;if (phh2.f = prowcol.f) l = h; else break;for (int h = row + 1, h2 = col + 1; h = 15)break;if (phh2.f = prowcol.f) r = h; else break;return r - l + 1;函数功能:返回右上角到左下角方向上的连子数private int sumRl(int row, int col) int l = row, r = row;for (int h = row - 1, h2 = col + 1; h = 0; h-, h2+) if (h2 = 15)break;if (phh2.f = prowcol.f) l = h; else break;for (int h = row + 1, h2 = col - 1; h 15; h+, h2-) if (h2 0)break;if (phh2.f = prowcol.f) r = h; else break;return r - l + 1;第四章 软件测试任何一个软件在投放市场使用之前,都要进行大量的测试。在测试阶段测试人员努力设计出一系列测试方案,目的却是为了“破坏”已经建造好的软件系统竭力证明程序中的错误,不能按照预定要求正确工作。这阶段的根本目的是尽可能多地发现并排除软件中隐藏的错误,最终把一个高质量的软件系统交给用户使用。本章主要是对该系统的功能进行了详细的测试,并对程序内部的数据进行了测试和修改。本系统软件界面有以下几个功能:主机,客户端,开始,断开,结束 点击“主机”按钮,如图一,点击客户端,如图二 图一 图二点击对方点击“结束”按钮, 当对方点击 开始时 当对方在游戏中点击 结束时当游戏结束,有一方获胜时 经过对界面各个功能按钮进行了测试,能够正常使用,操作简单易懂非常适合初学者娱乐、学习用。总结通过编写这个程序,我体会最为深刻的一点是系统架构和设计模式的重要性。即使是对于一个并不大的程序,代码的组织都是非常重要的,因为这关系到日后的维护以及扩展。这个游戏之中,有关网络Socket编程的知识都可以直接从无所不包的Internet上获取,但是对于系统的架构,却完全是自己的事情,几千上万行的代码需要通过合适的方法组织起来,使程序员编写代码更加有条理,更加符合软件工程的标准,这才是最重要的。对于代码的组织(也就是软件的架构)才是真正软件工业的核心部分,因为软件事实上是直接和经济挂钩的,因此我们必须在编写代码之前选择一种最为合适的方法来组织这些代码由于时间比较紧张,有一些功能实现的不理想,虽然还不那么完美,但我心里还是充满成就感.为了完成这个项目,我查阅了不少资料。由于我对java方面的知识了解的不多,所以也花很多的时间在学习,可以说是边学边用了。但我还是坚持下来并克服了种种困难,取得了理想的成果。通过这个课设,让我对网络套接字技术了解的更深入与透彻,对JAVA的图形用户界面设计,多线程程序设计,输入输出流等等知识的运用得到进一步提高,通过棋盘的设计,让我学会了图形的布局,对控件的运用理解更深入,其中最难得部分是各个功能的划分和线程之间的关系以及类之间的通讯问题。感谢老师的辛勤指导,还有我的朋友在课设过程中给了我学习上的巨大帮助,在此我表示我最衷心的感谢!参考文献1 朱福喜. Java语言基础教程M. 北京:清华大学出版社,2008年4月 4 贾蓉生等. Java 典型应用彻查1000例M. 北京:科学出版社,2009年7月5 聂庆亮. Java应用开发指南M. 北京:清华大学出版社,2010年1月附录:一些关键代码:/等待客户端连接的线程class WaitClient extends Thread /WaitClient类public void run() try ss = new ServerSocket(10000);s = ss.accept();out = new PrintWriter(s.getOutputStream(), true);in = new BufferedReader(new InputStreamReader(s.getInputStream();c_in = new Client_in(); /建立显示对方棋子的进程c_in.start();mp.setMessage(请你先下!);/连接成功后再设置这些属性t = true; /主机先下t2 = true; /对方已经准备好,这样才能下棋c = 1; /主机的棋子颜色为黑色1x = -1; /刚开始时对方还未下棋,所以置为-1y = -1;stop.setEnabled(true); catch (IOException ie) mp.setMessage(五子棋);menuInit();JOptionPane.showMessageDialog(Gobang.this, 创建主机失败!, 五子棋,JOptionPane.ERROR_MESSAGE);/此进程负责用socket的输入流(in)中的信息来显示对方下棋位置class Client_in extends Thread public void run() try while (true) int h = Integer.parseInt(in.readLine();int l = Integer.parseInt(in.readLine();/收到-1表示对方结束了游戏,-2表示对方开始了游戏,否则收到的是对方落子的行号if (h = -1) /如果结束菜单可用,则说明正在游戏中,可以弹出消息框;否则只是对方取消了开始,可不if (stop.isEnabled() mp.setMessage(五子棋);JOptionPane.showMessageDialog(Gobang.this, 对方已经结束了游戏!, 五子棋,JOptionPane.INFORMATION_MESSAGE);gameOver(); else if (h = -2) t2 = true;/如果自己还未准备好游戏(也就是还没
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学堂在线 人像摄影 章节测试答案
- 消防器材安全知识培训课件
- 军队文职人员招聘《仓库保管员》预测试卷一
- 2025年戒毒人民警察招录笔试预测试题及答案
- 2025年军队文职人员统一招聘笔试( 教育学)专项练习含答案
- 2025年村级红白理事会司仪招聘面试题库附答案
- 2025装饰工程公司的合同模板
- 地砖知识培训课件
- 2025关于建筑工程合同的模板
- 企业经营转让协议
- 2024年小学五年级数学教学工作总结样本(4篇)
- 2024-2025学年冀教版中考英语试题及答案
- 电信服务合同签订时间
- 2024-2025学年小学美术一年级上册(2024)人美版.北京(主编杨力)(2024)教学设计合集
- 公路工程车辆维修与保养考核试卷
- Z20名校联盟(浙江省名校新高考研究联盟)2025届高三第一次联考数学试题卷
- 高职汽修专业《新能源汽车技术》说课课件
- 十二经脉之足阳明胃经课件
- 预防老年痴呆症课件
- DL∕T 5161.5-2018 电气装置安装工程质量检验及评定规程 第5部分:电缆线路施工质量检验
- 离婚协议书范文下载(篇一)
评论
0/150
提交评论