//人工智能,使棋子下落更智能 private List <int> AI() { //获取可投掷棋子的列的集合 List <int> possibleMoves = GetPossibleCol(); //最佳的投掷列的集合 最佳投掷列:连线的同色棋子数量最多 List <int> AIMoves = new List <int>(); //连线的同色棋子数 int blocked; int bestBlocked = 0; for (int i = 0; i < possibleMoves.Count; i++) { //当前列第一个空闲格子的行的索引为currentRow+1 int currentRow = -1; //遍历所有行数 for (int j = 5; j >= 0; j--) { if (m_BoardField[j, possibleMoves[i]] != 0) { currentRow = j; break; } } if (currentRow + 1 != 6) { //假设在当前棋子上方放置一个棋子,记录其在水平方向同色棋子数的个数 m_BoardField[currentRow + 1, possibleMoves[i]] = 1; blocked = GetAdj(currentRow + 1, possibleMoves[i], 0, 1) + GetAdj(currentRow + 1, possibleMoves[i], 0, -1); //判断水平方向和竖直方向同色棋子数的最大值 blocked = Mathf.Max(blocked, GetAdj(currentRow + 1, possibleMoves[i], 1, 0) + GetAdj(currentRow + 1, possibleMoves[i], -1, 0)); //判断上述最大值和两斜线同色棋子数最大值 blocked = Mathf.Max(blocked, GetAdj(currentRow + 1, possibleMoves[i], -1, 1) + GetAdj(currentRow + 1, possibleMoves[i], 1, -1)); blocked = Mathf.Max(blocked, GetAdj(currentRow + 1, possibleMoves[i], 1, 1) + GetAdj(currentRow + 1, possibleMoves[i], -1, -1)); if (blocked >= bestBlocked) { if (blocked > bestBlocked) { bestBlocked = blocked; AIMoves = new List <int>(); } AIMoves.Add(possibleMoves[i]); } } m_BoardField[currentRow + 1, possibleMoves[i]] = 0; } return(AIMoves); }
////////////////////////////////FROM INTERFACE STUFF.//////////////////////////////////////////// public void doMove(Player p, Board b) { rule moveOfThisTurn = chooseMove(); AIMoves goingTo = new AIMoves(); switch (moveOfThisTurn.name) { case "moveRandom": Console.WriteLine("moveRandom"); goingTo.moveRandom(p,b); break; case "moveHighest": Console.WriteLine("moveHighest"); goingTo.moveHighest(p, b); break; case "moveClosestToGoal": Console.WriteLine("moveClosestToGoal"); goingTo.moveClosestToGoal(p, b); break; case "moveStartPosition": Console.WriteLine("moveStartPosition"); goingTo.moveStartPosition(p, b); break; /* Newly added rules must follow this rule: case "moveNew": Console.WriteLine("moveNew"); goingTo.moveNew(p, b); break; */ } }