Example #1
0
//END OF BATTLESHIP() FUNCTION

        static void PlaceShipsLoop(BattleShip game, bool player1Turn)
        {
            ICollection <Ship>       pShips = player1Turn ? game.Player1Ships : game.Player2Ships;
            ICollection <ECellState> gShips = player1Turn ? game.Ships1 : game.Ships2;

            ECellState[,] board = player1Turn ? game._board2 : game._board1;
            while (pShips.Count < game.ShipCountPerPlayer)
            {
                if (!game.NextMoveByPlayer2 && game.Player2Name == "AI")
                {
                    PlaceShipsAI(game, gShips, board);
                }
                else
                {
                    Console.Clear();
                    BattleShipConsoleUi.DrawBoard(game.GetBoards(), game.NextMoveByPlayer2, game.Player1Name, game.Player2Name);
                    Console.WriteLine("Place boat, enter start and end square i.e a1-a5 to place boat with length 5");
                    Console.WriteLine();
                    Console.WriteLine(
                        $"Now placing {gShips.ToArray()[0]}, it requires {(int) gShips.ToArray()[0]} Cells");
                    PlaceShips(game, gShips, board, Console.ReadLine() ?? "", true);
                    pShips = player1Turn ? game.Player1Ships : game.Player2Ships;
                    gShips = player1Turn ? game.Ships1 : game.Ships2;
                    board  = player1Turn ? game._board2 : game._board1;
                }
            }
            //Thread.Sleep(800);
        }
