一种基于改进权重的黑白棋AI的设计与实现.docx

一种基于改进权重的黑白棋AI的设计与实现.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

?

一种基于改进权重的黑白棋AI的设计与实现

?

?

徐刚翟梦姣

摘要:本文基于改进权重设计并实现了一个黑白棋的人工智能程序,系统可以设置计算层数,经测试,程序效果较好。

关键词:黑白棋;AI;设计与实现

中图分类号:TP18??文献标识码:A??文章编号:1672-9129(2020)04-0054-02

Abstract:Inthispaper,basedontheimprovedweightdesignandimplementationofablackandwhiteaiprogram,thesystemcanbesettocalculatethenumberoflayers,throughtesting,theprogrameffectisbetter.

Keywords:Blackandwhite;AI;DesignandImplementation

前言:黑白棋,又叫翻转棋(Reversi)、奥赛罗棋(Othello)等。近年来,人工智能是重要的研究领域之一。研究黑白棋的AI有助于了解人类只能行为。网上已有较多黑白棋的AI程序。经过测试,笔者发现网上常见的黑白棋棋盘每个格子的权重如果做一定程度的调整,比如,适当降低四个角的格子的权重,且适当增加四条边每个格子的权重,那么有助于提升黑白棋AI的水平。接下来的部分笔者将详述该系统的需求,设计和实现。

1系统需求和设计目标

系统可以自动画出黑白棋的棋盘,供双方落子,并实时显示双方的棋子数量,是否分出胜负和胜负关系,以及接下来该哪一方落子。当用鼠标点击棋盘某个格子时,需要做判断。如果棋盘已满,或者接下来双方都没有可以下子的格子,则根据双方的棋子数量自动判断胜负关系并显示出来;如果上个条件不满足且某一方落子后,并不能导致另一方的任何棋子被吃掉,则落子无效,仍有该方走棋;如果上述两个条件均不满足且某一方落子后,另一方没有可以落子的格子,则由某一方继续走棋;如果上述几个条件均不满足且某一方落子后可以导致另一份某些棋子被吃掉,则换另一方走棋。系统AI需要根据棋盘每个格子的权重,自动计算当时系统方的权重值和玩家方的权重值。首先,遍历接下来若干步双方所有可能的落子顺序;然后,计算每一种可能后系统方的权重值;之后,选出权重值最大的一种然后落子并等待玩家方的下一步走棋;最后依次类推,直到分出胜负。系统AI需要根据棋盘每个格子的权重,自动计算当时系统方的权重值和玩家方的权重值。首先,遍历接下来若干步双方所有可能的落子顺序;然后,计算每一种可能后系统方的权重值;之后,选出权重值最大的一种然后落子并等待玩家方的下一步走棋;最后依次类推,直到分出胜负。此外,系统还要允许用户设置计算层数,并根据计算层数计算胜率最高的点。同时,允许用户在游戏进行中随时改变系统AI控制哪一方的棋子,并作出对应的操作。

2系统主要功能实现

本系统使用C#程序设计语言,在VisualStudio2010软件下编译运行通过。系统为该软件下的Windows窗体应用程序。程序要需要若干个Label控件用于显示黑方棋子数量、白方棋子数量、接下来该何方走棋;使用一个GroupBox控件和三个RadioButton控件来设置玩家为黑棋,或白棋,或两方都是玩家;使用一个TextBox控件来设置AI搜索层数,层数越多,AI越智能,但是消耗系统资源较大。使用Panel控件当作棋盘,并使用Graphic类的Pen子类画出棋盘和棋子。具体方法是,首先画出一个边框较粗的正方形作为棋盘外框,并占据整个Panel控件,然后在里面画出等距的7条竖线和7条横线,之后在中心的四个格子里以某对角两格作为一种颜色画出黑色棋子,另一个对角两格画出白色棋子,最后等待玩家用鼠标点击棋盘某格,根据情况画出棋子。接下来以玩家为黑棋为例,详述整个系统AI的实现;当玩家为白棋时则反之;如果两方都是玩家只需判断落子是否已经分出胜负和是否落子有效即可[1-2]。

系统首先等待玩家落子,并建立两个8行8列的二维整型数组代表棋盘落子情况,其中1代表黑棋,-1代表白棋,0代表该位置没有棋子,第一个数组代表棋盘的实时状态,第二个数组作代表临时棋盘以作判断落子是否有效使用。如果鼠标点击了Panel控件,则触发其MouseDown事件,如果鼠标点击了棋盘的横线、竖线或已有的落子点时,则其为无效落子,系统什么都不做并继续等待玩家落子;如果点击到了其他部分,则根据规则判断是否可以导致系统方丢子,具体方法是:(1)把新的落子赋值到第二个数组中;(2)判断该子上、下、左、右、左上、左下、右上和右下八个方向行进一格是否有对方棋子,如果都没有对方棋子则落子无效,系统继续等待玩家落子,并把第二

您可能关注的文档

文档评论(0)

180****4026 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档