public void GameCommandRecieved(object sender, CommandEventArgs e) { Console.WriteLine("Game command received. data:{0} type:{1}", e.Command.Data, e.Command.CommandType); if (e.Command.CommandType == CommandType.GameStartInform) { if (e.Command.Data.ToLower() == "true") { myTurn = true; rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("firstShotMe"));; }); btnFire.BackColor = System.Drawing.Color.Red; btnFire.ForeColor = System.Drawing.Color.White; //btnFire.Enabled = true; } else if (e.Command.Data.ToLower() == "false") { myTurn = false; btnFire.Enabled = false; rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("firstShotEnemy"));; }); } } if (e.Command.CommandType == CommandType.GameShotResult) { if (e.Command.Data.ToLower().Equals("hit")) { //Deal with hits // Don't block Thread with waiting until Sound finishs new System.Threading.Thread(() => { if (checkBoxSound.Checked) { spFlightBomb.PlaySync(); } rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("shotHit")); }); pictureBox.BeginInvoke((MethodInvoker) delegate() { pictureBox = (PictureBox)EnemyGrid.GetControlFromPosition(gridTarget.x, gridTarget.y); pictureBox.Image = Properties.Resources.ShipHit; pictureBox.Tag = "ShipHit"; }); btnFire.BeginInvoke((MethodInvoker) delegate() { btnFire.Enabled = false; }); myTurn = false; rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("waitEnemyShot"));; }); }).Start(); } else if (e.Command.Data.ToLower().Equals("miss")) { //deal with misses // Don't block Thread with waiting until Sound finishs new System.Threading.Thread(() => { if (checkBoxSound.Checked) { spFlightWater.PlaySync(); } rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("shotMissed")); }); pictureBox.BeginInvoke((MethodInvoker) delegate() { pictureBox = (PictureBox)EnemyGrid.GetControlFromPosition(gridTarget.x, gridTarget.y); pictureBox.Image = Properties.Resources.WaterMiss; pictureBox.Tag = "WaterMiss"; }); btnFire.BeginInvoke((MethodInvoker) delegate() { btnFire.Enabled = false; }); myTurn = false; rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("waitEnemyShot"));; }); }).Start(); } } if (e.Command.CommandType == CommandType.GameHitInform) { // Don't block Thread with waiting until Sound finishs new System.Threading.Thread(() => { if (checkBoxSound.Checked) { spFlightBomb.PlaySync(); } rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("oneShipHit")); }); gridTarget.x = int.Parse(e.Command.Data.Split(',')[0]); gridTarget.y = int.Parse(e.Command.Data.Split(',')[1]); pictureBox.BeginInvoke((MethodInvoker) delegate() { pictureBox = (PictureBox)PlayerGrid.GetControlFromPosition(gridTarget.x, gridTarget.y); pictureBox.Image = Properties.Resources.ShipHit; }); myTurn = true; rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("turnToShot")); }); btnFire.BeginInvoke((MethodInvoker) delegate() { btnFire.BackColor = System.Drawing.Color.Red; btnFire.ForeColor = System.Drawing.Color.White; }); }).Start(); } if (e.Command.CommandType == CommandType.GameMissInform) { // Don't block Thread with waiting until Sound finishs new System.Threading.Thread(() => { if (checkBoxSound.Checked) { spFlightWater.PlaySync(); } rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("opponentMissedFleet")); }); gridTarget.x = int.Parse(e.Command.Data.Split(',')[0]); gridTarget.y = int.Parse(e.Command.Data.Split(',')[1]); pictureBox.BeginInvoke((MethodInvoker) delegate() { pictureBox = (PictureBox)PlayerGrid.GetControlFromPosition(gridTarget.x, gridTarget.y); pictureBox.Image = Properties.Resources.WaterMiss; }); myTurn = true; rtbLog.BeginInvoke((MethodInvoker) delegate() { rtbLog.AppendText(i18n.GetText("turnToShot")); }); btnFire.BeginInvoke((MethodInvoker) delegate() { btnFire.BackColor = System.Drawing.Color.Red; btnFire.ForeColor = System.Drawing.Color.White; }); }).Start(); } if (e.Command.CommandType == CommandType.GameOverInform) { if (e.Command.Data.ToLower() == "win") { Command cmdInform = new Command(CommandType.GameOverInform, client.ServerIP, gameID + ":" + "win"); cmdInform.TargetPort = client.ServerPort; cmdInform.SenderIP = client.IP; cmdInform.SenderPort = client.Port; cmdInform.SenderName = client.Username; client.Wins++; client.SendCommand(cmdInform); MessageBox.Show(i18n.GetText("wonCongratulations", client.Username), i18n.GetText("winner"), MessageBoxButtons.OK); Close(); } else if (e.Command.Data.ToLower() == "loss") { Command cmdInform = new Command(CommandType.GameOverInform, client.ServerIP, gameID + ":" + "loss"); cmdInform.TargetPort = client.ServerPort; cmdInform.SenderIP = client.IP; cmdInform.SenderPort = client.Port; cmdInform.SenderName = client.Username; client.Losses++; client.SendCommand(cmdInform); MessageBox.Show(i18n.GetText("lossGame", client.Username), i18n.GetText("gameLost"), MessageBoxButtons.OK); Close(); } } }
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(i18n.GetText("invalidPlacement", i18n.GetText("shipName1")), i18n.GetText("invalidPlacementTitle"), 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 = i18n.GetText("shipPlaced"); } } 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(i18n.GetText("invalidPlacement", i18n.GetText("shipName2")), i18n.GetText("invalidPlacementTitle"), 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 = i18n.GetText("shipPlaced"); } } 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(i18n.GetText("invalidPlacement", i18n.GetText("shipName3")), i18n.GetText("invalidPlacementTitle"), 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 = i18n.GetText("shipPlaced"); } } 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(i18n.GetText("invalidPlacement", i18n.GetText("shipName4")), i18n.GetText("invalidPlacementTitle"), 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 = i18n.GetText("shipPlaced"); } } 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(i18n.GetText("invalidPlacement", i18n.GetText("shipName5")), i18n.GetText("invalidPlacementTitle"), 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 = i18n.GetText("shipPlaced");; } } break; #endregion } if (carrier != null && battleship != null && submarine != null && cruiser != null && destroyer != null) { btnSubmit.Enabled = true; } }