Example #2
0
        private static void Main()
        {
            BattleShipConsoleUi.Greet();

            ReservedItems.Add("r", "Return to previous");
            ReservedItems.Add("m", "Return to main");
            ReservedItems.Add("x", "Exit");

            var menuNewGame = new Menu(MenuLevel.Level1, ReservedItems);

            menuNewGame.AddMenuItem(new MenuItem("Human vs human", "1", () => { BattleShip();
                                                                                return("m"); }));
            menuNewGame.AddMenuItem(new MenuItem("Human vs AI", "2", () => { BattleShip("AI");
                                                                             return("m"); }));
            //menuNewGame.AddMenuItem(new MenuItem("AI vs AI", "3", DefaultMenuAction));

            var menuColor = new Menu(MenuLevel.Level1, ReservedItems);

            menuColor.AddMenuItem(new MenuItem("red", "1", ColorOptionsAction));
            menuColor.AddMenuItem(new MenuItem("green", "2", ColorOptionsAction));
            menuColor.AddMenuItem(new MenuItem("blue", "3", ColorOptionsAction));
            menuColor.AddMenuItem(new MenuItem("yellow", "4", ColorOptionsAction));
            menuColor.AddMenuItem(new MenuItem("magenta", "5", ColorOptionsAction));

            var mainMenu = new Menu(MenuLevel.Level0, ReservedItems);

            mainMenu.AddMenuItem(new MenuItem("New Game", "n", menuNewGame.RunMenu));
            mainMenu.AddMenuItem(new MenuItem("Load Game", "l", () =>
            {
                // create dummy game
                var game = new BattleShip(5, 5, "Player 1", "Player 2");
                _theGame = game;

                if (mainMenu.MenuItems.ContainsKey("d"))
                {
                    mainMenu.MenuItems.Remove("d");
                    mainMenu.AddMenuItem(new MenuItem($"Player {(game.NextMoveByPlayer2 ? game.Player1Name : game.Player2Name)} drop a bomb on ENEMY board!", "d", () => BombAction(game, mainMenu)));
                }
                else
                {
                    mainMenu.AddMenuItem(new MenuItem($"Player {(game.NextMoveByPlayer2 ? game.Player1Name : game.Player2Name)} drop a bomb on ENEMY board!", "d", () => BombAction(game, mainMenu)));
                }
                return(LoadGameAction(game, mainMenu));
            }));
            mainMenu.AddMenuItem(new MenuItem("Color Options", "c", menuColor.RunMenu));
            mainMenu.RunMenu();
        }
        private static void GameFlow()
        {
            Console.WriteLine("===========================");
            Console.WriteLine("");
            Console.WriteLine(" NOW LET'S START THE GAME");
            Console.WriteLine("");
            Console.WriteLine("===========================");
            CreatePassMenuItems();
            //GAME PROCCESS
            while (GameHandler.Player1.GetAmountOfBombedFields() <= 25 ||
                   GameHandler.Player2.GetAmountOfBombedFields() <= 25)
            {
                if (GameHandler.CurrentMoveByPlayerOne)
                {
                    Console.WriteLine("");
                    Console.WriteLine("PLAYER'S 1 TURN: \n This is your board:");
                    BattleShipConsoleUi.DrawBoard(GameHandler.Player1.OwnBoard);
                    Console.WriteLine(
                        "This is board of your opponent (Player 2). \n It might seem empty now but you will fill it up.");
                    BattleShipConsoleUi.DrawBoard(GameHandler.Player1.AttackBoard);
                }
                else
                {
                    Console.WriteLine("");
                    Console.WriteLine("PLAYER'S 2 TURN: \n This is your board:");
                    BattleShipConsoleUi.DrawBoard(GameHandler.Player2.OwnBoard);
                    Console.WriteLine(
                        "This is board of your opponent (Player 1). \n It might seem empty now but you will fill it up.");
                    BattleShipConsoleUi.DrawBoard(GameHandler.Player2.AttackBoard);
                }

                Console.WriteLine("Now make your next move:");
                GameHandler.PlayersMove();
                SaveGameState();
                Console.WriteLine("=====================================");
                Console.WriteLine(" Pass the device to the next player?");
                Console.WriteLine(" Remember to hit `s` if you want to save and continue your game later!");
                menuPassOrExit.RunMenu();
                Console.WriteLine("=====================================");
            }
        }
        private static void SeconPlayerShipPlacement(int width, int height, Menu menuShips)
        {
            //PLAYER TWO PLACES SHIPS
            Console.WriteLine("===========================");
            Console.WriteLine(" This is Player Two board:");
            GameHandler.Player2.OwnBoard = new GameBoard(height, width, true);
            BattleShipConsoleUi.DrawBoard(GameHandler.Player2.OwnBoard);
            Console.WriteLine("Let's start placing ships one by one");
            Console.WriteLine("Choose a ship to place:");
            Console.WriteLine("===========================");
            while (GameHandler.CurrentPlayerAvilableShipsCount() > 0 && _shipMenuExit == false)
            {
                Console.WriteLine($"\nAviable Ships for p2: {GameHandler.CurrentPlayerAvilableShipsCount()}");
                //new
                GameHandler.CreateCurrentShipLocator();
                menuShips.RunMenu(); // if ship is available then GameHandler.choosenShipIsAvailable = true other way false
                if (GameHandler.choosenShipIsAvailable)
                {
                    PlayerChooseOrientation();
                    int x = UserChoiceXPosition();
                    int y = UserChoiceYPosition();
                    GameHandler.SetShipLocatorPosition(x - 1, y - 1);
                    GameHandler.PlaceShipForCurrentPlayer();

                    BattleShipConsoleUi.DrawBoard(GameHandler.Player2.OwnBoard);
                }
                else
                {
                    Console.WriteLine("=======================");
                    Console.WriteLine(" Ship is not available,\nChoose another one");
                    Console.WriteLine("=======================");
                }
            }

            //Create an attack board
            GameHandler.Player2.AttackBoard = new GameBoard(height, width, true);
        }
