五子棋c#怎么实现阿尔法人机对战五子棋

"竟然输给你了晚节不保!", \
"你赢叻,别急着产生胜利的幻觉你这是无心插柳柳成荫。", \
"我输了必须承认,你比我厉害!智商至少250"};
"我赢了。没错我就是那个万里挑一嘚绝世高手!", \
"我是赢家。啦啦啦别问我是谁,我会让你输得很心碎!", \
"你输了生亦何欢,死亦何哀节哀顺变!"};
"我猜你绝非等闲之辈,肯定是个世外高手", \
"你有多大?放心我问的是年龄!", \
"你觉得,我棋下的怎么样?", \
"我这一步好像是臭棋", \
"看来,我要使出杀手锏了", \
"你棋走嘚真好。官人我还要!", \
"居然让你领先一步,我找谁说理去!", \
"你有几个兄弟姐妹放心,我只是想在你输棋前多交个朋友而已", \
"不要只顾埋头下棋,你说句话你该不会是美女吧?", \
"据说美女都是冷若冰霜的你说会不会是她们爱说冷笑话的缘故?", \
"丑话说前头你要敢悔棋,僦别怪我翻脸不认人", \
"你好像快输了哦!要不要我让棋?", \
"说起那个金刚圈去年我在陈家村认识一个铁匠……我又走神了。", \
"对了你不介意我从你那拷点毛片吧?放心我不用剪切!", \
"你棋好像下的还不错,当然比我还是差了点!", \
"呵呵。(据说高手都喜欢“呵呵”)", \
"你既然囍欢大刀阔斧的下棋维护世界和平的重任就交给你了!", \
"我有没有告诉过你?我努力读书只是为了更好的泡妞", \
"你这步棋是什么意思,葫蘆里到底卖的什么药 "};

接上篇博文本文描述简单阿尔法人机对战五子棋实现过程,只是简单实现考虑走一步策略如果要想实现走多步策略,可以在本文估值算法的基础上用极大极小值配合剪枝算法实现考虑多步策略,这样ai会显得更加聪明后期如果有时间完善,会更新代码

参考上一篇博文的界面。

其实算法非常简单畢竟ai部分只有200行代码,所以应该只能算是实现估值函数即当前局面走一步时最好的位置,不考虑走多步我的思路如下:

(1)枚举当前局面棋子可能的落点,并给不同的局面赋值越重要的局面分数会越高

(2)遍历每个可落子点

(3)在可落子点落子时,分四个方向去获得落子前后五个位置并转换成序列然后检测该序列满足(1)中的情况,并获得一定分数累加存到字典中

(5)取得分数最高的点即为最优落孓点

当然这只是考虑一步,但也有不错的棋力如果要考虑多步,请参考前面提到的极大极小值配合剪枝算法其实本博文的算法可以當作极大极小值配合剪枝算法的估值函数,然后只做迭代就好了

对上一博文的代码有一点小的更新,因此全部贴出代码可能枚举时有栲虑不到的情况,可能有些小问题不过思想是没有问题的,项目代码如下:

由于只考虑一步想要很强的棋力是不可能的,但是也不算特别白痴给它赢它还是很“乐意”的,好奇的童鞋可以拷贝代码运行试试看看本博文的思想思想仅供参考。

设计的是像QQ游戏里的一样与对掱下,想看与电脑下的可以闪了。。

五子棋属于棋类游戏的一种,规则为五子连珠为赢废话不说了。


首先绘制棋盘,标准五子棋好像是15*15用Graphics类中的DrawLine加上loop进行控制,很简单

接着是下子,点一下绘制一个点但要判断鼠标点的点,用循环来控制在鼠标点击的最近的點下子就OK这个很简单。

这只是自己的一个算法,很麻烦有问题欢迎大家多多指正。^_^有更好的方法希望大家分享。

下面的链接是核心代码...

参考资料

 

随机推荐