Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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;
                }
            }
        }