Пример #1
0
        public void getAvaliablePlacementsFroShipReturns2PlacementsForShipOfLenght3InHorizontalGrid1x4()
        {
            Grid g      = new Grid(1, 4);
            var  result = g.GetAvailablePlacements(3);

            Assert.AreEqual(2, result.Count());

            Assert.AreEqual(3, result.First().Count());
            Assert.AreEqual(3, result.Last().Count());
        }
Пример #2
0
        public void getAvaliablePlacementsFroShipReturns3PlacementsForShipOfLenght2InHorizontalGrid1x6AfterSquareIsElimianted()
        {
            Grid g = new Grid(1, 6);

            g.eliminateSquares(new List <Square> {
                new Square(0, 2)
            });
            var result = g.GetAvailablePlacements(2);

            Assert.AreEqual(3, result.Count());
        }
Пример #3
0
        public void getAvaliablePlacementsFroShipReturns3PlacementsForShipOfLenght3InVerticalGrid5x1()
        {
            Grid g      = new Grid(5, 1);
            var  result = g.GetAvailablePlacements(3);

            Assert.AreEqual(3, result.Count());

            foreach (var seq in result)
            {
                Assert.AreEqual(3, seq.Count());
            }
        }
Пример #4
0
        private int CreateGrid()
        {
            int trigger          = 1;
            int shipLength       = 5;
            var availableSquares = gr.GetAvailablePlacements(shipLength);                                   //dohvaćanje mogućih pozicija na gridu za ship duljine 5

            if (ChooseRandomShipPositions_AddToFleet_Eliminate(availableSquares) == 404)
            {
                return(404);
            }
            ;                                                                                              //uzima random poziciju od mogućih pozicija, dodaje u flotu, te eliminira iz grida
            for (int i = 0; i < 9; ++i)
            {
                if (trigger < 3)
                {
                    shipLength = 4;
                }
                if (trigger < 6 && trigger >= 3)
                {
                    shipLength = 3;
                }
                if (trigger <= 10 && trigger >= 6)
                {
                    shipLength = 2;
                }


                availableSquares = gr.GetAvailablePlacements(shipLength);
                if (ChooseRandomShipPositions_AddToFleet_Eliminate(availableSquares) == 404)
                {
                    return(404);
                }
                ;
                ++trigger;
            }
            return(1);
        }
Пример #5
0
        private int generateComputerGrid()
        {
            int trigger          = 1;
            int shipLength       = 5;
            var availableSquares = computerGrid.GetAvailablePlacements(shipLength);

            if (ChooseRandomShipPositions_AddToFleet_Eliminate(availableSquares) == 404)
            {
                return(404);
            }
            ;
            for (int i = 0; i < 9; ++i)
            {
                if (trigger < 3)
                {
                    shipLength = 4;
                }
                if (trigger < 6 && trigger >= 3)
                {
                    shipLength = 3;
                }
                if (trigger <= 10 && trigger >= 6)
                {
                    shipLength = 2;
                }


                availableSquares = computerGrid.GetAvailablePlacements(shipLength);
                if (ChooseRandomShipPositions_AddToFleet_Eliminate(availableSquares) == 404)
                {
                    return(404);
                }
                ;
                ++trigger;
            }
            return(1);
        }
Пример #6
0
        public void getAvaliablePlacementsFroShipReturns2PlacementsForShipOfLenght2InVerticalGrid5x1AfterSquareIsElimianted()
        {
            Grid g = new Grid(5, 1);

            g.eliminateSquares(new List <Square> {
                new Square(1, 0)
            });
            var result = g.GetAvailablePlacements(2);

            Assert.AreEqual(2, result.Count());

            foreach (var seq in result)
            {
                Assert.AreEqual(2, seq.Count());
            }
        }
Пример #7
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);
        }
Пример #8
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;
                }
            }
        }