




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业论文(设计) 五子棋 学院、系计算机学院 专业名称计算机科学与技术 年级 学生姓名 指导教师 abstract As a puzzlegame ,gobangcan developthe thinkingabilityand intelligenceof players ,whichis interestingand absorbing 。The version of this software, includes two kinds of patterns, standalone modeandnetworkmode 。 Theformerusesa game-treesearch algorithm, whichcanonlypredictafollow-upmoveafter calculation。 Moreover,thenetworkmodeneedsto bebrought online, in other words, first need a player in a computer start game as the server-side, then the other enter the servers ip to connect and join game in anothercomputeras the client.Both modessupport undofunctions ,andthenetworkmodehasdrawandgiving -up function 。Whilenetworkgamingone playersendthe coordinate messageof piecesreceivedby another ,whichcallsfunctionsto dealwithmessage 。Beyondthat ,the game has alsobackground music and chat function。 1 五子棋 摘要 五子棋是一种益智游戏,它能增强玩家的思维能力,提高智力,而且趣 味横生,引人入胜。该版本的五子棋设置了两类模式,单机模式和网络模式。游戏中根 据网络连接标志来判断当前是网络对战还是人机对战。人机对战模式使用的是简单的博 弈树搜索算法,即只向前搜索一步,仅能预测到下一步会发生什么情况。网络对战模式 中一方先建立游戏,作为游戏的服务器端,对方输入服务器 IP 后加入游戏,作为客户 端。两种模式都有悔棋功能,网络对战还有认输、和棋请求的功能。发送五子棋消息主 要发送落子坐标,对方接受到消息后会调用相应的函数处理接收的消息。该游戏还设置 了声音背景,当玩家落子时会有落子的声音,当玩家胜了或输了都会有背景声音。另外 该游戏还设置了聊天功能,战绩统计等基本游戏功能,以方便对弈双方聊天和查看战绩 记录。 关键词 人机对战,网络对战,算法,消息 2 目录目录 第一章绪论 . 3 1.1 五子棋介绍 . 3 1.2 开发背景 . 4 1.3 开发环境及运行环境. 5 1.3.1 开发环境. 5 1.3.2 运行环境. 5 第二章逻辑架构与设计. 6 2.1 棋盘类 . 7 2.1.1 棋盘类主要成员变量说明. 7 2.1.2 棋盘类主要成员函数说明. 8 2.2 游戏模式类 . 9 2.2.1 游戏模式类主要成员变量说明. 10 2.2.2 游戏模式类主要成员函数说明. 10 第三章消息机制 . 13 3.1 消息机制的架构. 13 3.2 各种消息说明. 13 3.2.1 落子消息MSG_PUTSTEP . 13 3.2.2 悔棋消息MSG_BACK. 13 3.2.3 同意悔棋消息MSG_AGREEBACK. 14 3.2.4 拒绝悔棋消息MSG_REFUSEBACK . 14 3.2.5 和棋消息MSG_DRAW . 14 3.2.6 同意和棋消息MSG_AGREEDRAW. 14 3.2.7 拒绝和棋消息MSG_REFUSEDRAW . 14 3.2.8 认输消息MSG_GIVEUP . 15 3.2.9 聊天消息MSG_CHAT. 15 3.2.10 对方信息消息MSG_INFORMATION. 15 第四章 人机对战主要算法. 16 4.1 落子时是否构成五子连珠的算法. 16 4.1.1 判断水平方向是否构成五子连珠. 16 4.1.2 判断竖直方向是否构成五子连珠. 17 4.1.3 判断左下方向是否构成五子连珠. 17 4.1.4 判断右下方向是否构成五子连珠. 18 4.2 计算机落子时的算法6 . 19 4.2.1计算落子时的所有获胜可能性. 19 4.2.2落子后计算得分. 19 4.2.3查找棋盘上的空位置. 20 4.2.4为每一个可以落子的位置打分. 21 4.2.5防守策略. 21 4.2.6选取最佳落子. 21 总结 . 23 3 第一章第一章绪论绪论 1.11.1 五子棋介绍五子棋介绍 五子棋是起源于中国古代的传统黑白棋种之一。 它不仅能增强思维能力, 提高智力, 而且富含哲理,有助于修身养性。五子棋最先发展于日本,流行于欧美。它既有现代休 闲的明显特征,又有古典哲学的高深学问;它既有简单易学的特性,为人民群众所喜闻 乐见,又有深奥的技巧和高水平的国际性比赛。 传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为1515,棋子放置 于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5 个或 5 个以上同色棋子连成不间断的一排者为胜。 目前五子棋游戏有两种模式, 一种是网络五子棋游戏, 一种是单机五子棋游戏。 网络五子棋编程有两种实现方式: 一种是基于 C/S(Client/Server 即 C/S)模式;另 一种是基于 B/S(Brower/Server 即 B/S)模式。C/S 程序具有很好的交互性,功能很 强大,但是客户端必须安装客户端软件,限制了其应用; B/S 模式的程序要求客户端 必须装有浏览器,但是浏览器在安全性、交互性与功能方面有一些限制。目前网络五子 棋游戏大部分是在 C/S 模式下实现的,其功能不断的完善和加强,而且五子棋的博弈 算法研究达到了智能化的程度,并能实现了客户端和服务器端的多线程交互性。随着网 络协议这一关键性问题得到了解决和完善使网络游戏的设计和实现成为可能。 对于众多 的基层网络协议,Winsock(Windows Socket 即 Winsock) 是五子棋游戏网络连接 的首选接口。Winsock 是网络编程接口,而不是协议。Winsock 提供一个大家都很熟 悉的接口,为实现网络五子棋的功能得到了简化1。单机版的五子棋游戏省去了网络传 输这一复杂的过程,但是需要有力的算法支撑,算法的性能决定程序的性能,也能决定 游戏的难易程度。五子棋是一个比较特殊的游戏,跟象棋类的游戏很不一样,它只需要 判断有五子连珠就能决定胜负,因此在采用博弈树搜索模式时,只需要向前搜索一步, 找出最优的位置,基本就能满足程序的需求。 4 1.21.2 开发背景开发背景 五子棋是一款益智小游戏,对于玩家来说,该小游戏其乐无穷,引人入胜。对于开 发者来说,也具有一定的挑战和乐趣。随着Internet 的迅速发展,网络游戏迅猛发展, 国家也开始大力支持游戏产业,由于网络游戏的强大市场驱动力,它必将成为最有活力 的新文化事业。随着 Internet 的普及,互联网游戏作为网上娱乐的一个重要内容,是 互联网技术与互联网经营不可忽略的一个组成部分。 电子娱乐业在全球被认为是极有前 景的一项产业。在国内市场,游戏业潜力巨大,据统计显示,中国在2006 年一年时间 内就产生了大约 340 万新生玩家,游戏人口的整体数量接近 3750 万,其中 90%是网 络游戏玩家。随着互联网的发展,网络游戏的发展正成为新的互联网公司的主要业务方 向之一。网络游戏还可以降低游戏开发成本,有利于游戏成本的回收。面对游戏产业发 达国家的游戏企业有序、高效的进入中国市场的现状,国内的游戏公司由于不能有效沟 通合作,经常容易陷入孤立无援、内部竞争、竞相抬价,最终被各个击破的局面。近年 来,中国的游戏产业特别是网络游戏领域得到了长足发展,随着政府监管力度的不断加 强,各种法规、条例的不断出台,都表明中国游戏娱乐产业的春天就要到来了。因此开 发自主的网络游戏,是推动国内游戏娱乐产业的关键。目前,随着网络游戏用户日益增 多,网络游戏服务器端的设计显得尤为重要。首先,由于游戏数据日益增大,各服务器 间游戏数据的交互十分重要;其次,由于游戏外挂的日益猖獗游戏的可玩性和公平性都 受到了挑战。因此进行网络游戏的研究,无论对于游戏产业和现行游戏的开发都有积极 的意义。 近年来,中国的网络游戏产业高速增长,并成为增值服务外最赚钱的网络业务。随着 网络游戏产业的蓬勃发展,和国家政策对游戏产业的支持。网络游戏产业从而具有了广 阔的发展空间和发展前景。然而当今中国网络游戏市场,占主导地位的却是以日、韩为 代表的外国网络游戏,而国内厂家则基本上处于运营商地位。因此开发有自主产权网络 游戏产品是摆在国内游戏厂商面前的紧要任务。 国家体育总局在 2003 年已经把电子竞 技项目作为正式的体育项目,这为电子游戏产业带来了又一个契机,单机游戏和网络游 戏己经逐渐从民间组织走向职业化的道路上, 网络游戏正以每年市场份额翻倍的势态迅 猛发展。因此对网络游戏的开发和研究具有鲜明的现实意义。一是因为网络游戏有强大 的市场驱动力,而网络游戏产业是一个蓬勃发展的新兴市场,成功的网络游戏基本收益 5 率可高达八成。因此网络游戏的市场潜能十分巨大,对网络游戏模型的研究和开发就更 有其巨大的市场价值和经济利益。 二是开发具有自主知识产权的网络游戏对打破外国公 司在我国市场的技术垄断局面具有重大的意义。国家正在大力发展和扶持游戏产业,建 立国人网络游戏,则是改变当今市场外国网络游戏产品垄断市场的唯一出路。2 1.31.3 开发环境及运行环境开发环境及运行环境 1.3.11.3.1 开发环境开发环境 Microsoft Visual C+ 6.0 1.3.21.3.2 运行环境运行环境 64M 以上内存,4G 以上硬盘 Microsoft Window IP 操作系统 800*600 或以上的屏幕分辨率 6 第二章逻辑架构与设计 软件的逻辑架构如图 2.1 和图 2.2: 单机模式: 选择单机模式 走棋 电脑走棋玩家走棋 否否 找出最佳空位判断走棋是否正确 是 判断是否胜利 是 结束 图 2.1 单机模式 选择网络模式 建立服务器,客户端 走棋并判断是否落子正确 判断输赢并发送信息给对方 结束 图 2.2 网络模式 7 整个的下棋过程(无论对方是电脑抑或其他网络玩家)可以分为:自己走棋、等待 对手走棋、对手走棋后设置己方棋盘数据这一系列过程,因此一人游戏类、二人游戏类 和棋盘类共用一个棋盘类,以实现对两个不同模块中相同功能的操作。 2.12.1 棋盘类棋盘类 该类封装了棋盘的各种可能用到的功能,如保存棋盘数据、初始化、判断胜负等。 用户操作主界面,主界面与 CTable 进行交互来完成对游戏的操作。 2.1.12.1.1 棋盘类主要成员变量说明棋盘类主要成员变量说明 2.1.1.12.1.1.1 网络连接标志网络连接标志m_bConnectedm_bConnected 它是用来区分当前游戏模式的唯一标志,用来表示当前网络连接的情况,TRUE 时 表明网络连接成功,FALSE时默认为人机对战。 2.1.1.22.1.1.2 棋盘等待标志棋盘等待标志m_bWaitm_bWait与与 m_bOldWaitm_bOldWait 由于在玩家落子后需要等待对方落子,m_bWait 标志就用来标识棋盘的等待状态。 当 m_bWait 为 TRUE 时,是不允许玩家落子的。 2.1.1.32.1.1.3 网络套接字网络套接字m_sockm_sock 和和 m_connm_conn 在网络对弈游戏模式下,需要用到这两个套接字对象。其中 m_sock 对象用于做服 务器时的监听之用,m_conn 用于网络连接的传输。 2.1.1.42.1.1.4 棋盘数据棋盘数据m_datam_data 这是一个 15*15 的二位数组,用来保存当前棋盘的落子数据。其中对于每个成员来 说,0 表示落黑子,1 表示落白子,-1 表示无子。 8 2.1.1.52.1.1.5 游戏模式指针游戏模式指针m_pGamem_pGame 这个 CGame 类的对象指针是 CTable 类的核心内容。它所指向的对象实体决定了 CTable 在执行一件事情时候的不同行为,具体的内容请参见“游戏模式”一节。 2.1.22.1.2 棋盘类主要成员函数说明棋盘类主要成员函数说明 2.1.2.12.1.2.1 套接字的回调处理套接字的回调处理AcceptAccept、ConnectConnect、ReceiveReceive 本程序的套接字派生自 MFC 的 CAsjncSocket 类,CTable 的这三个成员函数就 分别提供了对套接字回调事件 OnAccept、OnConnect、OnReceive 的实际处理,其 中尤以 Receive 成员函数重要,它之中包含了对所有网络消息的分发处理。 2.1.2.22.1.2.2 清空棋盘清空棋盘ClearClear 在每一局游戏开始的时候都需要调用这个函数将棋盘清空, 也就是棋盘的初始化工 作。在这个函数中,主要发生了这么几件事情: 将 m_data 中每一个落子位都置为无子状态(-1) 。 按照传入的参数设置棋盘等待标志 m_bWait,以供先、后手的不同情况之用。 使用 delete 将 m_pGame 指针所指向的原有游戏模式对象从堆上删除。 2.1.2.32.1.2.3 绘制棋子绘制棋子DrawDraw 这无疑是很重要的一个函数,它根据参数给定的坐标和颜色绘制棋子。绘制的详细过程 如下: 将给定的棋盘坐标换算为绘图的像素坐标。 根据坐标绘制棋子位图。 如果先前曾下过棋子,则利用 R2_NOTIORPEN 将上一个绘制棋子上的最后落 9 子指示矩形擦除。 在刚绘制完成的棋子四周绘制最后落子指示矩形。 2.1.2.42.1.2.4 左键消息左键消息OnLButtonUpOnLButtonUp 作为棋盘唯一响应的左键消息,也需要做不少的工作: 如果棋盘等待标志 m_bWait 为 TRUE,则直接发出警告声音并返回,即禁止落 子。 如果点击时的鼠标坐标在合法坐标(0, 0)(14, 14)之外,亦禁止落子。 如果走的步数大于 1 步,方才允许悔棋。 进行胜利判断,如胜利则修改 UI 状态并增加胜利数的统计。 如未胜利,则向对方发送已经落子的消息。 落子完毕,将 m_bWait 标志置为 TRUE,开始等待对方回应。 2.1.2.52.1.2.5 绘制棋盘绘制棋盘OnPaintOnPaint 每当 WM_PAINT 消息触发时,都需要对棋盘进行重绘。OnPaint 作为响应绘制消 息的消息处理函数使用了双缓冲技术,减少了多次绘图可能导致的图像闪烁问题。这个 函数主要完成了以下工作: 装载棋盘位图并进行绘制。 根据棋盘数据绘制棋子。 绘制最后落子指示矩形。 2.22.2 游戏模式类游戏模式类 用来管理人机对弈/网络对弈两种游戏模式, 类名为 CGame。 CGame 是一个抽象类, 经由它派生出一人游戏类 COneGame 和网络游戏类 CTwoGame, 这样,CTable 类就可 以通过一个 CGame 类的指针,在游戏初始化的时候根据具体游戏模式的要求实例化 10 COneGame 或 CTwoGame 类的对象;然后利用多态性3,使用 CGame 类提供的公有接 口就可以完成不同游戏模式下的不同功能了。 2.2.12.2.1 游戏模式类主要成员变量说明游戏模式类主要成员变量说明 2.2.1.12.2.1.1 棋盘指针棋盘指针m_pTablem_pTable 由于在游戏中需要对棋盘以及棋盘的父窗口主对话框进行操作及UI状态设置, 故 为 CGame 类 设 置 了 这 个 成 员 。 当 对 主 对 话 框 进 行 操 作 时 , 可 以 使 用 m_pTableGetParent() 得到它的窗口指针。 2.2.1.22.2.1.2 落子步骤落子步骤m_StepListm_StepList 一个好的棋类程序必须要考虑到的功能就是它的悔棋功能, 所以需要为游戏类设置 一个落子步骤的列表。由于人机对弈和网络对弈中都需要这个功能,故将这个成员直接 设置到基类 CGame 中。另外,考虑到使用的简便性,这个成员使用了C+标准模板库4 (Standard Template Librarj,STL)中的 std:list,而不是 MFC 的 CList。 2.2.22.2.2 游戏模式类主要成员函数说明游戏模式类主要成员函数说明 2.2.2.12.2.2.1 悔棋操作悔棋操作BackBack 在不同的游戏模式下,悔棋的行为是不一样的。 人机对弈模式下,计算机是完全允许玩家悔棋的,但是出于对程序负荷的考虑, 只允许玩家悔当前的两步棋(计算机一步,玩家一步) 。 双人网络对弈模式下,悔棋的过程为:首先由玩家向对方发送悔棋请求(悔棋 消息) ,然后由对方决定是否允许玩家悔棋,在玩家得到对方的响应消息(允许 或者拒绝)之后,才进行悔棋与否的操作。 11 2.2.2.22.2.2.2 初始化操作初始化操作InitInit 对于不同的游戏模式而言,也就有不同的初始化方式。对于人机对弈模式而言,初 始化操作包括以下几个步骤: 设置网络连接状态 m_bConnected 为 FALSE。 设置主界面计算机玩家的姓名。 初始化所有的获胜组合。 如果是计算机先走,则占据天元(棋盘正中央)的位置。 网络对弈的初始化工作暂为空,以供以后扩展之用。 2.2.2.32.2.2.3 接收来自对方的消息接收来自对方的消息ReceiveMsgReceiveMsg 这个成员函数由 CTable 棋盘类的 Receive 成员函数调用,用于接收来自对方的 消息。对于人机对弈游戏模式来说,所能接收到的就仅仅是本地模拟的落子消息 MSG_PUTSTEP;对于网络对弈游戏模式来说,这个成员函数则负责从套接字读取对方 发过来的数据, 然后将这些数据解释为自定义的消息结构, 并回到 CTable:Receive 来进行处理。 2.2.2.42.2.2.4 发送落子消息发送落子消息SendStepSendStep 在玩家落子结束后,要向对方发送自己落子的消息。对于不同的游戏模式,发送的 目标也不同: 对于人机对弈游戏模式,将直接把落子的信息(坐标、颜色)发送给 COneGame 类相应的计算函数。 对于网络对弈游戏模式,将把落子消息发送给套接字,并由套接字转发给对方。 2.2.2.52.2.2.5 胜利后的处理胜利后的处理WinWin 这个成员函数主要针对 CTwoGame 网络对弈模式。在玩家赢得棋局后,这个函数 12 仍然会调用 SendStep 将玩家所下的制胜落子步骤发送给对方玩家,然后对方的游戏 端经由 CTable:Win 来判定自己失败。 13 第三章消息机制 Windows 系统拥有自己的消息机制,在不同事件发生的时候,系统也可以提供不同 的响应方式。五子棋程序也模仿Windows 系统实现了自己的消息机制,主要为网络对弈 服务,以响应多种多样的网络消息。 3.13.1 消息机制的架构消息机制的架构 当 CTable 获得了来自网络的消息之后, 就可以使用一个 switch 结构来进行消息 的分发了。如图 3.1 所示: 落子消息 悔棋消息 来自网络的消息 . . . . . . . . . . . switch 判断是哪个消息 和棋消息 认输消息 图 3.1 请求悔棋 3.23.2 各种消息说明各种消息说明 3.2.13.2.1 落子消息落子消息MSG_PUTSTEPMSG_PUTSTEP 表明对方落下了一个棋子,其中 i、j 和 color 成员有效,szMsg 成员无效。在 人机对弈游戏模式下,亦会模拟发送此消息以达到程序模块一般化的效果。 3.2.23.2.2 悔棋消息悔棋消息MSG_BACKMSG_BACK 表明对方请求悔棋,除 uMsg 成员外其余成员皆无效。接到这个消息后,会弹出 MessageBoi 询问是否接受对方的请求,并根据玩家的选择回返 MSG_AGREEBACK 或 14 MSG_REFUSEBACK 消息。 3.2.33.2.3 同意悔棋消息同意悔棋消息MSG_AGREEBACKMSG_AGREEBACK 表明对方接受了玩家的悔棋请求,除 uMsg 成员外其余成员皆无效。接到这个消息 后,将进行正常的悔棋操作。 3.2.43.2.4 拒绝悔棋消息拒绝悔棋消息MSG_REFUSEBACKMSG_REFUSEBACK 表明对方拒绝了玩家的悔棋请求,除 uMsg 成员外其余成员皆无效。接到这个消息 后,整个界面将恢复发送悔棋请求前的状态。 3.2.53.2.5 和棋消息和棋消息MSG_DRAWMSG_DRAW 表明对方请求和棋,除 uMsg 成员外其余成员皆无效。接到这个消息后,会弹出 MessageBoi 询问是否接受对方的请求,并根据玩家的选择回返 MSG_AGREEDRAW 或 MSG_REFUSEDRAW 消息。 3.2.63.2.6 同意和棋消息同意和棋消息MSG_AGREEDRAWMSG_AGREEDRAW 表明对方接受了玩家的和棋请求,除 uMsg 成员外其余成员皆无效。接到这个消息 后,双方和棋。 3.2.73.2.7 拒绝和棋消息拒绝和棋消息MSG_REFUSEDRAWMSG_REFUSEDRAW 表明对方拒绝了玩家的和棋请求,除 uMsg 成员外其余成员皆无效。接到这个消息 后,整个界面将恢复发送和棋请求前的状态。 15 3.2.83.2.8 认输消息认输消息MSG_GIVEUPMSG_GIVEUP 表明对方已经投子认输,除 uMsg 成员外其余成员皆无效。接到这个消息后,整个 界面将转换为胜利后的状态。 3.2.93.2.9 聊天消息聊天消息MSG_CHATMSG_CHAT 表明对方发送了一条聊天信息,szMsg 表示对方的信息,其余成员无效。接到这个 信息后,会将对方聊天的内容显示在主对话框的聊天记录窗口内。 3.2.103.2.10 对方信息消息对方信息消息MSG_INFORMATIONMSG_INFORMATION 用来获取对方玩家的姓名,szMsg 表示对方的姓名,其余成员无效。在开始游戏的 时候,由客户端向服务端发送这条消息,服务端接到后设置对方的姓名,并将自己的姓 名同样用这条消息回发给客户端。 16 第四章第四章 人机对战主要算法人机对战主要算法 在两个主机间玩该游戏时,不需要什么算法,只需要判断每一次落棋时是否赢了。 而在和电脑玩该游戏时,就需要设计一些算法。目前网络上流行的一些五子棋游戏都有 两类模式,一类是无禁手模式,即落子时没有任何限制,只要有空位置就可放置。另一 类是有禁手模式,即落子时有限制,不是每一个空位置都可以放置棋子的,国际上规定 的禁手有三三禁手、四四禁手、长连禁手5。由于我个人能力有限,对于禁手模式研究 的还不是很透彻,在此五子棋游戏中就没有设置禁手模式。 本五子棋游戏设计时,涉及的算法主要有两个,一个是判断输赢的算法,一个是电 脑落子时的算法。下面分别介绍这两个算法。 4.14.1 落子时是否构成五子连珠的算法落子时是否构成五子连珠的算法 五子连珠看起来很容易判断,只要判断在水平,竖直方向以及斜着的方向上是否有 同色的五颗棋子即可。 但在实际操作中, 判断起来却不是那么简单。 在该程序的判断中, 我采用了遍历的方式,从棋盘的左上角开始判断。依次进行水平,竖直,左下方向,右 下方向的判断。 4.1.14.1.1 判断水平方向是否构成五子连珠判断水平方向是否构成五子连珠 由于棋盘是 15*15 的规格,故需从上到下扫描每一行,每一行从第一个位置扫描到 第 11 个位置即可,后面四个无需扫描,因为不可能构成五子连珠。程序如下: for ( j = 0; j 15; j+ ) / 扫描每一行 for ( i = 0; i 11; i+ )/ 每一行从第一个位置扫描到第十一个位置 if ( color = m_dataij 4.1.24.1.2 判断竖直方向是否构成五子连珠判断竖直方向是否构成五子连珠 竖直方向上的判断和上面相似,从左到右扫描每一列,从上到下扫描第 1 到第 11 个棋盘的位置。原因与水平方向一样。程序如下: for ( j = 0; j 11; j+ ) / 扫描列的第一行到第十一行的位置 for ( i = 0; i 15; i+ ) /扫描每一列 if ( color = m_dataij 4.1.34.1.3 判断左下方向是否构成五子连珠判断左下方向是否构成五子连珠 由于当前判断的棋子约定的是第一颗棋子,故只需要从第五列判断到最后一列,从 第一行判断到第十一行。程序如下: 18 for ( j = 0; j 11; j+ ) / 第一行到第十一行 for ( i = 4; i 15; i+ ) /第五列到最后一列 if ( color = m_dataij 4.1.44.1.4 判断右下方向是否构成五子连珠判断右下方向是否构成五子连珠 判断右下方向时,与左下方向相似,都需要从第一行判断到第十一行,但是右下 方向判断时需要从第一列判断到第十一列。程序如下: for ( j = 0; j 11; j+ ) / 第一行到第十一行 for ( i = 0; i 11; i+ ) /第一列到第十一列 if ( color = m_dataij 以上四个判断看起来写的复杂,时间复杂度有些高,但是每一个都是很有限的判 断,计算机执行起来的时间基本都是 0ms。所以程序中也不用怎么优化。 4.24.2 计算机落子时的算法计算机落子时的算法6 4.2.14.2.1计算落子时的所有获胜可能性计算落子时的所有获胜可能性 该程序为玩家和电脑都设置了一个三维数组, 用于储存落子时的所有获胜的可能情 况。 根据上面判断落子时是否五子连珠, 所有的可能性有以下几种。 水平方向上: 11*15; 竖直方向上:11*15;左下方向上:11*11;右下方向上:11*11。故落子时所有的获胜 可能有 15 * 11 * 2 + 11 * 11 * 2 = 572 种。 有了这些获胜的可能性,就可以对棋盘上当前落子进行打分,即对每一个位置进行 分数计算,给出最有进攻优势或者防守力度的坐标值。那么任何一方都需要一个 15*15*572 的数组来记录每一个坐标处的获胜可能性。 五子棋是两方的对弈,因此需要计算出双方的落子得分。电脑的落子得分与玩家的 落子得分计算都是参考上面的规则。 另外,每次进入游戏时,所有的获胜可能都一样,需要在 COneGame:Init 中初 始化一下,都是 572 种。 4.2.24
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 元旦营销策划方案(3篇)
- 高端人群保险营销方案(3篇)
- 内网安全培训课件
- 化学品上岗安全培训课件
- 5G无线资源动态分配-洞察及研究
- 创伤的救治流程
- 化学仪器室安全守则培训课件
- 七年级上册(2024) 第二单元 写作 学会记事 公开课一等奖创新教案+(共18张)
- 2025年秋部编版语文四上 语文园地七(公开课一等奖创新教案+)
- 12 在牛肚子里旅行(+公开课一等奖创新教案+备课素材)
- 4.2《遵守规则》教学设计 -2025-2026学年八年级道德与法治上册
- 人工智能+高质量发展文化旅游产业智能化升级研究报告
- 2025年自考专业(计算机网络)考试综合练习附参考答案详解(A卷)
- 冷链技术对水果品质保持的数值预测模型研究
- 集输工应急处置考核试卷及答案
- 2025年全国保密教育线上培训考试试题库附完整答案(必刷)
- 珠江医院护理面试题库及答案
- 流程管理某省市场营销MPR+LTC流程规划方案
- 化工厂实习安全培训课件
- 疏浚清淤工程合同协议书
- 电子电子技术试题及答案
评论
0/150
提交评论