网络编程基础实训报告.docVIP

  • 45
  • 0
  • 约1.37万字
  • 约 20页
  • 2018-12-30 发布于广东
  • 举报
网络编程基础实训报告 题目:五子棋人机博弈游戏 院(系): 计算机与通信工程学院 专 业: 信息安全 姓 名: 班 级: 信息安全 学 号: 指导教师: 2012 年 10 月 12 日 目录 系统需求分析与总体设计 需求分析 问题描述 数据流程图 总体设计 开发背景 开发语言 总体功能设计 详细设计与系统实现 类和类的方法设计 类的设计 类的方法设计 系统测试 功能测试 总结 系统仍存在的不足 结论和体会 系统需求分析与总体设计 需求分析 问题描述 题目:五子棋人机博弈游戏 题目要求:实现五子棋游戏的人机博弈。要求:友好的人机图形化界面、方便的操作方式;自动判断输、赢或平;可选择黑白;可悔棋;可以基于人工智能方面的知识进行设计,如:启发式搜索、搜索函数的设置、α_β算法、知识的表示及知识库,推理机等。 五子棋简介:五子棋是起源于中国古代的传统黑白棋种之一。顾名思义,只要连成五子即可获得胜利。听上去好像很简单,但是不用技巧好似很难获胜的,这其中就有“活三”,“冲三”等等专业名词,这些我会在后续的程序中进行介绍。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见。 通过问题的描述,初步分析可得出此软件应具有以下的功能: 友好的界面,方面的操作方式——》可以快速开始游戏,功能明确而且界面明朗 自动判断输赢——》计算机可以根据棋子的状态判断胜负情况 可选择黑白——》可以先手下棋和后手下棋 可悔棋——》具有悔棋功能 计算机AI——》计算机需要具有一定的AI,需要AI攻守兼备 数据流程图 判断谁是先手玩家计算机AI:即算法数据流动很少,主要是在算法内部进行计算,实际进行交互的数据是没有的。 判断谁是先手 玩家 计算机AI:即算法 要求开始游戏 落子,33禁手 棋子坐标 玩家落子 是否再来一盘输赢判断 取最佳位置并落子(若不分胜负) 是否再来一盘 输赢判断 再来一盘 胜负已分 总体设计 开发背景 C#网络编程基础实训通过这个程序学习基本的c#网络编程。 语言选择 使用C#平台在设计人机界面时更人性化,画图工具也更为简洁易用。 具体功能设计 主要函数: 画棋子 画棋盘 先手判断 胜负判断 计算机AI算法(权值赋值,权值计算,找最大权值) 界面设计: 快速开始游戏 先手选择 悔棋,认输,电脑提示 棋子的坐标显示(计算电脑提示的附加功能) 帮助 这几个模块的重点是计算机AI算法的设计。在参阅了很多资料以后,我发现解决五子棋问题的算法非常之多,遗传算法,α—β剪枝算法等等,这些算法的特点是对后续步骤进行无数次的推演并一一评分,最后去评分最高的一种方案的第一步,在下完一子之后再进行算法计算,虽然AI非常聪明但是计算繁琐且计算时间其长无比。在网上发现的算法有更多的程序员是采用了权值计算的方法,具体来说就是根据每种情况每种可能对每个点都赋不同的权值,AI在判断应该进攻还是应该防守就是依靠权值的大小,权值最大的位置放棋子,采用这种方法虽然笨是笨了些,但是计算速度快,尤其是在棋盘比较小的时候(15*15棋盘),而且在对比中发现这种AI也很聪明。在速度和计算精度之间权衡之后,我准备选择计算权值的方法来做,如果时间仍有富裕的话再使用别的算法来计算并进行对比。 详细设计与系统实现 类和类的方法设计 类的设计(后面的方法设计也遵从这个顺序逐个进行详细注释) 棋盘类Chessboard 棋盘类主要实现对棋盘棋子,以及电脑和人下棋的显示,对虚拟棋盘的定义,对下棋路径的堆栈的初始化,对棋局的初始化。 棋子类 Stone 棋子类主要实现对棋子的画图操作。 计算机类Computer 计算机类是本程序的核心模块,主要实现计算机对每个棋子每个位置的权值赋值,对每个棋盘位置的权值计算,求最大权值。 规则类Rule 规则类主要实现对胜负平局的判断,对黑棋禁手的判断,对每个方向上的连子数的计算,对棋局判断是依据连子数计算的。 主函数类frmMain 主函数主要是对界面上每个按键的功能进行实现,另实现对鼠标的move和click事件的定义,获取鼠标的坐标。 类的方法的具体实现 Chessboard类中方法的实现 Chessboard中的

文档评论(0)

1亿VIP精品文档

相关文档