public BattleshipGameForm(ref LocalClient client, int ID)
 {
     InitializeComponent();
     Text += " - " + client.Username;
     InitGrid(EnemyGrid);
     AssignGridClickEvent(EnemyGrid, false);
     InitGrid(PlayerGrid);
     AssignGridClickEvent(PlayerGrid, true);
     shipPositions = new GridPosition[5, 2];
     this.client = client;
     this.client.CommandRecieved += new CommandRecievedEventHandler(GameCommandRecieved);
     gameID = ID;
     gridTarget = new GridPosition(-1, -1);
 }
        private void PlayerGrid_Click(object sender, EventArgs e)
        {
            Control control = (Control)sender;
            switch (selectedShipType)
            {
                #region Destroyer
                case ShipType.Destroyer:
                    if (shipPositions[0, 0] == null)
                    {
                        shipPositions[0, 0] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);

                    }
                    else if (shipPositions[0, 1] == null)
                    {
                        shipPositions[0, 1] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);
                        if (PlaceShip(ShipType.Destroyer) == false)
                        {
                            MessageBox.Show("Invalid ship placement: " + ShipType.Destroyer + " Please try again.", "Invalid Placement", MessageBoxButtons.OK);
                            shipPositions[0, 0] = null;
                            shipPositions[0, 1] = null;
                        }
                        else
                        {
                            for (int i = 0; i < destroyer.occupiedSquares.Length; i++)
                            {
                                pictureBox = (PictureBox)PlayerGrid.GetControlFromPosition(destroyer.occupiedSquares[i].x, destroyer.occupiedSquares[i].y);
                                pictureBox.Image = Properties.Resources.Ship;
                            }
                            btnDestroyer.Enabled = false;
                            btnDestroyer.Text = "Placed!";
                        }
                    }
                    break;
                #endregion
                #region Cruiser
                case ShipType.Cruiser:
                    if (shipPositions[1, 0] == null)
                    {
                        shipPositions[1, 0] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);
                    }
                    else if (shipPositions[1, 1] == null)
                    {
                        shipPositions[1, 1] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);
                        if (PlaceShip(ShipType.Cruiser) == false)
                        {
                            MessageBox.Show("Invalid ship placement: " + ShipType.Cruiser + " Please try again.", "Invalid Placement", MessageBoxButtons.OK);
                            shipPositions[1, 0] = null;
                            shipPositions[1, 1] = null;
                        }
                        else
                        {
                            for (int i = 0; i < cruiser.occupiedSquares.Length; i++)
                            {
                                pictureBox = (PictureBox)PlayerGrid.GetControlFromPosition(cruiser.occupiedSquares[i].x, cruiser.occupiedSquares[i].y);
                                pictureBox.Image = Properties.Resources.Ship;
                            }
                            btnCruiser.Enabled = false;
                            btnCruiser.Text = "Placed!";
                        }
                    }
                    break;
                #endregion
                #region Submarine
                case ShipType.Submarine:
                    if (shipPositions[2, 0] == null)
                    {
                        shipPositions[2, 0] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);
                    }
                    else if (shipPositions[2, 1] == null)
                    {
                        shipPositions[2, 1] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);
                        if (PlaceShip(ShipType.Submarine) == false)
                        {
                            MessageBox.Show("Invalid ship placement: " + ShipType.Submarine + " Please try again.", "Invalid Placement", MessageBoxButtons.OK);
                            shipPositions[2, 0] = null;
                            shipPositions[2, 1] = null;
                        }
                        else
                        {
                            for (int i = 0; i < submarine.occupiedSquares.Length; i++)
                            {
                                pictureBox = (PictureBox)PlayerGrid.GetControlFromPosition(submarine.occupiedSquares[i].x, submarine.occupiedSquares[i].y);
                                pictureBox.Image = Properties.Resources.Ship;
                            }
                            btnSubmarine.Enabled = false;
                            btnSubmarine.Text = "Placed!";
                        }
                    }
                    break;
                #endregion
                #region Battleship
                case ShipType.Battleship:
                    if (shipPositions[3, 0] == null)
                    {
                        shipPositions[3, 0] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);
                    }
                    else if (shipPositions[3, 1] == null)
                    {
                        shipPositions[3, 1] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);
                        if (PlaceShip(ShipType.Battleship) == false)
                        {
                            MessageBox.Show("Invalid ship placement: " + ShipType.Battleship + " Please try again.", "Invalid Placement", MessageBoxButtons.OK);
                            shipPositions[3, 0] = null;
                            shipPositions[3, 1] = null;
                        }
                        else
                        {
                            for (int i = 0; i < battleship.occupiedSquares.Length; i++)
                            {
                                pictureBox = (PictureBox)PlayerGrid.GetControlFromPosition(battleship.occupiedSquares[i].x, battleship.occupiedSquares[i].y);
                                pictureBox.Image = Properties.Resources.Ship;
                            }
                            btnBattleship.Enabled = false;
                            btnBattleship.Text = "Placed!";
                        }
                    }
                    break;
                #endregion
                #region Carrier
                case ShipType.Carrier:
                    if (shipPositions[4, 0] == null)
                    {
                        shipPositions[4, 0] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);
                    }
                    else if (shipPositions[4, 1] == null)
                    {
                        shipPositions[4, 1] = new GridPosition(PlayerGrid.GetPositionFromControl(control).Column, PlayerGrid.GetPositionFromControl(control).Row);
                        if (PlaceShip(ShipType.Carrier) == false)
                        {
                            MessageBox.Show("Invalid ship placement: " + ShipType.Carrier + " Please try again.", "Invalid Placement", MessageBoxButtons.OK);
                            shipPositions[4, 0] = null;
                            shipPositions[4, 1] = null;
                        }
                        else
                        {
                            for (int i = 0; i < carrier.occupiedSquares.Length; i++)
                            {
                                pictureBox = (PictureBox)PlayerGrid.GetControlFromPosition(carrier.occupiedSquares[i].x, carrier.occupiedSquares[i].y);
                                pictureBox.Image = Properties.Resources.Ship;
                            }
                            btnCarrier.Enabled = false;
                            btnCarrier.Text = "Placed!";
                        }
                    }
                    break;
                    #endregion
            }
            if (carrier != null && battleship != null && submarine != null && cruiser != null && destroyer != null)
            {
                btnSubmit.Enabled = true;
            }
        }
        private void CalculateShipPositions(string ship, ShipType type, int length, int clientNo)
        {
            string[] points = new string[2];
            points[0] = ship.Split('.')[0];
            points[1] = ship.Split('.')[1];
            bool isHorizontal = false;
            GridPosition startPos = new GridPosition(int.Parse(points[0].Split(',')[0]), int.Parse(points[0].Split(',')[1]));
            GridPosition endPos = new GridPosition(int.Parse(points[1].Split(',')[0]), int.Parse(points[1].Split(',')[1]));

            if (startPos.x == endPos.x)//Ship is vertical
            {
                isHorizontal = false;
            }
            else if (startPos.y == endPos.y)//Ship is horizontal
            {
                isHorizontal = true;
            }

            Ship tempShip = new Ship(type, startPos, endPos, length, isHorizontal);

            for (int i = 0; i < tempShip.occupiedSquares.Length; i++)
            {
                if (clientNo == 0)
                {
                    client1TempPositions.Add(tempShip.occupiedSquares[i]);
                }
                else if (clientNo == 1)
                {
                    client2TempPositions.Add(tempShip.occupiedSquares[i]);
                }
            }
        }
        private void EnemyGrid_Click(object sender, EventArgs e)
        {
            if (myTurn)
            {
                Control control = (Control)sender;
                if (gridTarget.x > -1 && gridTarget.y > -1)
                {
                    if (pictureBox != null)
                    {
                        if (pictureBox.Tag.ToString() == "WaterTarget")
                        {
                            pictureBox = (PictureBox)EnemyGrid.GetControlFromPosition(gridTarget.x, gridTarget.y);
                            pictureBox.Image = Properties.Resources.Water;
                            pictureBox.Tag = "Water";
                        }
                    }
                }
                gridTarget = new GridPosition(EnemyGrid.GetPositionFromControl(control).Column, EnemyGrid.GetPositionFromControl(control).Row);
                pictureBox = (PictureBox)EnemyGrid.GetControlFromPosition(gridTarget.x, gridTarget.y);
                if (pictureBox.Tag.ToString() == "Water")
                {
                    pictureBox.Image = Properties.Resources.WaterTarget;
                    pictureBox.Tag = "WaterTarget";
                    btnFire.Enabled = true;
                }
                else
                {
                    btnFire.Enabled = false;
                }

            }
        }
 public bool CheckForHits(int clientNo, string data)
 {
     GridPosition pos = new GridPosition(int.Parse(data.Split(',')[0]), int.Parse(data.Split(',')[1]));
     Command cmd = new Command();
     switch (clientNo)
     {
         case 0:
             if (client2Board.GetGridType(pos.x, pos.y) == GridType.Ship)
             {
                 client2Board.ChangeGridType(pos.x, pos.y, GridType.Hit);
                 client2Board.ShipSquaresRemaining--;
                 return true;
             }
             else
                 return false;
         case 1:
             if (client1Board.GetGridType(pos.x, pos.y) == GridType.Ship)
             {
                 client1Board.ChangeGridType(pos.x, pos.y, GridType.Hit);
                 client1Board.ShipSquaresRemaining--;
                 return true;
             }
             else
                 return false;
     }
     return false;
 }