예제 #1
0
 //Удар по опоненту в 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();
     }
 }
예제 #2
0
        /************************************/


        //метод принятия удара по полю,
        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;
            }
        }