Пример #1
0
        private static void Setup()   //I think this needs more for loops.
        {
            int tileNumber = 0;

            for (int y = 0; y < BoardSize; y += 1)
            {
                for (int x = 0; x < BoardSize; x += 1)
                {
                    if (IsOdd(tileNumber))
                    {
                        _Board[x, y] = Tile.White;
                    }
                    else
                    {
                        _Board[x, y] = Tile.Black;
                    }
                    tileNumber += 1;
                }
                tileNumber += 1;
            }
            for (int y = 0; y < 2; y += 1)
            {
                for (int x = 0; x < BoardSize; x += 1)
                {
                    if (Board(x, y) == Tile.Black)
                    {
                        _Board[x, y] = Tile.RedChecker;
                    }
                }
            }
            for (int y = BoardSize - 1; y > BoardSize - 3; y -= 1)
            {
                for (int x = 0; x < BoardSize; x += 1)
                {
                    if (Board(x, y) == Tile.Black)
                    {
                        _Board[x, y] = Tile.WhiteChecker;
                    }
                }
            }
            Bot1.Setup(1, BoardSize);
            Bot2.Setup(2, BoardSize);
            checkerBoard = new CheckerBoard(BoardSize);
            new Thread(RunCheckerBoard).Start();
            checkerBoard.UpdateBoard(_Board);
        }
