一、人机对战算法概述
人机对战属于一种弱人工智能算法,其核心是:当玩家落下一枚棋子后,计算出这枚棋子构成的所有棋型,找出威胁程度最大的棋型,并破解其产生的威胁。
五子棋中所能产生的棋型有很多,如果棋子至少有一边被封死,这种棋型被称为“死”棋型,反之被称为“活”棋型。根据棋子的数量,棋型又可以细化为“活三”、“死三”、“活四”等不同的棋型。棋型的不同,产生的威胁程度不同,破解的方式也不同。以四枚棋子为例,列出所有棋型及其威胁值和破解方法,如图4.16所示。
图4.16 四个棋子所产生的棋型及其威胁值和破解方法
说明:棋型就是棋子在棋盘上组合成的形状。
二、电脑自动处理用户请求
玩家联机对战的时候,是在各自电脑中处理对方的指令。但是玩家与电脑对战,则是在一台电脑中同时处理玩家和电脑的指令,这种情况下就不能再使用联机对战的命令处理逻辑了。在AI(电脑智能对战算法)类中,编写oprationHandler()方法,来专门处理玩家向电脑发来的指令。由于本程序取消了人机对战中的“认输”、“和棋”、“悔棋”命令,所以只处理玩家的“开始”命令即可。具体代码如下。
01 publicvoid oprationHandler(Object messageObj) {
02 intcode = (Integer) messageObj; // 获取命令代码
03 switch (code) { // 判断命令
04 case ChessPanel.OPRATION_START_MACHINE: // 如果是玩家请求开始游戏
05 frame.getChessPanel1().setTowardsStart(true); // 设置AI的游戏开始状态为true
06 break;
07 }