public void removeChess(int index) { int playerKey = (redTurn ? 1 : 2); if (countdown >= dropTime && BoardUtility.canRemove(gameGrid, index, playerKey)) { for (int i = 0; i < all_chess.Count; i++) { if (all_chess[i].x == index && all_chess[i].y != 5) { all_chess[i].x++; } else if (all_chess[i].x == index && all_chess[i].y == 5) { Chess chs = all_chess[i]; all_chess.Remove(chs); Destroy(chs.gameObject); } } redTurn = !redTurn; //remove it from the gamegrid gameGrid = BoardUtility.removeFromGrid(gameGrid, index, 5); checkWinner(); } }
//minimax algorithm that will expend its search and return the heuristic value for different result //with remove option public static Node minimaxWithRemove(int[] gameGrid, int depth, int alpha, int beta, bool maximizingPlayer, int playerKey, int index, int h) { if (depth == 0) { Node n = new Node(); n.value = heristic(gameGrid, playerKey, h); n.index = index; return(n); } else { if (maximizingPlayer) { Node n = new Node(); n.value = -9999999; int j = -1; for (int i = 0; i < 14; i++) { if (i < 7 && !BoardUtility.canInsert(gameGrid, i)) { break; } else if (i >= 7 && !BoardUtility.canRemove(gameGrid, i - 7, playerKey)) { break; } int[] newGrid = BoardUtility.copyGameGrid(gameGrid); if (i < 7) { BoardUtility.insertToGrid(newGrid, BoardUtility.insertingPosition(newGrid, i), playerKey); } else { BoardUtility.removeFromGrid(newGrid, i - 7, 5); } Node n1 = minimax(newGrid, depth - 1, alpha, beta, false, playerKey, i, h); if (n1.value >= n.value) { n = n1; j = i; } else if (n1.value == n.value) { if (Random.Range(0, 2) == 1) { n = n1; j = i; } } if (alphaBeta && n1.value >= alpha) { alpha = n1.value; } if (alphaBeta && beta <= alpha) { break; } } n.index = j; return(n); } else { Node n = new Node(); n.value = 99999999; int key = (playerKey + 1) % 2; int j = -1; for (int i = 0; i < 7; i++) { if (i < 7 && !BoardUtility.canInsert(gameGrid, i)) { break; } else if (i >= 7 && !BoardUtility.canRemove(gameGrid, i - 7, key)) { break; } int[] newGrid = BoardUtility.copyGameGrid(gameGrid); if (i < 7) { BoardUtility.insertToGrid(newGrid, BoardUtility.insertingPosition(newGrid, i), key); } else { BoardUtility.removeFromGrid(newGrid, i - 7, 5); } Node n1 = minimax(newGrid, depth - 1, alpha, beta, true, playerKey, i, h); if (n1.value <= n.value) { n = n1; j = i; } else if (n1.value == n.value) { if (Random.Range(0, 2) == 1) { n = n1; j = i; } } if (alphaBeta && beta >= n1.value) { beta = n1.value; } if (alphaBeta && beta <= alpha) { break; } } n.index = j; return(n); } } }