Пример #2
0
        private static void StartGame()
        {
            int  turn = 1;
            int  botOneInvalidMoves         = 0;
            int  botTwoInvalidMoves         = 0;
            bool tooManyInvalidMovesReached = false;

            while (TileExists(BotOneTiles) && TileExists(BotTwoTiles) && !tooManyInvalidMovesReached)
            {
                Console.ReadKey(true);
                Move botMove     = null;
                int  whoseTurn   = IsOdd(turn) ? 1 : 2;
                bool turnSkipped = false;
                switch (whoseTurn)
                {
                case 1:
                    try {
                        botMove = Bot1.Turn();
                    } catch {
                        Console.WriteLine("Exception caught on Bot 1's turn.");
                    }
                    break;

                case 2:
                    try {
                        botMove = Bot2.Turn();
                    } catch {
                        Console.WriteLine("Exception caught on Bot 2's turn.");
                    }
                    break;
                }
                if (botMove != null)
                {
                    if (!VerifyMove(botMove, whoseTurn))
                    {
                        turnSkipped = true;
                        Console.WriteLine($"Illegal move by Bot {whoseTurn}.");
                    }
                    else
                    {
                        Console.WriteLine($"Bot {whoseTurn}: {botMove.Piece.X},{botMove.Piece.Y} @ {botMove.MoveType}");
                        bool isKinged = Board(botMove.Piece.X, botMove.Piece.Y) ==
                                        Tile.KingedRedChecker || Board(botMove.Piece.X, botMove.Piece.Y) == Tile.KingedWhiteChecker ?
                                        true : false;
                        _Board[botMove.Piece.X, botMove.Piece.Y] = Tile.Black;
                        Tile replaceTile = Tile.White;
                        switch (whoseTurn)
                        {
                        case 1:
                            if (isKinged)
                            {
                                replaceTile = Tile.KingedRedChecker;
                            }
                            else
                            {
                                replaceTile = Tile.RedChecker;
                            }
                            break;

                        case 2:
                            if (isKinged)
                            {
                                replaceTile = Tile.KingedWhiteChecker;
                            }
                            else
                            {
                                replaceTile = Tile.WhiteChecker;
                            }
                            break;
                        }
                        switch (botMove.MoveType)
                        {
                        case MoveType.LeftDown:     // MINUS PLUS
                            _Board[botMove.Piece.X - 1, botMove.Piece.Y + 1] = replaceTile;
                            break;

                        case MoveType.RightDown:     // PLUS PLUS
                            _Board[botMove.Piece.X + 1, botMove.Piece.Y + 1] = replaceTile;
                            break;

                        case MoveType.LeftUp:     // MINUS MINUS
                            _Board[botMove.Piece.X - 1, botMove.Piece.Y - 1] = replaceTile;
                            break;

                        case MoveType.RightUp:     // PLUS MINUS
                            _Board[botMove.Piece.X + 1, botMove.Piece.Y - 1] = replaceTile;
                            break;

                        case MoveType.LeftUpJump:     // MINUS MINUS
                            _Board[botMove.Piece.X - 1, botMove.Piece.Y - 1] = Tile.Black;
                            _Board[botMove.Piece.X - 2, botMove.Piece.Y - 2] = replaceTile;
                            break;

                        case MoveType.RightUpJump:      // PLUS MINUS
                            _Board[botMove.Piece.X + 1, botMove.Piece.Y - 1] = Tile.Black;
                            _Board[botMove.Piece.X + 2, botMove.Piece.Y - 2] = replaceTile;
                            break;

                        case MoveType.LeftDownJump:     // MINUS PLUS
                            _Board[botMove.Piece.X - 1, botMove.Piece.Y + 1] = Tile.Black;
                            _Board[botMove.Piece.X - 2, botMove.Piece.Y + 2] = replaceTile;
                            break;

                        case MoveType.RightDownJump:     // PLUS PLUS
                            _Board[botMove.Piece.X + 1, botMove.Piece.Y + 1] = Tile.Black;
                            _Board[botMove.Piece.X + 2, botMove.Piece.Y + 2] = replaceTile;
                            break;
                        }
                        int y = 0;
                        for (int x = 0; x < BoardSize; x += 1)
                        {
                            if (Board(x, y) == Tile.WhiteChecker)
                            {
                                _Board[x, y] = Tile.KingedWhiteChecker;
                                Console.WriteLine("Bot 2 has a new king!");
                            }
                        }
                        y = BoardSize - 1;
                        for (int x = 0; x < BoardSize; x += 1)
                        {
                            if (Board(x, y) == Tile.RedChecker)
                            {
                                _Board[x, y] = Tile.KingedRedChecker;
                                Console.WriteLine("Bot 1 has a new king!");
                            }
                        }
                    }
                }
                else
                {
                    turnSkipped = true;
                    Console.WriteLine($"No move provided by Bot {whoseTurn}.");
                }
                if (turnSkipped)
                {
                    if (whoseTurn == 1)
                    {
                        botOneInvalidMoves += 1;
                    }
                    else
                    {
                        botTwoInvalidMoves += 1;
                    }
                }
                else
                {
                    if (whoseTurn == 1)
                    {
                        botOneInvalidMoves = 0;
                    }
                    else
                    {
                        botTwoInvalidMoves = 0;
                    }
                }
                if (EnabledInvalidMovesEnd)
                {
                    tooManyInvalidMovesReached = botOneInvalidMoves >= MaximumSequentialInvalidMoves || botTwoInvalidMoves >= MaximumSequentialInvalidMoves;
                }
                turn += 1;
                checkerBoard.UpdateBoard(_Board);
            }
            int winner;

            if (tooManyInvalidMovesReached)
            {
                if (botOneInvalidMoves == MaximumSequentialInvalidMoves)
                {
                    winner = 2;
                }
                else
                {
                    winner = 1;
                }
            }
            else
            {
                if (TileExists(BotOneTiles))
                {
                    winner = 1;
                }
                else
                {
                    winner = 2;
                }
            }
            EndGame(tooManyInvalidMovesReached, winner);
        }
Пример #3
0
 private static void Setup() { //I think this needs more for loops.
     int tileNumber = 0;
     for(int y = 0;y < BoardSize;y += 1) {
         for(int x = 0;x < BoardSize;x += 1) {
             if(IsOdd(tileNumber)) {
                 _Board[x,y] = Tile.White;
             } else {
                 _Board[x,y] = Tile.Black;
             }
             tileNumber += 1;
         }
         tileNumber += 1;
     }
     for(int y = 0;y < 2;y += 1) {
         for(int x = 0;x < BoardSize;x += 1) {
             if(Board(x,y) == Tile.Black) {
                 _Board[x,y] = Tile.RedChecker;
             }
         }
     }
     for(int y = BoardSize-1;y > BoardSize-3;y -= 1) {
         for(int x = 0;x < BoardSize;x += 1) {
             if(Board(x,y) == Tile.Black) {
                 _Board[x,y] = Tile.WhiteChecker;
             }
         }
     }
     Bot1.Setup(1,BoardSize);
     Bot2.Setup(2,BoardSize);
     checkerBoard = new CheckerBoard(BoardSize);
     new Thread(RunCheckerBoard).Start();
     checkerBoard.UpdateBoard(_Board);
 }