乐于分享
好东西不私藏

AI如何辨别各种棋型-C/C++五子棋开发

AI如何辨别各种棋型-C/C++五子棋开发

学习提示:
文末点击(阅读原文)获取人机对战可运行程序
如果没有C语言Windows项目开发基础
可以通过下方链接学习:
VS安装与工程创建

0基础C语言学习与训练
0基础C++学习与训练
快速掌握Windows项目开发
在本次的学习中,我们将会为大家介绍如何在Windows平台上开发一个(人工智能五子棋)的项目,在该项目中实现了通过(人工智能程序)与(人)进行五子棋对战的博弈智能程序

作为一个五子棋的人工智能,它是如何辨别棋子的不同组合情况呢?

例如:是否有(两边都没有阻拦)的(3子相连)或(4子相连)的情况,如果有,就需要防守。而对于人类来说,通过观察就可以知道(棋盘)中所有棋子的组合情况,但是,对于(人工智能)来说,它要如何判断呢?

所以,在接下来的时间里面,我们就开始为大家介绍棋子的分值定义与计算

1、连续棋子的分值定义与计算

例子:

分析 :

(1)在上面的例子中,我们把5颗棋子的分值,从右往左,分别定义了5个对应的数值,分别是1、2、4、8、16。

(2)最右方的棋子分值是1,当它的左方有同色棋子时,就用1+2,结果为3,这样,AI通过分值就可以知道有2颗同色棋子相连。

如果有3颗同色棋子相连,就是1+2+4,结果为7,这样,AI通过分值就可以知道有3颗同色棋子相连,如些类推。

另外,这些分值的定义不是固定的,你完全可以根据自己的习惯去定义,也是可以的。只要分值的结果可以区分不同的棋子组合就可以了。


2、间断棋子的分值定义与计算

间断棋子的意思是不连续的棋子,但是,它们同样会构成威胁,所以,AI也要认识这类情况的棋子组合。

例子1:

分析:

我们同样使用上面学习过的分值定义,所以,最右方的(白子C)的分值是1,(白子B)的分值是2,(白子A)的分值是8,所以,该棋子的组合分值是1+2+8,等于11,这样,AI就可以根据分值知道它是有3个棋子的组合情况,需要防守。


例子2:

分析:

我们同样使用上面学习过的分值定义,所以,最右方的(白子C)的分值是1,(白子B)的分值是4,(白子A)的分值是8,所以,该棋子的组合分值是1+4+8,等于13,这样,AI就可以根据分值知道它是有3个棋子的组合情况,需要防守。


通过上面的例子学习,目前,我们可以知道当分值为7、11、13时,就可以判断出有3种不同的棋型构成威胁并需要防守,同时,当分值为11时,它所对应的棋型,是从白子C开始往左2格可以落子防守,而分值为13时,它所对应的棋型,是从白子C开始往左1格可以落子防守,那么,这两种棋型的防守位置比较好判断。
但是,当分值为7时,它所对应的棋型是连续3个同色棋子相连,所以,它的左右两边都可以落子防守,而要在哪一边落子更有利呢?而这些内容就需要结合当前棋盘中对手与自己的棋子布局与位置,作出一个综合的思考与判断以后,才可以作出正确的选择,而这些内容我们将会在往后的章节中再为大家作介绍,目前,先掌握分值的定义与计算,以及,如何通过分值去分辨不同的棋子组合。

例子3:

分析:

我们同样使用上面学习过的分值定义,所以,最右方的(白子D)的分值是1,(白子C)的分值是2,(白子B)的分值是4,(白子A)的分值是16,所以,该棋子的组合分值是1+2+4+16,等于23,这样,AI就可以根据分值知道它是有4颗棋子的组合情况,需要防守。


例子4:

在例子4中,三种棋子组合的分值计算就留给大家当作练习自行计算了,这样,大家就可以了解到如何通过分值,让AI去认识不同的棋子组合情况。

Windows项目开发系列
AI五子棋项目开发系列(附可运行程序)
C\C++|Python|Java|JS的编程训练(附可运行程序)
0基础C语言学习与训练
0基础C++学习与训练
0基础Java学习与训练
0基础Python学习与训练
0基础JavaScript学习与训练
0基础Objective-C学习与训练
0基础PHP学习与训练
游戏开发的学习步骤与选择
学习什么编程语言最好?最有前途?