none
Jogo da Velha no VS - Dúvidas RRS feed

  • Discussão Geral

  • Olá, sou estudante de programação, e foi dado a mim a tarefa de fazer e entender os códigos para a criação de um jogo da velha no visual studio 2015, a partir deste vídeo: https://www.youtube.com/watch?v=a2O50hMvFJU

    Porém, mesmo com os códigos feitos, preciso entender cada detalhe do projeto (o que cada linha e objeto faz).

    Por isso, agradeço demais a quem puder explicar cada passo que foi feito para que eu possa compreender, e se quiserem é claro, dando prioridade ás linhas mais complexas. Estou, além do vídeo, passando também as linhas já feitas abaixo:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace JogaDaVelha1
    {
        public partial class Form1 : Form
        {
            public string Jogador_Atual = "X";

            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }

            public void Zerar()
            {
                button1.Text = "";
                button2.Text = "";
                button3.Text = "";
                button4.Text = "";
                button5.Text = "";
                button6.Text = "";
                button7.Text = "";
                button8.Text = "";
                button9.Text = "";
                Jogador_Atual = "X";
            }

            public void Ganhar()
            {
                MessageBox.Show("O jogador " + Jogador_Atual + " ganhou!");
                Zerar();
            }

            public bool Verificar(string jogador_at)
            {
                //Vertical
                if (button1.Text == jogador_at && button6.Text == jogador_at && button9.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                }
                if (button2.Text == jogador_at && button5.Text == jogador_at && button8.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                }

                if (button3.Text == jogador_at && button4.Text == jogador_at && button7.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                }
                //Horizontal
                if (button1.Text == jogador_at && button2.Text == jogador_at && button3.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                }
                if (button6.Text == jogador_at && button5.Text == jogador_at && button4.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                }

                if (button9.Text == jogador_at && button8.Text == jogador_at && button7.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                }
                //Diagonal
                if (button1.Text == jogador_at && button5.Text == jogador_at && button7.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                }
                if (button3.Text == jogador_at && button5.Text == jogador_at && button9.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                }
                if (button1.Text.Length != 0 && button2.Text.Length != 0 && button3.Text.Length != 0 && button4.Text.Length != 0 && button5.Text.Length != 0 && button6.Text.Length != 0 && button7.Text.Length != 0 && button8.Text.Length != 0 && button9.Text.Length != 0)
                {
                    MessageBox.Show("Deu Velha");
                    Zerar();
                    return true;
                }
                Jogador_Atual = InverteJogador();
                label1.Text = "Jogador Atual: " + Jogador_Atual;
                return false;
            }


            public string InverteJogador()
            {
                if (Jogador_Atual == "X")
                {
                    return "0";
                }
                else
                {
                    return "X";
                }
                return "X";
            }

            private void button10_Click(object sender, EventArgs e)
            {
                Zerar();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (button1.Text == "")
                {
                    button1.Text = Jogador_Atual;
                    Verificar(Jogador_Atual);
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                if (button2.Text == "")
                {
                    button2.Text = Jogador_Atual;
                    Verificar(Jogador_Atual);
                }
            }

            private void button3_Click(object sender, EventArgs e)
            {
                if (button3.Text == "")
                {
                    button3.Text = Jogador_Atual;
                    Verificar(Jogador_Atual);
                }
            }

            private void button6_Click(object sender, EventArgs e)
            {
                if (button6.Text == "")
                {
                    button6.Text = Jogador_Atual;
                    Verificar(Jogador_Atual);
                }
            }

            private void button5_Click(object sender, EventArgs e)
            {
                if (button5.Text == "")
                {
                    button5.Text = Jogador_Atual;
                    Verificar(Jogador_Atual);
                }
            }

            private void button4_Click(object sender, EventArgs e)
            {
                if (button4.Text == "")
                {
                    button4.Text = Jogador_Atual;
                    Verificar(Jogador_Atual);
                }
            }

            private void button9_Click(object sender, EventArgs e)
            {
                if (button9.Text == "")
                {
                    button9.Text = Jogador_Atual;
                    Verificar(Jogador_Atual);
                }
            }

            private void button8_Click(object sender, EventArgs e)
            {
                if (button8.Text == "")
                {
                    button8.Text = Jogador_Atual;
                    Verificar(Jogador_Atual);
                }
            }

            private void button7_Click(object sender, EventArgs e)
            {
                if (button7.Text == "")
                {
                    button7.Text = Jogador_Atual;
                    Verificar(Jogador_Atual);
                }
            }
        }
    }


    segunda-feira, 5 de dezembro de 2016 17:51

