又是本人一份人工智能作业……首先道歉,从 Word 贴到 Livewrter,好多格式没了,也没做代码高亮……大家凑活着看……想做个好的人机对弈的五子棋,可以说需要考虑的问题还是很多的,我们将制作拥有强大 AI 五子棋的过程分为十四步,让我来步步介绍。第一步,了解禁手规则做一个五子棋的程序,自然对五子棋需要有足够的了解,现在默认大家现在和我研究五子棋之前了解是一样多的。以这个为基础,介绍多数人不大熟悉的方面。五子棋的规则实际上有两种:有禁手和无禁手。由于无禁手的规则比较简单,因此被更多人所接受。其实,对于专业下五子棋的人来说,有禁手才是规则。所以,这里先对''有禁手〃进行一下简单介绍:五子棋中''先手必胜〃已经得到了论证,类似''花月定式〃和''浦月定式〃,很多先手必胜下法虽然需要大量的记忆,但高手确能做到必胜。所以五子棋的规则进行了优化,得到了''有禁手〃五子棋。五子棋中,黑棋必然先行。因此''有禁手〃五子棋竞技中对黑棋有以下''禁手〃限制:''三三禁〃:黑棋下子位置同时形成两个以上的三;''四四禁〃:黑棋下子位置同时形成两个以上的四;''长连禁〃:六子以上的黑棋连成一线。黑棋如下出''禁手''则马上输掉棋局。不过如果''连五〃与''禁手〃同时出现这时''禁手〃是无效的。所以对于黑棋只有冲四活三(后面会有解释)是无解局面。反观白棋则多了一种获胜方式,那就是逼迫黑棋必定要下在禁点。为了迎合所有玩家,五子棋自然需要做出两个版本,或者是可以进行禁手上的控制。第二步,实现游戏界面这里,我制作了一个简单的界面,但是,对于人机对弈来说,绝对够用。和很多网上的精美界面相比,我的界面也许略显粗糙,但,开发速度较高,仅用了不到半天时间。下面我们简单看下界面的做法。界面我采用了 WPF,表现层和逻辑层完全分开,前台基本可以通过拖拽完成布局,这里就不做过多介绍。根据界面截图简单介绍1 处实际上市两个渐变 Label 的拼接,2、3 是两个 label,4、5 实际上是两个 Button,但是没有做事件响应。通过按钮 6、7、8、9 的控制,修改 label 和 Button 的 Content 属性。也许有人会奇怪,为什么 Button 会丝毫看出不出有 Button 的影子,这里战友whrxiao 写过一个 Style 如下vStylex:Key="ButtonStyle1"TargetType="{x:TypeButton}">vSetter.Value〉vControlTemplateTargetType="{x:TypeButton}">vGrid>vContentPresenterHorizontalAlignme...