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); }
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); }
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); }