// Tests for board size 12 public void Run() { Coord stc1 = Constants.StringToCoord("A1"); Coord stc2 = Constants.StringToCoord("E10"); bool tc1 = Constants.ValidCoord("A1"); bool tc2 = Constants.ValidCoord("E10"); bool tc3 = !Constants.ValidCoord("M1"); bool tc4 = !Constants.ValidCoord("F13"); bool tc5 = !Constants.ValidCoord("2A"); Constants.Teams got1 = Constants.GetOppositeTeam(Constants.Teams.Red); Constants.Teams got2 = Constants.GetOppositeTeam(Constants.Teams.Blue); Tile t1 = new Tile(new Coord("A", 1)); Tile t2 = new Tile(new Coord("L", 12)); Settlement s1 = new Settlement(Constants.Teams.Red, t1); bool s1Enemy = !s1.InEnemyTerritory; Settlement s2 = new Settlement(Constants.Teams.Blue, t1); bool s2Enemy = s2.InEnemyTerritory; Settlement s3 = new Settlement(Constants.Teams.Red, t2); bool s3Enemy = s3.InEnemyTerritory; Settlement s4 = new Settlement(Constants.Teams.Blue, t2); bool s4Enemy = !s4.InEnemyTerritory; Board board = new Board(); Tile bgt1 = board.GetTile("A", 1); Tile bgt2 = board.GetTile("E", 10); Tile bgt3 = board.GetTile(bgt1.Coord); Tile bgt4 = board.GetTile(bgt2.Coord); Tile tgt1 = board.TryGetTile(0, 0); bool tgtc1 = tgt1.Coord == new Coord("A", 1); Tile tgt2 = board.TryGetTile(4, 9); bool tgtc2 = tgt2.Coord == new Coord("E", 10); bool tgt3 = board.TryGetTile(12, 12) == null; bool tgt4 = board.TryGetTile(-1, -1) == null; var bgg1 = board.GetGrid(stc1, Constants.MissileExplosionSize); bool bgg1s = bgg1.Count == 4; var bgg2 = board.GetGrid(stc2, Constants.MissileExplosionSize); bool bgg2s = bgg2.Count == 9; Game game = new Game(string.Empty, string.Empty); game.TeamTurn = Constants.Teams.Red; bool cy1 = game.Year == 1; var aps1 = game.AttemptPlaySettlements("A1"); bool aps1c = aps1.Count == 0; bool aps1cp = game.board.GetTile("A", 1).HasSettlement; var pm1 = game.PlayMissiles("L12"); bool pm1c = pm1.Count == 0; game.SwitchTeamTurn(); bool ctt1 = game.TeamTurn == Constants.Teams.Blue; var aps2 = game.AttemptPlaySettlements("L12", "A1"); bool aps2c = aps2.Count == 1; bool aps2cc = aps2[0] == "A1"; bool aps2cp = game.board.GetTile("L", 12).HasSettlement; var pm2 = game.PlayMissiles("A1"); bool pm2c = pm2.Count == 1; bool sc1 = pm2[0].Tile.Coord == new Coord("A", 1); bool st1 = pm2[0].OwningTeam == Constants.Teams.Red; //game.RemoveDestroyedSettlements(pm2); var at1 = game.board.GetTile("A", 1); bool ats1 = at1.HasSettlement == false; bool kp1 = !game.KillPopulation; game.Advance(); bool cy2 = game.Year == 2; bool cp1 = game.RedTeam.Population == 1000; bool cp2 = game.BlueTeam.Population == 1000; game.RemoveDestroyedSettlements(game.PlayMissiles("A1")); game.SwitchTeamTurn(); bool ctt2 = game.TeamTurn == Constants.Teams.Red; var f1 = game.AttemptPlaySettlements("C8"); bool f1c = f1.Count == 0; game.Advance(); bool cy3 = game.Year == 3; bool cp3 = game.RedTeam.Population == 4000; bool cp4 = game.BlueTeam.Population == 3000; game.KillPopulation = true; game.Advance(); bool cy4 = game.Year == 4; bool cp5 = game.RedTeam.Population == 12000; bool cp6 = game.BlueTeam.Population == 7000; var pm3 = game.PlayMissiles("D9"); game.RemoveDestroyedSettlements(pm3); game.Advance(); bool cy5 = game.Year == 5; bool cp7 = game.RedTeam.Population == 4000; bool cp8 = game.BlueTeam.Population == 5000; Debug.WriteLine(""); }
public List <GameInstruction> ProcessMissiles(string text) { List <GameInstruction> instructions = new List <GameInstruction>(); if (text != "NONE" && text != "NO") { List <string> moves = new List <string>(); string[] commaSplit = text.Split(','); foreach (var fragment in commaSplit) { string[] spaceSplit = fragment.Trim().Split(' '); foreach (var coord in spaceSplit) { moves.Add(coord); } } if (moves.Count > game.CurrentPlayingTeam.Moves) { var i = new GameInstruction("Entered too many moves. Please enter your settlement coordinates again.", OutputChannel); instructions.Add(i); return(instructions); } foreach (var move in moves) { if (!Constants.ValidCoord(move)) { var i = new GameInstruction("Invalid move. Please enter your missile coordinates again.", OutputChannel); instructions.Add(i); return(instructions); } } List <Settlement> destroyedSettlements = game.PlayMissiles(moves); if (destroyedSettlements.Count > 0) { string teamDestroyed = string.Empty; string enemyDestroyed = string.Empty; int teamDestroyedNum = 0; int enemyDestroyedNum = 0; foreach (var settlement in destroyedSettlements) { if (settlement.OwningTeam == game.TeamTurn) { teamDestroyed += $" {settlement.Tile.Coord.ToString()}"; teamDestroyedNum++; } else { enemyDestroyed += $" {settlement.Tile.Coord.ToString()}"; enemyDestroyedNum++; } } if (!string.IsNullOrEmpty(teamDestroyed)) { var teamI = new GameInstruction($"Your destroyed settlements:{teamDestroyed}. These settlements are lost.", OutputChannel); instructions.Add(teamI); } if (debug) { var enemyI = new GameInstruction($"The following settlements for the enemy side were destroyed:{enemyDestroyed}. These settlements are lost.", OutputChannel); instructions.Add(enemyI); } else { var numberDestroyedI = new GameInstruction($"You have destroyed {enemyDestroyedNum} enemy settlements.", OutputChannel); var enemyI = new GameInstruction($"Your destroyed settlements:{enemyDestroyed}. These settlements are lost.", OtherChannel); instructions.Add(numberDestroyedI); instructions.Add(enemyI); } } else { var noneDestroyedI = new GameInstruction($"You have destroyed 0 enemy settlements.", OutputChannel); int randWord = game.random.Next(0, 2); var enemyNoneDestroyedI = new GameInstruction($"The enemy has launched a missile {(randWord == 0 ? "strike" : "attack")} but did not hit any of your settlements.", OtherChannel); instructions.Add(noneDestroyedI); instructions.Add(enemyNoneDestroyedI); } game.RemoveDestroyedSettlements(destroyedSettlements); } instructions.AddRange(SwapHalf()); return(instructions); }