Esempio n. 1
0
        // метд обровки команд сервера
        private async void Listen()
        {
            try
            {
                bool isExit = false;
                while (!isExit)
                {
                    // очікуємо та приймаємо команду від сервера
                    ServerCommand command = await ReceiveCommand();

                    // обробляємо команду
                    switch (command.Type)
                    {
                    // команда очікування опонента
                    case CommandType.WAIT:
                        // візуально повідомляємо про очікування
                        opponentNameTxtBox.Content = "Waiting...";
                        break;

                    // команда початку гри
                    case CommandType.START:
                        // встановлюємо параметри гри
                        IsX                        = command.IsX;
                        IsMoving                   = IsX;
                        symbolLabel.Content        = Symbol;
                        OpponentNickname           = command.OpponentName;
                        opponentNameTxtBox.Content = OpponentNickname;
                        break;

                    // команда ходу опонента
                    case CommandType.MOVE:
                        // знаходимо клітинку, де був виконаний хід
                        foreach (Border item in fieldGrid.Children.OfType <Border>())
                        {
                            // звіряємо координати
                            if (item.Tag.Equals(command.MoveCoord))
                            {
                                // встановлюємо символ опонента
                                ((TextBlock)item.Child).Text = OpponentSymbol.ToString();
                            }
                            // дозволяємо хід
                            IsMoving = true;
                        }
                        break;

                    case CommandType.RESTART:
                        // знаходимо клітинку, де був виконаний хід
                        MessageBox.Show($"{command.OpponentName} Won");
                        foreach (Border item in fieldGrid.Children.OfType <Border>())
                        {
                            // встановлюємо символ опонента
                            ((TextBlock)item.Child).Text = "";
                        }
                        break;

                    case CommandType.DRAW:
                        // знаходимо клітинку, де був виконаний хід
                        MessageBox.Show($"Draw");
                        foreach (Border item in fieldGrid.Children.OfType <Border>())
                        {
                            // встановлюємо символ опонента
                            ((TextBlock)item.Child).Text = "";
                        }
                        break;

                    // команда завершення гри
                    case CommandType.CLOSE:
                        // завершуємо гру
                        CloseSession();
                        // встановлюємл змінну для закриття цикла обробки подій від сервера
                        isExit = true;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Esempio n. 2
0
        private async void Listen()
        {
            try
            {
                bool isExit = false;
                while (!isExit)
                {
                    ServerCommand command = await ReceiveCommand();


                    switch (command.Type)
                    {
                    case CommandType.WAIT:

                        statusTB.Text = "Waiting...";
                        break;

                    case CommandType.START:

                        IsX              = command.IsX;
                        IsMoving         = IsX;
                        statusTB.Text    = IsMoving ? "Your turn" : "Opponent's turn";
                        symbolTB.Text    = Symbol.ToString();
                        OpponentNickname = command.OpponentName;
                        opponentTB.Text  = OpponentNickname;
                        break;

                    case CommandType.DRAW:
                        IsPlaying     = false;
                        statusTB.Text = "Game end.";
                        MessageBox.Show("It look like it's a draw.", $"Game Result for {Nickname}");
                        break;

                    case CommandType.LOSE:
                        IsPlaying     = false;
                        statusTB.Text = "Game end.";
                        IsMoving      = false;
                        MessageBox.Show("You lose.", $"Game Result for {Nickname}");

                        break;

                    case CommandType.MOVE:
                        statusTB.Text = "Your turn";
                        foreach (Border item in fieldGrid.Children.OfType <Border>())
                        {
                            if (item.Tag.Equals(command.MoveCoord))
                            {
                                ((TextBlock)item.Child).Text = OpponentSymbol.ToString();
                                item.IsEnabled = false;
                            }

                            IsMoving = true;
                        }
                        break;

                    case CommandType.CLOSE:
                        if (IsPlaying)
                        {
                            MessageBox.Show($"{OpponentNickname} left the game.");
                        }

                        CloseSession();

                        isExit = true;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Esempio n. 3
0
        private async void Listen()
        {
            try
            {
                bool isExit = false;
                while (!isExit)
                {
                    ServerCommand command = await ReceiveCommand();


                    switch (command.Type)
                    {
                    case CommandType.WAIT:

                        opponentNameTxtBox.Content = "Waiting...";
                        break;

                    case CommandType.START:

                        IsX                        = command.IsX;
                        IsMoving                   = IsX;
                        symbolLabel.Content        = Symbol;
                        OpponentNickname           = command.OpponentName;
                        opponentNameTxtBox.Content = OpponentNickname;
                        break;

                    case CommandType.MOVE:

                        foreach (Border item in fieldGrid.Children.OfType <Border>())
                        {
                            if (item.Tag.Equals(command.MoveCoord))
                            {
                                ((TextBlock)item.Child).Text = OpponentSymbol.ToString();
                                string   str        = ((Border)item).Tag.ToString();
                                char[]   wordsSplit = new char[] { ':', };
                                string[] coords     = str.Split(wordsSplit, StringSplitOptions.RemoveEmptyEntries);
                                arr[int.Parse(coords[0]), int.Parse(coords[1])] = OpponentSymbol;

                                if (IsWin(OpponentSymbol))
                                {
                                    MessageBox.Show(OpponentNickname + " Win!");
                                    HelpArr();
                                    if (IsPlaying)
                                    {
                                        await SendCommand(new ClientCommand(CommandType.EXIT, Nickname));
                                    }
                                }
                                else if (IsEndGame())
                                {
                                    MessageBox.Show("End game");
                                    HelpArr();
                                    if (IsPlaying)
                                    {
                                        await SendCommand(new ClientCommand(CommandType.EXIT, Nickname));
                                    }
                                }
                            }

                            IsMoving = true;
                        }
                        break;

                    case CommandType.CLOSE:

                        CloseSession();

                        isExit = true;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }