public void HitShipReturnsResultOfShooting() { fleet Fleet = new fleet(); Fleet.addShip(new List <Square> { new Square(1, 4), new Square(1, 5), new Square(1, 6) }); Fleet.addShip(new List <Square> { new Square(4, 5), new Square(5, 5) }); var hit = Fleet.Hit(new Square(1, 4)); Assert.AreEqual(HitResult.Hit, hit); hit = Fleet.Hit(new Square(1, 5)); Assert.AreEqual(HitResult.Hit, hit); hit = Fleet.Hit(new Square(1, 6)); Assert.AreEqual(HitResult.Sunken, hit); hit = Fleet.Hit(new Square(1, 9)); Assert.AreEqual(HitResult.Missed, hit); hit = Fleet.Hit(new Square(4, 5)); Assert.AreEqual(HitResult.Hit, hit); hit = Fleet.Hit(new Square(5, 5)); Assert.AreEqual(HitResult.Sunken, hit); }
public void AddShipCreatesNewShipInTheFleet() { fleet Fleet = new fleet(); Fleet.addShip(new List <Square> { new Square(1, 4), new Square(1, 5), new Square(1, 6) }); Assert.AreEqual(1, Fleet.Ships.Count()); Assert.IsTrue(Fleet.Ships.First().squares.Contains(new Square(1, 4))); Assert.IsTrue(Fleet.Ships.First().squares.Contains(new Square(1, 5))); Assert.IsTrue(Fleet.Ships.First().squares.Contains(new Square(1, 6))); Fleet.addShip(new List <Square> { new Square(4, 5), new Square(5, 5), new Square(6, 5) }); Assert.AreEqual(2, Fleet.Ships.Count()); }
private int ChooseRandomShipPositions_AddToFleet_Eliminate(IEnumerable <IEnumerable <modelNmspc.Square> > availablePositions) { int result = availablePositions.Count(); int randomPosition = rand.Next(0, result); int counter = 0; List <modelNmspc.Square> squaresToAddAndElim = null; IEnumerable <modelNmspc.Square> ship = null; using (var sequenceEnum = availablePositions.GetEnumerator()) { while (sequenceEnum.MoveNext()) { if (counter == randomPosition) { ship = sequenceEnum.Current; } ++counter; } } int initCounter = 0; if (ship == null) { return(404); } using (var sequenceEnum = ship.GetEnumerator()) { while (sequenceEnum.MoveNext()) { if (initCounter == 0) { var square = sequenceEnum.Current; squaresToAddAndElim = new List <modelNmspc.Square> { new modelNmspc.Square(square.row, square.column) }; initCounter = 1; } else { var square = sequenceEnum.Current; squaresToAddAndElim.Add(square); } } } computerFleet.addShip(squaresToAddAndElim); modelNmspc.squareTerminator terminator = new modelNmspc.squareTerminator(computerGrid.Rw, computerGrid.Cl); var toElim = terminator.ToEliminate(squaresToAddAndElim); computerGrid.eliminateSquares(toElim); return(1); }
private fleet placeShips(IEnumerable <int> shipLengths) { List <int> lengths = new List <int>(shipLengths.OrderByDescending(x => x)); Grid grid = new Grid(rows, columns); //squareTerminator terminator = new squareTerminator(rows,columns); fleet Fleet = new fleet(); while (lengths.Count() > 0) { var placements = grid.GetAvailablePlacements(lengths[0]); if (placements.Count() == 0) { return(null); } lengths.RemoveAt(0); int index = rand.Next(0, placements.Count()); Fleet.addShip(placements.ElementAt(index)); var toElimiante = terminator.ToEliminate(placements.ElementAt(index)); grid.eliminateSquares(toElimiante); } return(Fleet); }
private int ChooseRandomShipPositions_AddToFleet_Eliminate(IEnumerable <IEnumerable <modelNmspc.Square> > availablePositions) { int result = availablePositions.Count(); int randomPosition = random.Next(0, result); int counter = 0; List <modelNmspc.Square> squaresToAddAndElim = null; IEnumerable <modelNmspc.Square> ship = null; using (var sequenceEnum = availablePositions.GetEnumerator()) { while (sequenceEnum.MoveNext()) //prolazak kroz validne pozicije, { // te random odabir jedne od njih if (counter == randomPosition) { ship = sequenceEnum.Current; } ++counter; } } int initCounter = 0; if (ship == null) { return(404); } using (var sequenceEnum = ship.GetEnumerator()) { while (sequenceEnum.MoveNext()) { if (initCounter == 0) //prolazak kroz svaki square u izabranoj validnoj poziciji { var square = sequenceEnum.Current; squaresToAddAndElim = new List <modelNmspc.Square> { new modelNmspc.Square(square.row, square.column) }; initCounter = 1; } else { var square = sequenceEnum.Current; squaresToAddAndElim.Add(square); } } } //using (var sequenceEnum = squaresToAddAndElim.GetEnumerator()) //{ // while (sequenceEnum.MoveNext()) // { //used for debugging only // var square = sequenceEnum.Current; // var c = square.column; // var r = square.row; // } //} fl.addShip(squaresToAddAndElim); //dodaje u flotu sve shipove koji su random odabrani modelNmspc.squareTerminator terminator = new modelNmspc.squareTerminator(gr.Rw, gr.Cl); //eliminira iz grida sve okolne pozicije odabranih shipova var toElim = terminator.ToEliminate(squaresToAddAndElim); gr.eliminateSquares(toElim); //eliminira iz grida sve square-ove odabranih shipova //Console.WriteLine("eliminirano "+toElim.Count()); //used for debugging return(1); }
private void playersButtonGridClickHandler(Button clickedButton) // event handler for buttons in pre game state (player choosing ships positions) { int x = 0, y = 0; foreach (var list in playerButtons) { if (list.IndexOf(clickedButton) != -1) // get index of clicked button { x = playerButtons.IndexOf(list); y = list.IndexOf(clickedButton); } } if (shipHead == null) // if button that's clicked is first square of ship { clickedButton.BackColor = shipPlacedOnGridColor; getCurrentPlacingShipLength(); shipHead = new modelNmspc.Square(x, y); currentShipMaking = new List <modelNmspc.Square> { shipHead }; List <modelNmspc.Square> s = checkForAvailableSquaresAfterSquareIsChosen(new modelNmspc.Square(x, y)); if (s.Count() == 0) { clickedButton.BackColor = Color.Green; shipHead = null; currentShipMaking.Clear(); } else { ChangeColorOfAvailableSquares(s); } } else { if (currentShipMaking[0].row < x) { for (int i = 1; i < currentPlacingShipLength; i++) { currentShipMaking.Add(new modelNmspc.Square(currentShipMaking[0].row + i, currentShipMaking[0].column)); } foreach (var s in currentShipMaking) { playerButtons[s.row][s.column].BackColor = shipPlacedOnGridColor; playerButtons[s.row][s.column].Enabled = false; } } if (currentShipMaking[0].row > x) { for (int i = 1; i < currentPlacingShipLength; i++) { currentShipMaking.Add(new modelNmspc.Square(currentShipMaking[0].row - i, currentShipMaking[0].column)); } foreach (var s in currentShipMaking) { playerButtons[s.row][s.column].BackColor = shipPlacedOnGridColor; playerButtons[s.row][s.column].Enabled = false; } currentShipMaking.Reverse(); } if (currentShipMaking[0].column < y) { for (int i = 1; i < currentPlacingShipLength; i++) { currentShipMaking.Add(new modelNmspc.Square(currentShipMaking[0].row, currentShipMaking[0].column + i)); } foreach (var s in currentShipMaking) { playerButtons[s.row][s.column].BackColor = shipPlacedOnGridColor; playerButtons[s.row][s.column].Enabled = false; } } if (currentShipMaking[0].column > y) { for (int i = 1; i < currentPlacingShipLength; i++) { currentShipMaking.Add(new modelNmspc.Square(currentShipMaking[0].row, currentShipMaking[0].column - i)); } foreach (var s in currentShipMaking) { playerButtons[s.row][s.column].BackColor = shipPlacedOnGridColor; playerButtons[s.row][s.column].Enabled = false; } currentShipMaking.Reverse(); } shipHead = null; playerFleet.addShip(currentShipMaking); var toElim = terminator.ToEliminate(currentShipMaking); playerGrid.eliminateSquares(toElim); var avaSquares = playerGrid.GetAvailablePlacements(1); foreach (var list in playerButtons) { foreach (var button in list) { if (button.BackColor == Color.Green) { button.BackColor = Color.Gray; button.Enabled = false; } } } foreach (var item in avaSquares) { foreach (var square in item) { playerButtons[square.row][square.column].BackColor = Color.Green; playerButtons[square.row][square.column].Enabled = true; } } currentShipMaking = null; changeLabel(); if (playerFleet.getNumberOfShips() == 10) { button_WOC1.Enabled = true; button_WOC1.ButtonColor = Color.DarkRed; } } }