Ir ao conteúdo
  • Cadastre-se

C# Jogo da velha - probleminha


NhemonF

Posts recomendados

Olá pessoal,

 

Estou com uma problema no jogo da velha no C#.

Estive reutilizando um código de uma desenvolvedora, porém utilizando inteligência artificial para jogar.

O que me incomodou neste problema é que rodou perfeitamente, mas o computador não preencheu no espaço do jogo da velha.

Poderiam me ajudar neste caso?

 

Para mais infos, vou disponibilizar o arquivo em .zip, ou o código do programa.

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 jogodavelhacomIA
{
    public partial class frmGame : Form
    {
        public frmGame()
        {
            InitializeComponent();
        }

        string[] texts = new string[9];
        int match = 0;
        bool turn = true, EndGame = false, IAPlayed = false;
        Random random = new Random();

        void verifyWinner()
        { 

            string Vazio = turn ? "X" : "O";

            for (int i = 0; i <= 6; i += 3)
            {

                if (texts[i] == Vazio && texts[i] == texts[i + 1] && texts[i] == texts[i + 2])
                {

                    Winner();

                }

            }

            // Verticais:

            for (int i = 0; i <= 2; i++)
            {

                if (texts[i] == Vazio && texts[i] == texts[i + 3] && texts[i] == texts[i + 6])
                {

                  Winner();

                }

            }

            if (texts[0] == Vazio && texts[0] == texts[4] && texts[0] == texts[8]) { Winner(); }; // Diagonal principal
            if (texts[2] == Vazio && texts[2] == texts[4] && texts[2] == texts[6]) { Winner(); }; // Diagonal secundária
 
            if (match == 9 && !EndGame)
            {

                EndGame = true;
                MessageBox.Show("Empate!");

            }

        }

        void Winner()
        {
            EndGame = true;
            MessageBox.Show(String.Format("Jogador {0} venceu!", turn ? "X" : "O"));

        }

        private void Buttons(object sender, EventArgs e)
        {
            Button btn = (Button)sender;

            if (turn && !EndGame && btn.Text == "")
            {
                btn.Text = "X";
                texts[btn.TabIndex] = btn.Text;
                match++;
                verifyWinner();
                turn = !turn;
                IAThink();
            
            }
        }

        private void Random()
        {
            bool find_local = false;

            if (!turn)
                while (!find_local)
                {
                    int sort = random.Next(0, 9);
                    foreach (var bt in Controls.OfType<Button>())
                    {
                        if (bt.Text == "" && bt.TabIndex == sort){
                            find_local = true;
                            IAPlay(sort);
                        }
                    }

                }
        }

        private void IAPlay (int tabindex)
        {
            foreach (var btn in Controls.OfType<Button>())
            {
                btn.Text = "O";
                texts[btn.TabIndex] = btn.Text;
                match++;
                IAPlayed = true;
                verifyWinner();
                turn = !turn;
            }
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            match = 0;
            EndGame = false;
            turn = !turn;
            IAPlayed = false;

            foreach (var btn in Controls.OfType<Button>())
            {
                btn.Text = "";
            }

            for (int i = 0; i < texts.Length; i++)
            {
                texts[i] = "";
                btnReset.Text = "Recomeçar";

                if (!turn)
                {
                    IAThink();
                }
            }
        }

        private void IAValid(string player)
        {
            int start = 0, limit = 0, verifySide = 0, argment = 0;

            //checagem das horizontais
            if (!turn && !EndGame)
            {
                for (int i = 0; i <= 3; i++)
                {
                    switch (i)
                    {
                        case 1:
                            limit = 6;
                            verifySide = 1;
                            argment = 2;
                            break;

                        case 2:
                            verifySide = 2;
                            argment = 1;
                            break;

                        case 3:
                            start = 1;
                            limit = 7;
                            verifySide = 1;
                            argment = -1;
                            break;
                    }

                    for (int j = 0; j <= 3; j++)
                    {
                        if (texts[j] == player && texts[j] == texts[j + verifySide])
                        {
                            IAPlay(j + argment);
                        }
                    }
                }
            }

            for (int i = 0; i <= 3; i++)
            {
                switch (i)
                {
                    case 1:
                        start = 0;
                        limit = 2;
                        verifySide = 3;
                        argment = 6;
                        break;

                    case 2:
                        verifySide = 6;
                        argment = 3;
                        break;

                    case 3:
                        start = 3;
                        limit = 5;
                        verifySide = 3;
                        argment = -3;
                        break;
                }

                for (int j = 0; j <= 3; j++)
                {
                    if (texts[j] == player && texts[j] == texts[j + verifySide])
                    {
                        IAPlay(argment);
                    }
                }
            }

            for (int i = 0; i <= 3; i++)
            {
                switch (i)
                {
                    case 1:
                        start = 0;
                        verifySide = 4;
                        argment = 8;
                        break;

                    case 2:
                        verifySide = 8;
                        argment = 4;
                        break;

                    case 3:
                        start = 4;
                        verifySide = 8;
                        argment = 0;
                        break;

                    case 4:
                        start = 2;
                        verifySide = 4;
                        argment = 6;
                        break;

                    case 5:
                        verifySide = 6;
                        argment = 4;
                        break;

                    case 6:
                        start = 4;
                        verifySide = 6;
                        argment = 2;
                        break;
                }

                if (texts[start] == player && texts[start] == texts[verifySide])
                {
                    IAPlay(argment);
                }
            }
        }

        private void IAThink()
        {
            IAPlayed = false;

            for (int i = 0; i <= 2; i++)
            {
                if (IAPlayed)
                {
                    break;
                }

                else if (!IAPlayed && EndGame)
                {
                    switch (i)
                    {
                        case 0:
                            IAValid("O"); //defesa
                            break;

                        case 1:
                            IAValid("X"); //ofensiva
                            break;

                        case 2:
                            Random();
                            break;
                    }
                }
            }
        }

        
    }
}

Obs: o programa está desenvolvido em Windows Form no VS 2017

 

jogodavelhaIA.rar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...