//Удар по опоненту в Cell c public void HitOponent(Cell c) { //Если не ждёт if (!isWaiting && isNeedToReceive) { //предварительная синхронизация //Join(); //client.RecieveLast(); //удар по полю CMessage msg = new CMessage(CMessage.Command.Hit, (byte)c.LocationX, (byte)c.LocationY); client.Send(CMessage.Serialize(msg)); //синхронизация Join(); } }
/************************************/ //метод принятия удара по полю, private void AcceptHit(int x, int y) { //Удар по полю Field.HitResult hr = playerField.Hit(x, y); switch (hr) { //ОТправляем отчёт об ударах case Field.HitResult.Water: client.Send(CMessage.Serialize(new CMessage(CMessage.Command.HitWater, (byte)x, (byte)y))); hasMove = true; break; case Field.HitResult.Hit: client.Send(CMessage.Serialize(new CMessage(CMessage.Command.HitShip, (byte)x, (byte)y))); hasMove = false; break; case Field.HitResult.Sink: //Если после действий противника все карабли затонули if (!playerField.IsFleetAlive()) { //MessageBox.Show("Лузер."); startButton.Text = "You lose."; //Шлём сообщение о проиграше CMessage resp = new CMessage(CMessage.Command.Lose, (byte)x, (byte)y); client.Send(CMessage.Serialize(resp)); isNeedToReceive = false; //hasMove = true; } else { client.Send(CMessage.Serialize(new CMessage(CMessage.Command.SinkShip, (byte)x, (byte)y))); } hasMove = false; break; } }