public static string GetBoardString(GameBoard gameBoard) { var sb = new StringBuilder(); //sb.Append(" A. B. C. D. E. F. G. H. I. J. \n"); sb.Append(" "); for (int j = 0; j < Rules.Boardcolumns - 1; j++) { sb.Append(GameBoard.Coordinates[j]); sb.Append(". "); } sb.Append(GameBoard.Coordinates[Rules.Boardcolumns - 1]); sb.Append(". \n"); int i = 0; foreach (var boardRow in gameBoard.Board) { sb.Append(" " + GetRowSeparator(boardRow.Count) + "\n"); sb.Append((i + 1).ToString()); if ((i + 1) < 10) { sb.Append(" "); } i++; sb.Append(GetRowWithData(boardRow) + "\n"); } sb.Append(" " + GetRowSeparator(gameBoard.Board.First().Count)); return(sb.ToString()); }
public static void RunPvPGame() { Abort = false; var Board1 = new GameBoard(Rules.Boardrows, Rules.Boardcolumns); var Board2 = new GameBoard(Rules.Boardrows, Rules.Boardcolumns); var Map1 = new GameBoard(Rules.Boardrows, Rules.Boardcolumns); var Map2 = new GameBoard(Rules.Boardrows, Rules.Boardcolumns); var Player1 = new Player("Player 1", Board1, Map1); var Player2 = new Player("Player 2", Board2, Map2); Console.Clear(); SetUpGame(Player1, Player2); PlayGame(Player1, Player2); }
public static void FillSquares(AppDbContext ctx, Domain.GameBoard ogboard, GameBoard tofillboard) { for (int i = 0; i < ogboard.Board.Count; i++)//p1 board { for (int j = 0; j < ogboard.Board[i].Count; j++) { var gameBoardSquare = new GameboardSquare() { GameBoard = tofillboard, x = i, y = j, Value = ogboard.Board[i][j].ToString() }; tofillboard.Squares.Add(gameBoardSquare); ctx.GameboardSquares.Add(gameBoardSquare); } } }
// public int BoardShipsID { get; set; } // public List<Ship> BoardShips { get; set; } public Domain.GameBoard GetDomainBoard() { var domainboard = new Domain.GameBoard(rows, cols); //var board = new List<List<Domain.BoardSquareState>>(rows); foreach (var square in this.Squares) { domainboard.Board[square.x][square.y] = Domain.GameBoard.Convert(square.Value); } foreach (var ship in Ships) { Console.WriteLine("ship"); domainboard.Ships.Add(ship.GetDomainShip()); } return(domainboard); }
public static void FillShips(AppDbContext ctx, Domain.GameBoard ogboard, GameBoard tofillboard) { foreach (var ship in ogboard.Ships)//p1 { var lastship = new Ship() { Health = ship.Health, Length = ship.Length }; //ctx.BoardShips.Add(new BoardShips(){GameBoard = tofillboard, Ship = lastship}); foreach (var location in ship.Locations) { var loc = new ShipsLocation() { y = location[0], x = location[1], Ship = lastship }; lastship.ShipsLocations.Add(loc); } lastship.GameBoard = tofillboard; tofillboard.Ships.Add(lastship); } }
public static void DrawPlacing(Player player, int shipLen, bool rotation, int[] coords, ConsoleColor shipcolor, string right) { Console.Clear(); GameBoard previewBoard = new GameBoard(player.Board.Board.Count, player.Board.Board[0].Count); previewBoard = GameBoard.CloneBoard(player.Board); AI.SetPlace(previewBoard, coords, shipLen, rotation); var lines = Regex.Split(GetBoardString(previewBoard), "\r\n|\r|\n"); var rightlines = new string[lines.Length]; var rightlinessplit = Regex.Split(right, "\r\n|\r|\n"); for (int i = 0; i < lines.Length; i++) { if (i < rightlinessplit.Length) { rightlines[i] = rightlinessplit[i]; } else { rightlines[i] = " "; } } Console.WriteLine(GetHeader(player)); bool drawship = false; if (rotation) { for (int i = 0; i < lines.Length; i++) { if (coords[0] * 2 + 2 == i) { drawship = true; } if (coords[0] * 2 + 2 + shipLen * 2 - 1 == i) { drawship = false; } if (drawship) { for (int j = 0; j < lines[i].Length; j++) { if (j == coords[1] * 4 + 3) { Console.ForegroundColor = shipcolor; } if (j == coords[1] * 4 + 2 + 4) { Console.ResetColor(); } Console.Write(lines[i][j]); } Console.Write(GetSeparator()); Console.Write(rightlines[i]); Console.Write("\n"); } else { Console.Write(lines[i]); Console.Write(GetSeparator()); Console.Write(rightlines[i]); Console.Write("\n"); } } } else { for (int i = 0; i < lines.Length; i++) { if (coords[0] * 2 + 2 == i) { for (int j = 0; j < lines[i].Length; j++) { if (j == coords[1] * 4 + 3) { Console.ForegroundColor = shipcolor; } if (j == coords[1] * 4 + 2 + shipLen * 4 - 1) { Console.ResetColor(); } Console.Write(lines[i][j]); } Console.Write(GetSeparator()); Console.Write(rightlines[i]); Console.Write("\n"); } else { Console.Write(lines[i]); Console.Write(GetSeparator()); Console.Write(rightlines[i]); Console.Write("\n"); } } } Console.WriteLine(GetFooter(player)); }
public static void Placing(Player player, GameBoard board, int[] coords = null) { player.Ships = new List <Ship>(Rules.Ships); if (coords == null) { coords = new[] { 0, 0 }; } bool rotation = false; var shipsAmount = player.Ships.Count; ConsoleColor shipcolor = ConsoleColor.Green; Ship selectedShip = player.Ships[0]; DrawPlacing(player, selectedShip.Length, rotation, coords, shipcolor, DrawSwitcher(player, selectedShip)); while (shipsAmount > 0) { if (Abort) { break; } shipsAmount = player.Ships.Count; if (shipsAmount == 0) { break; } switch (Console.ReadKey(true).Key) { case ConsoleKey.UpArrow: if (rotation) { if (coords[0] == 0) { coords[0] = board.Board.Count - 1 - selectedShip.Length + 1; } else { coords[0]--; } } else { if (coords[0] == 0) { coords[0] = board.Board.Count - 1; } else { coords[0]--; } } break; case ConsoleKey.DownArrow: coords[0]++; break; case ConsoleKey.RightArrow: coords[1]++; break; case ConsoleKey.LeftArrow: if (!rotation) { if (coords[1] == 0) { coords[1] = (board.Board[0].Count - 1) - selectedShip.Length + 1; } else { coords[1]--; } } else { if (coords[1] == 0) { coords[1] = (board.Board[0].Count - 1); } else { coords[1]--; } } break; case ConsoleKey.Enter: if (shipcolor == ConsoleColor.Green) { AI.SetPlace(board, coords, selectedShip.Length, rotation); player.Ships.Remove(selectedShip); if (player.Ships.Count != 0) { selectedShip = player.Ships[0]; } } break; case ConsoleKey.X: Abort = true; break; case ConsoleKey.D1: //switch if (player.Ships.IndexOf(selectedShip) == player.Ships.Count - 1) { selectedShip = player.Ships[0]; } else { selectedShip = player.Ships[player.Ships.IndexOf(selectedShip) + 1]; } break; case ConsoleKey.D2: //rotate if (rotation) { rotation = false; } else { rotation = true; } break; case ConsoleKey.D3: try { var shiptoremove = AI.FindShip(player.Board, Target("Use the arrow keys to select\nEnter - remove", player, coords)); foreach (var point in shiptoremove.Locations) { board.Board[point[0]][point[1]] = BoardSquareState.Empty; } player.Ships.Add(shiptoremove); board.Ships.Remove(shiptoremove); selectedShip = shiptoremove; } catch (Exception) { break; } break; case ConsoleKey.D4: AI.AIPlacing(player.Ships, board); break; } if (rotation == false) { if (coords[0] > (board.Board.Count - 1)) { coords[0] = 0; } if (coords[1] > (board.Board[0].Count - 1) - selectedShip.Length + 1) { coords[1] = 0; } } if (rotation) { if (coords[0] > (board.Board.Count - 1) - selectedShip.Length + 1) { coords[0] = 0; } if (coords[1] > (board.Board[0].Count - 1)) { coords[1] = 0; } } if (AI.CheckPlace(board, coords, selectedShip.Length, rotation)) { shipcolor = ConsoleColor.Green; } else { shipcolor = ConsoleColor.Red; } var menu = DrawSwitcher(player, selectedShip); DrawPlacing(player, selectedShip.Length, rotation, coords, shipcolor, menu); } if (!Abort) { var sb = new StringBuilder(); sb.Append("PRESS ANY KEY TO CONFIRM"); Draw(player, GetBoardString(board), sb.ToString()); switch (Console.ReadKey(true).Key) { case ConsoleKey.Enter: break; case ConsoleKey.X: break; } } }
public static void PlayGame(Player Player1, Player Player2, bool P2turn = false) { //game starts Abort = false; var coords = new int[2] { 0, 0 }; var status = "|"; while (Abort == false)//cycle { if (!P2turn) { coords = Target(GetBoardString(Player1.Map), Player1, coords, true); if (Player1.Map.Board[coords[0]][coords[1]] != BoardSquareState.Empty || Abort) { continue; } status = GameBoard.Shoot(Player2.Board, coords, Player1.Map); Draw(Player1, GetBoardString(Player1.Board), GetBoardString(Player1.Map), status); if (status == "MISS ") { P2turn = true; if (!Player2.AI) { coords[0] = 0; coords[1] = 0; } } } else { if (Player2.AI) { FullscreenMessage("The AI is making a move."); status = AI.AIShoot(Player1.Board, Player2.Map); Draw(Player1, GetBoardString(Player1.Board), GetBoardString(Player1.Map), status); if (status == "MISS ") { P2turn = false; } } else { Draw(Player2, GetBoardString(Player2.Board), GetBoardString(Player2.Map)); coords = Target(GetBoardString(Player2.Map), Player2, coords, true); if (Player2.Map.Board[coords[0]][coords[1]] != BoardSquareState.Empty || Abort) { continue; } status = GameBoard.Shoot(Player1.Board, coords, Player2.Map); Draw(Player2, GetBoardString(Player2.Board), GetBoardString(Player2.Map), status); if (status == "MISS ") { P2turn = false; coords[0] = 0; coords[1] = 0; } } } //check win if (AI.GetWinner(Player1, Player2) != null) { StringBuilder sb = new StringBuilder(); sb.Append(AI.GetWinner(Player1, Player2)); sb.Append(" won!"); var wstate = new State(new Player(Player1), new Player(Player2), Rules.CanTouch, P2turn); wstate.Status = "[Finished: " + sb.ToString() + "]"; SaveSystem.GameStates.Add(wstate); FullscreenMessage(sb.ToString()); break; } Console.WriteLine("PRESS ENY KEY TO CONTINUE"); switch (Console.ReadKey(true).Key) { case ConsoleKey.Enter: break; } if (status == "MISS " && !Player1.AI && !Player2.AI) { FullscreenMessage("PASS THE PC TO THE NEXT PLAYER"); } var state = new State(new Player(Player1), new Player(Player2), Rules.CanTouch, P2turn); SaveSystem.GameStates.Add(state); } if (SaveSystem.GameStates.Count != 0) { if (SaveSystem.GameStates.Last().Status == null) { SaveSystem.GameStates.Last().Status = "[" + SaveSystem.GameStates.Last().P1.ToString() + ": " + SaveSystem.GameStates.Last().P1.Board.Ships.Count + " Ships, " + SaveSystem.GameStates.Last().P2.ToString() + ": " + SaveSystem.GameStates.Last().P2.Board.Ships.Count + " Ships]"; } SaveSystem.SavesList.Add(new List <State>(SaveSystem.GameStates)); } SaveSystem.GameStates = new List <State>(); }
public Player(string name, GameBoard board, GameBoard map) { Name = name; Board = board; Map = map; }
public static void SaveToDb() { Console.WriteLine("Saving..."); var ctx = new AppDbContext(); foreach (var save in SaveSystem.SavesList) { var rules = new Rules() { CanTouch = Domain.Rules.CanTouch, Rows = Domain.Rules.Boardrows, Columns = Domain.Rules.Boardcolumns }; var player1 = new Player() { Name = save[0].P1.Name, AI = save[0].P1.AI }; var player2 = new Player() { Name = save[0].P2.Name, AI = save[0].P2.AI }; var ansave = new Save() { Rules = rules, Player1 = player1, Player2 = player2, Replay = true }; State laststate = new State(); var thissave = save; if (Domain.Rules.SaveReplays == false) { thissave = new List <Domain.State>() { save.Last() }; ansave.Replay = false; } // var p1gb = new GameBoard(); // var p2gb = new GameBoard(); // var p1map = new GameBoard(); // var p2map = new GameBoard(); foreach (var state in thissave) { var p1gb = new GameBoard() { rows = rules.Rows, cols = rules.Columns }; var p2gb = new GameBoard() { rows = rules.Rows, cols = rules.Columns }; var p1map = new GameBoard() { rows = rules.Rows, cols = rules.Columns }; var p2map = new GameBoard() { rows = rules.Rows, cols = rules.Columns }; laststate = new State() { Player1GB = p1gb, Player1Map = p1map, Player2GB = p2gb, Player2Map = p2map, P2Turn = state.P2Turn }; ctx.States.Add(laststate); //filling in the squares FillSquares(ctx, state.P1.Board, p1gb); FillSquares(ctx, state.P2.Board, p2gb); if (state == thissave.Last()) { FillSquares(ctx, state.P1.Map, p1map); FillSquares(ctx, state.P2.Map, p2map); //placing ships FillShips(ctx, state.P1.Board, p1gb); FillShips(ctx, state.P2.Board, p2gb); } ansave.States.Add(laststate); ctx.SaveChanges(); } ansave.Status = thissave.Last().Status; ansave.LastState = laststate; ctx.Saves.Add(ansave); ctx.SaveChanges(); } SaveSystem.SavesList = new List <List <Domain.State> >(); }