五子棋人机对战源码(易语言2004年大赛一等奖)

资源介绍:

如何绘制棋盘和棋子?

====================

棋盘是使用画板的“画直线”方法绘制的,使用了一个计次循环。棋盘上的小圆点是通过“画椭圆”方法绘制的。详细代码请参见“画棋盘”和“画小点”子程序。其中通过换算将棋盘坐标转换成了像素坐标。

棋子的图片存在程序的资源中,是ico格式的。使用ico格式的好处是可以直接使用画板的“画图片”方法画到棋盘上而不用额外的代码来处理棋子周围的透明,很方便!相关代码请参见“画棋子”子程序。

棋盘的底图是我用Photoshop生成的,棋子的图标是我在3ds max软件中制作的。

跟随光标的红色块是如何制作的?

==============================

那实际是个外形框控件。当光标在画板上移动的时候,通过计算将其移至相应的位置即可。详细代码请参见“移动鼠标外形框”子程序。 其中通过数学计算将棋盘坐标换算成像素坐标。

计算机是如何思考的?

=====================

首先要判断单向棋型和得分。所谓单向棋型就是指当前棋子落下后在某一方向上所形成的棋型。一颗棋子落下后会与棋盘上周围的棋子构成某种棋型,一共有四个方向:横、竖、左斜、右斜。如果能够判断一个方向,其他方向就好办了。下面我们只以横向来讲解。假定当前棋子落在棋盘上的坐标是(x,y),这里x和y是棋盘坐标,其值介于1-15之间。我们首先往左看,如果(x-1,y)位置的棋子与本棋子相同,则将“棋个数”变量加1;如果不同,则将“左堵”设为真,表示左边已被对方堵住,同时跳出循环,再往右看;如果为空,则继续往左看(x-2,y)棋位上的棋子,如果为对方棋子,则将“左堵”设为假;如果为己方棋子,则将“空个数”加一,表示其中有一个空棋位。如此循环,直到循环次数到达5、或者到达棋盘的左边沿、或者遇到左堵或左空而跳出循环。如果计数值未到达5,则从落子的位置继续往右观察,根据(x+1,y)、(x+2,y)……等处的棋子来修改“棋个数”、“空个数”、“右堵”等参数。 判断完毕后就给该单向棋型打分,这样便于以后根据分值排序。打分的原则是这样的:因为相同的棋越多,则得分越高,而且近似于呈指数关系(当棋个数为5时,得分应为无限大),所以先求一个幂,底数我选择8,指数为棋个数;因为如果相同的棋中间有空棋位的话,得分要打折扣,所以接下来减去一个底数为8,指数为“空个数”的幂值;如果有一端被对方棋子堵住了,则得分要大打折扣,我将得分除以2;如果两端都被堵住了,且棋个数小于5,则得分规定为1。这样我们就得到了单向棋型和得分。其源代码请参见子程序“计算单向棋型和得分”。该子程序最后有两个参数用来控制方向:左=1,顶=0 则计算横向;左=0,顶=1则用来计算纵向;左=1,顶=1用来计算右斜向;左=-1,顶=1用来计算左斜向。

通过四次调用“计算单向棋型和得分”可以分别得到该位置的四个方向的棋型和得分。接下来根据得分进行排序,这样就挑出得分最高的两个方向。根据其棋个数、空个数、左堵、右堵等信息来计算综合棋型。这样很容易就得到了“活四”、“双活三”、“死四活三”等棋型。这些代码请参见子程序“计算综合棋型和得分”。

然后计算机模拟己方落子和对方落子来计算综合棋型。首先计算己方(计算机方)能否获胜,如果能,就将棋子落在获胜的棋位上;如果不能,则判断对方能否有获胜的棋位,如果有,则将棋子落在该棋位上;接下来根据优先级分别判断一些最重要的棋步,比如“活四活四 活四死四 死四死四 活四活三 死四活三”等。这种棋型都是必胜棋型,计算机要抓住时机,同时要防止对方形成这些棋型。这些代码请参见子程序“计算当前最重要棋步”。 如果双方都没有这些重要棋型,则比较双方的最高得分,因为计算机后行棋,将计算机的最高得分乘以一个常数(“进攻指数”)再进行比较,如果计算机得分高,则落在计算机的棋位,如果对方(人)得分高,则落在对方的棋位。当然如果有相交棋步(对于计算机和人来说,该棋位都是重要棋位),则直接下在该棋位而不用比较得分了。详细代码请见“计算当前最佳落子位置”子程序。

如何判断是否为禁手?

=====================

有了“计算综合棋型和得分”子程序,判断禁手就简单了。详见“禁手判断”子程序。

悔棋是如何实现的?

===================

在行棋的过程中,计算机维护了一个棋步历史数组,同时维护了一个历史图片数组,用来保存被棋子遮住的棋盘位置的图片(为了在落子时获取该图片,我利用了一个隐藏的画板,该画板为“画板空棋盘”,仅仅用来画一个空棋盘,在落子的时候,我将该空棋盘上相应位置的图片块存入历史图片数组中)。当悔棋的时候,将相应的历史图片绘制到它原来的地方盖住棋子即可。同时修改全局的棋型数组。相关代码请参见“悔棋”子程序。

资源作者:

易语言源码做软件

资源界面:

五子棋.png

资源下载:

相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

五子棋人机对战源码(易语言2004年大赛一等奖)》有0个想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注