Example #5
0
        // MAIN FUNCTION ENDS HERE//f

        static string BattleShip(string optionalstr = "")
        {
            //I PRIMARY SETTINGS, NAME1, NAME2, DIMENSIONS, TOUCHING OPTIONS
            var    player1Name = ValidateName("Please specify player name for player 1:", 1);
            string player2Name;

            if (optionalstr == "AI")
            {
                player2Name = optionalstr;
            }
            else
            {
                player2Name = ValidateName("Please specify player name for player 2:", 2);
            }

            var dimensions        = ValidateBoardDimensions("Please specify board dimensions X (1-20), Y (1-20):");
            var x                 = dimensions.x;
            var y                 = dimensions.y;
            var touchingOptionInt =
                ValidateTouchingOption(
                    "Please specify touching option: 1 - can touch, 2 - cant touch, 3 - corners can touch");
            var touchingOptionForGame = (ETouchingRule)touchingOptionInt;

            Console.WriteLine(
                $"Starting new game between {player1Name} & {player2Name}, on a {x}x{y} sized board, with touching option {touchingOptionForGame}");

            //II BOAT COUNT SETTINGS
            Console.Clear();
            Console.WriteLine("Please place your boats:");
            var game = new BattleShip(x, y, player1Name, player2Name)
            {
                TouchingRule = touchingOptionForGame
            };

            BattleShipConsoleUi.DrawBoard(game.GetBoards(), game.NextMoveByPlayer2, game.Player1Name, game.Player2Name);
            SetShipCount(game);
            game.ShipCountPerPlayer = _numberOfShipsPerPlayer;


            // III BOAT PLACEMENT LOOPS
            //Console.WriteLine($"NEXT MOVE BY X? {game.NextMoveByX}");
            // THIS NEXT LINE IS FOR WHATEVER REASON REALLLY REALLLY IMPORTANT...
            game._nextMoveByPlayer2 = true;
            PlaceShipsLoop(game, true);
            Console.Clear();
            game._nextMoveByPlayer2 = !game._nextMoveByPlayer2;
            BattleShipConsoleUi.DrawBoard(game.GetBoards(), game.NextMoveByPlayer2, game.Player1Name, game.Player2Name);
            // TODO PlaceShipsLoop for AI
            // false means player2turn
            PlaceShipsLoop(game, false);

            Console.Clear();
            game._nextMoveByPlayer2 = !game._nextMoveByPlayer2;
            BattleShipConsoleUi.DrawBoard(game.GetBoards(), game.NextMoveByPlayer2, game.Player1Name, game.Player2Name);

            //Console.WriteLine($"NEXT MOVE BY X? {game.NextMoveByPlayer2}");
            Console.WriteLine("ALL SHIPS PLACED BY PLAYERS!");
            Console.WriteLine();
            Console.WriteLine("START BOMBING!");
            Console.WriteLine();
            // create DOMAINGAME
            _game = new Game()
            {
                CreationDT = DateTime.Now,
                PlayerA    = game.Player1Name,
                PlayerB    = game.Player2Name
            };

            /*using var db = new ApplicationDbContext();
             * Game.Id = db.Games.OrderBy(g => g.CreationDT).Last().Id + 1;
             * Console.WriteLine($"WHAT IS THE GAME ID?? {Game.Id}");*/

            var gameLoopMenu = new Menu(MenuLevel.Level1, ReservedItems);

            if (gameLoopMenu.MenuItems.ContainsKey("d"))
            {
                gameLoopMenu.MenuItems.Remove("d");
                gameLoopMenu.AddMenuItem(new MenuItem($"Player {(game.NextMoveByPlayer2 ? game.Player1Name : game.Player2Name)} drop a bomb on ENEMY board!", "d", () => BombAction(game, gameLoopMenu)));
            }
            else
            {
                gameLoopMenu.AddMenuItem(new MenuItem($"Player {(game.NextMoveByPlayer2 ? game.Player1Name : game.Player2Name)} drop a bomb on ENEMY board!", "d", () => BombAction(game, gameLoopMenu)));
            }

            gameLoopMenu.AddMenuItem(new MenuItem(
                                         $"Save game",
                                         userChoice: "s",
                                         () => SaveGameAction(game))
                                     );

            gameLoopMenu.AddMenuItem(new MenuItem(
                                         $"Load game",
                                         userChoice: "l",
                                         () => LoadGameAction(game, gameLoopMenu))
                                     );

            var userChoice = gameLoopMenu.RunMenu();

            return(userChoice);
        }