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