コード例 #1
0
 /// <summary>
 /// Verifica o ganhador do jogo, caso este esteja encerrado.
 /// </summary>
 /// <param name="resp1">resposta do servidor contendo o estado do jogo.</param>
 private void verificarStatus(RespostaDoServidor resp1)
 {
     if (resp1.jogoEncerrado)
     {
         if (resp1.vencedor == jogador)
         {
             lblStatus.Text = "Você Venceu!";
         }
         else if (resp1.vencedor == -1)
         {
             lblStatus.Text = "Empate!";
         }
         else
         {
             if (jogadorAtual == tiposDeJogadores.Observador)
             {
                 lblStatus.Text = "Fim de Jogo!";
             }
             else
             {
                 lblStatus.Text = "Você perdeu.";
             }
         }
         timer1.Enabled = false;
         btnBot.Enabled = false;
         lerTabuleiro();
     }
 }
コード例 #2
0
        /// <summary>
        /// Envia a mensagem XML passada como parâmetro para o servidor atual e retorna a resposta do servidor.
        /// Este método cria uma nova thread para o envio da mensagem e aguarda a resposta em uma variável compartilhada.
        /// A mensagem é enviada utilizando-se o protocolo UDP.
        /// </summary>
        /// <param name="mensagem">mensagem XML de requisição que será enviado ao servidor.</param>
        private void lerTabuleiro()
        {
            String             mensagem = formPai.enviandoMensagem("<REQUEST><RT>game board</RT><GID>" + jogo + "</GID></REQUEST>");
            Regex              exp      = new Regex(@"<GAME CURRENT BOARD>(.+)</GAME CURRENT BOARD>", RegexOptions.IgnoreCase);
            Regex              exp2     = new Regex(@"<(.)>", RegexOptions.IgnoreCase);
            RespostaDoServidor resp1    = new RespostaDoServidor(mensagem);

            //int[] tabuleiro = new int[9];

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    int id    = i * 3 + j;
                    int valor = 0;

                    if (resp1.tabuleiro[i, j] == "-")
                    {
                        valor             = -1;
                        tabLabel[id].Text = "O";
                    }
                    else if (resp1.tabuleiro[i, j] == "+")
                    {
                        valor             = +1;
                        tabLabel[id].Text = "X";
                    }
                    tabuleiro[id] = valor;
                }
            }

            String             resposta = formPai.enviandoMensagem(MensagensDeRequisicao.estadoDoJogo(jogo, jogador));
            RespostaDoServidor resp     = new RespostaDoServidor(resposta);

            if (!resp.jogoEncerrado)
            {
                if (resp.turnoDoJogadorAtual)
                {
                    lblStatus.Text = "seu turno";
                    if (botAtivado && !botJogou)
                    {
                        jogarAutomaticamente();
                    }

                    timer1.Enabled = true;
                }
                else if (resp.turnoDoAdversario)
                {
                    if (jogadorAtual != tiposDeJogadores.Observador)
                    {
                        lblStatus.Text = "turno do adversário";
                    }
                    timer1.Enabled = true;
                }
                botJogou = false;
            }
        }
コード例 #3
0
        /// <summary>
        /// Requisita a lista de jogos da velha abertos no servidor e atualiza
        /// o DataGridView dgvJogos com essa lista.
        /// </summary>
        private void btnConsultar_Click(object sender, EventArgs e)
        {
            btnConsultarJogos.Enabled = false;
            String    resposta = enviandoMensagem(MensagensDeRequisicao.listarJogos("tictactoe"));
            DataTable dtJogos  = new DataTable();

            dtJogos.Columns.Add(new DataColumn("idDoJogo", Type.GetType("System.String")));
            dtJogos.Columns.Add(new DataColumn("tipo", Type.GetType("System.String")));
            dtJogos.Columns.Add(new DataColumn("status", Type.GetType("System.String")));

            if (resposta != null)
            {
                RespostaDoServidor resp  = new RespostaDoServidor(resposta);
                DescricaoDeJogo[]  jogos = resp.Jogos;

                if (jogos != null)
                {
                    for (int i = 0; i < jogos.Length; i++)
                    {
                        DataRow novaLinha = dtJogos.NewRow();
                        novaLinha["idDoJogo"] = jogos[i].identificadorDoJogo;
                        String tipo = "Jogo da Velha";
                        novaLinha["tipo"] = tipo;
                        String status = "Jogo em andamento.";
                        if (jogos[i].jogoEncerrado)
                        {
                            status = "Encerrado.";
                        }
                        if (jogos[i].jogoEncerrado)
                        {
                            status = "Encerrado.";
                        }
                        else
                        {
                            if (jogos[i].esperandoJogadores)
                            {
                                status = "Aguardando jogadores.";
                            }
                        }
                        novaLinha["status"] = status;
                        dtJogos.Rows.Add(novaLinha);
                    }
                }
            }
            dgvJogos.DataSource       = dtJogos;
            btnConsultarJogos.Enabled = true;
        }
