//Begin EASY public int minimaxEasy(char[] newBoard, char player) { char[] availSpots = emptyIndexies(newBoard); List <Move> moves = new List <Move>(); // loop through available spots for (int i = 0; i < availSpots.Length; i++) { //create an object for each and store the index of that spot Move move = new Move(); move.setIndex((int)char.GetNumericValue(newBoard[(int)char.GetNumericValue(availSpots[i])])); // set the empty spot to the current player newBoard[((int)char.GetNumericValue(availSpots[i]))] = player; // reset the spot to empty newBoard[(((int)char.GetNumericValue(availSpots[i])))] = Char.Parse(move.getIndex().ToString()); // push the object to the array moves.Add(move); } int bestMove = 0; Random rnd = new Random(); bestMove = rnd.Next(0, moves.Count); // return the chosen move (object) from the moves array if (moves.Count == 0) { return(0); } else { return(moves[bestMove].getIndex()); } }
//End EASY //Begin MEDIUM public int minimaxMedium(char[] newBoard, char player) { char [] availSpots = emptyIndexies(newBoard); if (Winning(newBoard, huPlayer)) { return(-10); } else if (Winning(newBoard, aiPlayer)) { return(10); } else if (availSpots.Length == 0) { return(0); } List <Move> moves = new List <Move>(); // loop through available spots for (int i = 0; i < availSpots.Length; i++) { //create an object for each and store the index of that spot Move move = new Move(); move.setIndex((int)char.GetNumericValue(newBoard[(int)char.GetNumericValue(availSpots[i])])); // set the empty spot to the current player newBoard[((int)char.GetNumericValue(availSpots[i]))] = player; /*collect the score resulted from calling minimax * on the opponent of the current player*/ if (player == aiPlayer) { int result = minimaxMedium(newBoard, huPlayer); move.setScore(result); } else { int result = minimaxMedium(newBoard, aiPlayer); move.setScore(result); } // reset the spot to empty newBoard[(((int)char.GetNumericValue(availSpots[i])))] = Char.Parse(move.getIndex().ToString()); // push the object to the array moves.Add(move); } // if it is the computer's turn loop over the moves and choose the move with the highest score int bestMove = 0; if (player == aiPlayer) { int bestScore = -10000; for (int i = 0; i < moves.Count; i++) { if (moves[i].getScore() > bestScore) { bestScore = moves[i].getScore(); bestMove = i; } } } else { // else loop over the moves and choose the move with the lowest score int bestScore = 10000; for (int i = 0; i < moves.Count; i++) { if (moves[i].getScore() < bestScore) { bestScore = moves[i].getScore(); bestMove = i; } } } // return the chosen move (object) from the moves array return(moves[bestMove].getIndex()); }