Пример #1
0
        private static Move ValidateMove(IIOManager myIO, Board board, Player player, string inputCoordinates)
        {
            // rimuovo eventuali spazi, e controllo che la stringa passata contenga esattamente due caratteri
            inputCoordinates = inputCoordinates.Trim(' ');
            if (inputCoordinates.Length != 2)
            {
                myIO.Notify("Input non valido, inserisci le cordinate in formato {char}{int}.");
                return(null);
            }

            // l'indice di riga deve essere un indicatore di riga valido (a, b o c)
            char myRow = inputCoordinates.ElementAt(0);

            if (myRow < board.InitialRow || myRow > board.LastRow)
            {
                myIO.Notify($"Input non valido, la prima coordinata (indicatore di riga) deve essere compresa tra '{(char)board.InitialRow}' e '{(char)board.LastRow}'.");
                return(null);
            }
            int rowValue = myRow;

            // l'indice di colonna deve essere un indicatore di colonna valido (1, 2 o 3)
            char myCol = inputCoordinates.ElementAt(1);

            if (!int.TryParse(myCol.ToString(), out int colValue))
            {
                myIO.Notify("Input non valido, la seconda coordinata (indicatore di colonna) deve essere numerica.");
                return(null);
            }
            if (colValue < board.InitialCol || colValue > board.LastCol)
            {
                myIO.Notify($"Input non valido, la seconda coordinata (indicatore di colonna) deve essere compresa tra {board.InitialCol} e {board.LastCol}.");
                return(null);
            }

            // tolgo il valore iniziale dagli indicatori, per ottenere l'indice di matrice
            rowValue -= board.InitialRow;
            colValue -= board.InitialCol;

            // la cella deve essere libera
            if (board.Grid[rowValue, colValue] != (char)0)
            {
                myIO.Notify($"Input non valido, la cella {inputCoordinates} è già occupata.");
                return(null);
            }

            // se arrivo qui ho superato tutte le validazioni
            var move = new Move(board, player, rowValue, colValue);

            move.Evaluate();
            return(move);
        }
Пример #2
0
        public static Player SetNewPlayer(char sign, IIOManager myIO)
        {
            myIO.Notify($"Impostazioni per il giocatore {sign}");
            myIO.LittleBreak();
            var ia   = myIO.AcceptBool("Il giocatore è controllato dal computer (s/n): ", false);
            var name = myIO.AcceptString("Nome del giocatore: ", $"Player {sign}");

            myIO.LittleBreak();

            var player = new Player(name, sign, ia);

            myIO.Notify($"Ok, generato giocatore {player}");

            return(player);
        }
Пример #3
0
        public static Move CalculateMove(IIOManager myIO, Board board, Player player)
        {
            var possibleMoves = PossibleMoves(board, player);  // passo anche il giocatore perché calcolo il rating per ogni mossa relativamente a quel giocatore

            var maxRating    = possibleMoves.Max(x => x.Rating);
            var bestMoves    = possibleMoves.FindAll(x => x.Rating == maxRating);
            var chioicedMove = bestMoves.ElementAt(randomizer.Next(bestMoves.Count()));

            myIO.Notify($"{player} muove in {chioicedMove}.");
            myIO.LittleBreak();

            myIO.Wait();

            return(chioicedMove);
        }