前言:
本文只提供AI算法,不提供棋盘,因为棋盘不是我写的,不好拿出来分享,望谅解。
AI水平说明:
当前AI只能计算当前局面下最优的一步,没有深度,水平一般的普通人很轻易就会被其击败,但是有很大的升级空间,可以以此为基础再行添加算法添加深度,以及剪枝等算法。
程序运行图片:黑方为AI,我是白色(我是不是太菜了。。)

AI得分说明:
当前AI为黑色时水平较高,为白色时需要修改得分表,得分表会影响AI的决策,得分可以自行修改,此得分表并非最佳得分表,但是经过我的测试貌似还可以。ps:这是AI的核心非常重要
得分表如下:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 五子棋
{
public static class ChessValueUtil
{
public static Hashtable blackTable = new Hashtable(); //创建一个HashTable实例
public static Hashtable whiteTable = new Hashtable();
//五子棋棋形,最长为7,最短为4(有些棋形必须将空位包含进去)
public static Hashtable getBlackTable()
{
return blackTable;
}
public static Hashtable getWhiteTable()
{
return whiteTable;
}
/**
* *:表示黑子
* -:表示空位
* o:表示白子
*/
static ChessValueUtil(){
//还要设置防守方的数值,防止被gank掉
//右边Add的whiteTable值,是防守分数,这样Ai就不会一味的猛冲
//左边:黑方Ai的棋子判断 右边:Ai结束后,玩家可能的棋子判断
blackTable.Add("*****", 100000);//连五
/* */whiteTable.Add("ooooo", 90000);
blackTable.Add("-****-", 5000);//活四
/* */whiteTable.Add("-oooo-", 4500);
blackTable.Add("*-***", 700);//冲四 1
/* */whiteTable.Add("o-ooo", 200);
blackTable.Add("***-*", 700);//冲四 1 反向
/* */whiteTable.Add("ooo-o", 200);
blackTable.Add("-****o", 900);//冲四 2
/* */whiteTable.Add("-oooo*", 250);
blackTable.Add("o****-", 900);//冲四 2 反向
/* */whiteTable.Add("*oooo-", 250);
blackTable.Add("**-**", 700);//冲四 3
/* */whiteTable.Add("oo-oo", 200);
blackTable.Add("-***-", 600);//活三 1
/* */whiteTable.Add("-ooo-", 150);
blackTable.Add("-*-**-", 150);//活三 2
/* */whiteTable.Add("-o-oo-", 50);
blackTable.Add("-**-*-", 150);//活三 2 反向
/* */whiteTable.Add("-oo-o-", 50);
blackTable.Add("--***o", 120);//眠三 1
/* */whiteTable.Add("--ooo*", 30);
blackTable.Add("o***--", 120);//眠三 1 反向
/* */whiteTable.Add("*ooo--", 30);
blackTable.Add("-*-**o", 80);//眠三 2
/* */whiteTable.Add("-o-oo*", 15);
blackTable.Add("o**-*-", 80);//眠三 2 反向
/* */whiteTable.Add("*oo-o-", 15);
blackTable.Add("-**-*o", 60);//眠三 3
/* */whiteTable.Add("-oo-o*", 10);
blackTable.Add("o*-**-", 60);//眠三 3 反向
/* */whiteTable.Add("*o-oo-", 10);
blackTable.Add("*--**", 60);//眠三 4
/* */whiteTable.Add("o--oo", 10);
blackTable.Add("**--*", 60);//眠三 4 反向
/* */whiteTable.Add("oo--o", 10);
blackTable.Add("*-*-*", 60);//眠三 5
/* */whiteTable.Add("o-o-o", 10);
blackTable.Add("o-***-o", 60);//眠三 6
/* */whiteTable.Add("*-ooo-*", 2);
blackTable.Add("--**--", 50);//活二 1
/* */whiteTable.Add("--oo--", 2);
blackTable.Add("-*-*-", 20);//活二 2
/* */whiteTable.Add("-o-o-", 2);
blackTable.Add("*--*", 20);//活二 3
/* */whiteTable.Add("o--o", 2);
blackTable.Add("---**o", 10);//眠二 1
/* */whiteTable.Add("---oo*", 1);
blackTable.Add("o**---", 10);//眠二 1 反向
/* */whiteTable.Add("*oo---", 1);
blackTable.Add("--*-*o", 10);//眠二 2
/* */whiteTable.Add("--o-o*", 1 );
blackTable.Add("o*-*--", 10);//眠二 2 反向
/* */whiteTable.Add("*o-o--", 1);
blackTable.Add("-*--*o", 10);//眠二 3
/* */whiteTable.Add("-o--o*", 1);
blackTable.Add("o*--*-", 10);//眠二 3 反向
/* */whiteTable.Add("*o--o-", 1);
blackTable.Add("*---*", 10);//眠二 4
/* */whiteTable.Add("o---o", 1);
}
}
}
AI算法思路讲解:
首先我们需要知道输入和输出,给输入当前棋盘的二维数组,从而让他返回落点坐标

本文详细介绍了如何使用AI算法进行五子棋游戏,涉及棋盘判断、得分计算、落点选择过程。通过黑白得分表指导决策,尽管AI水平有限,但提供了优化升级的基础。
最低0.47元/天 解锁文章
6334

被折叠的 条评论
为什么被折叠?