コード例 #4
0
        /// <summary>
        /// Solicita ao servidor a criação de um novo jogo da velha.
        /// Ao entrar no jogo, um novo formulário do tipo JogoDaVelha
        ///   é criado para que o usuário interaja com este novo jogo.
        /// </summary>
        private void btnCriarEEntrar_Click(object sender, EventArgs e)
        {
            String resposta = enviandoMensagem(MensagensDeRequisicao.novoJogo("tictactoe"));

            if (resposta == null)
            {
                return;
            }
            btnConsultar_Click(sender, e);
            RespostaDoServidor resp = new RespostaDoServidor(resposta);

            if (resp.respostaAfirmativa)
            {
                int idJogador = -1;
                int idJogo    = -1;
                idJogador = int.Parse(txtJogador.Text);
                idJogo    = resp.identificadorDoJogo;
                JogoDaVelha f = new JogoDaVelha(idJogo, idJogador, this);
                f.Show();
            }
        }
コード例 #5
0
        /// <summary>
        /// Método acionado pelo Tick do Timer timer1.
        /// Envia mensagem ao servidor para verificar se há mudanças no jogo e
        ///   atualiza o formulário com os dados da resposta do servidor.
        /// </summary>
        private void timer1_Tick(object sender, EventArgs e)
        {
            String             resposta = formPai.enviandoMensagem(MensagensDeRequisicao.estadoDoJogo(jogo, jogador));
            RespostaDoServidor resp1    = new RespostaDoServidor(resposta);

            if (resp1.jogoEncerrado)
            {
                verificarStatus(resp1);
            }
            else if (resp1.turnoDoJogadorAtual)
            {
                lblStatus.Text = "seu turno";
                if (botAtivado)
                {
                    jogarAutomaticamente();
                }
                else
                {
                    timer1.Enabled = false;
                }
                lerTabuleiro();
                verificarStatus(resp1);
            }
        }
コード例 #6
0
        public JogoDaVelha(int jogoId, int jogadorId, Inicio pai)
        {
            jogador = jogadorId;
            jogo    = jogoId;
            formPai = pai;
            InitializeComponent();

            tabLabel[0] = lbl0;
            tabLabel[1] = lbl1;
            tabLabel[2] = lbl2;
            tabLabel[3] = lbl3;
            tabLabel[4] = lbl4;
            tabLabel[5] = lbl5;
            tabLabel[6] = lbl6;
            tabLabel[7] = lbl7;
            tabLabel[8] = lbl8;


            String             resposta = formPai.enviandoMensagem(MensagensDeRequisicao.entrarEmUmJogo(jogoId, jogadorId));
            RespostaDoServidor resp1    = new RespostaDoServidor(resposta);

            if (resp1.aguardandoJogadores)
            {
                jogadorAtual         = tiposDeJogadores.Jogador1;
                lblJogadorAtual.Text = "Jogador1: X";
                lblStatus.Text       = "aguardando jogador2 O";
                timer1.Enabled       = true;
            }
            else
            {
                String resposta2 = formPai.enviandoMensagem(MensagensDeRequisicao.estouNesteJogo(jogoId, jogadorId));
                if (resposta2 == null)
                {
                    this.Close();
                    return;
                }
                RespostaDoServidor resp2 = new RespostaDoServidor(resposta2);

                if (resp2.respostaAfirmativa)
                {
                    if (resp2.indiceDoJogador == 1)
                    {
                        jogadorAtual         = tiposDeJogadores.Jogador1;
                        lblJogadorAtual.Text = "Jogador1: X";
                    }
                    else
                    {
                        jogadorAtual         = tiposDeJogadores.Jogador2;
                        lblJogadorAtual.Text = "Jogador2: O";
                    }
                }
                else
                {
                    jogadorAtual         = tiposDeJogadores.Observador;
                    lblJogadorAtual.Text = "Observando Jogo.";
                    btnBot.Enabled       = false;
                    timer1.Enabled       = true;
                    timer1.Interval      = 5000;
                }
            }

            if (resp1.jogoEncerrado)
            {
                verificarStatus(resp1);
            }
            lerTabuleiro();
        }