コード例 #1
0
        //Метод ожидания сообщений от противника, запускается через поток
        private void Wait()
        {
            if (isNeedToReceive)
            {
                //ставим в режим ожидания
                isWaiting            = true;
                oponentField.Enabled = false;

                //принимаем сообщение от противника
                CMessage msg = CMessage.Deserialize(client.RecieveLast());

                switch (msg.CommandCode)
                {
                case CMessage.Command.Hit:
                    AcceptHit(msg.Data[0], msg.Data[1]);
                    break;

                case CMessage.Command.HitShip:
                    oponentField.GetCellAt(msg.Data[0], msg.Data[1]).SetState(Cell.State.HitShip);
                    oponentField.GetCellAt(msg.Data[0], msg.Data[1]).Enabled = false;
                    MessageBox.Show("Hit!");
                    hasMove = true;
                    break;

                case CMessage.Command.SinkShip:
                    oponentField.GetCellAt(msg.Data[0], msg.Data[1]).SetState(Cell.State.SinkShip);
                    oponentField.GetCellAt(msg.Data[0], msg.Data[1]).Enabled = false;
                    MessageBox.Show("Sink!");
                    RepaintOponentShip(msg.Data[0], msg.Data[1]);
                    hasMove = true;
                    break;

                case CMessage.Command.HitWater:
                    oponentField.GetCellAt(msg.Data[0], msg.Data[1]).SetState(Cell.State.HitWater);
                    oponentField.GetCellAt(msg.Data[0], msg.Data[1]).Enabled = false;
                    MessageBox.Show("Miss!");
                    hasMove = false;
                    break;

                case CMessage.Command.Lose:
                    oponentField.GetCellAt(msg.Data[0], msg.Data[1]).SetState(Cell.State.SinkShip);
                    oponentField.GetCellAt(msg.Data[0], msg.Data[1]).Enabled = false;
                    RepaintOponentShip(msg.Data[0], msg.Data[1]);
                    MessageBox.Show("Victory!");
                    startButton.Text     = "You won.";
                    isNeedToReceive      = false;
                    oponentField.Enabled = false;
                    break;

                case CMessage.Command.Exit:
                    MessageBox.Show("Disconnected!");
                    startButton.Text     = "Disconnected!";
                    isNeedToReceive      = false;
                    oponentField.Enabled = false;
                    break;
                }



                if (!hasMove && isNeedToReceive)
                {
                    //Если противник опять ходит/ опять ждём(рекурсивно)
                    startButton.Text = "Oponents move...";
                    Wait();
                }
                else if (isNeedToReceive)
                {
                    startButton.Text     = "Your move.";
                    oponentField.Enabled = true;
                }

                //выходим из режима ожидания
                isWaiting = false;
            }
        }