Todas as Respostas

  • A pergunta está muito ampla, peço que por favor especifique um ponto onde existe uma dúvida pois fica difícil para que a comunidade te ajude. Existem vários sites que descrevem a lógica envolvida de forma perfeita:

    http://neverstopbuilding.com/minimax

    Leia um pouco sobre minimax: http://aimotion.blogspot.com.br/2009/01/aprenda-aplicar-inteligencia-artificial.html

    O código que você postou é basicamente o controle dos buttons que existe na tela, se clicar marca com X ou O dependendo do jogador atual, e os "if's" testam "na mão" se houve um ganhador, o testes é feito comparando o símbolo em cada botão, se tem 3 iguais na diagonal, horizontal ou vertical, chama o método Ganhar.


    Rodrigo Reis Ferreira
    Microsoft Certified

    segunda-feira, 5 de dezembro de 2016 20:08
  • A parte teórica de todo o projeto eu compreendo, tenho dúvidas especificamente na parte dos códigos mesmo, principalmente nesses:

    *Na parte de declarar as funções, porque Zerar() e Ganhar() são public void e a função InverteJogador() é public string?

    public void Zerar()
    public void Ganhar()
    public string InverteJogador()

    *Queria entender essa parte do começo: (public partial class\  InitializeComponent() ????)

    public partial class Form1 : Form
        {
            public string Jogador_Atual = "X";

            public Form1()
            {
                InitializeComponent();

    * Bool é de boolean? mas oque significa?

    public bool Verificar(string jogador_at)
            {
                //Vertical
                if (button1.Text == jogador_at && button6.Text == jogador_at && button9.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                 }

    *Nessa condição de caso der velha, como funciona essa linha?O que é 'Length'?E porque '!=' ?  

    if (button1.Text.Length != 0 && button2.Text.Length != 0 && button3.Text.Length != 0 && button4.Text.Length != 0 && button5.Text.Length != 0 && button6.Text.Length != 0 && button7.Text.Length != 0 && button8.Text.Length != 0 && button9.Text.Length != 0)
                {
                    MessageBox.Show("Deu Velha");
                    Zerar();
                    return true;
                }

    * O que especificamente é 'return' ou 'return true'? E o que significa o return false no final?(qual a função?)(...)

       if (button3.Text == jogador_at && button5.Text == jogador_at && button9.Text == jogador_at)
                {
                    Ganhar();
                    return true;
                }
                if (button1.Text.Length != 0 && button2.Text.Length != 0 && button3.Text.Length != 0 && button4.Text.Length != 0 && button5.Text.Length != 0 && button6.Text.Length != 0 && button7.Text.Length != 0 && button8.Text.Length != 0 && button9.Text.Length != 0)
                {
                    MessageBox.Show("Deu Velha");
                    Zerar();
                    return true;
                }
                Jogador_Atual = InverteJogador();
                label1.Text = "Jogador Atual: " + Jogador_Atual;
                return false;
            }

    *O que significam esses códigos quem já vem no programa, no caso de apertar um botão(object sender, EventArgs e ????)

    private void button1_Click(object sender, EventArgs e)

    Pois é, muita coisa, mas se eu compreender esses pontos, consigo ter já bastante experiência com qualquer outro código, pois a maioria utilizam todos esses requisitos. Agradeço demais se puder responder!

    segunda-feira, 5 de dezembro de 2016 21:39