Ir para conteúdo
Fórum Script Brasil
  • 0

Criar uma IA que jogue xadrez


dfop02

Pergunta

5 respostass a esta questão

Posts Recomendados

  • 0
  • 0
37 minutos atrás, Jhonas disse:

Sinceramente, não ajudou muito...

A ideia de vim buscar ajuda no fórum é de que alguém ajude com sugestões e/ou exemplos de como fazer. Mandar links de buscas no google é muito vago (O que alias eu já fiz antes de vir aqui, mas não encontrei o que procuro), eu procuro fazer uma IA especifica em uma linguagem especifica (C), mas não espero códigos prontos, quero aprender a fazer. Ainda assim eu agradeço a atenção o/

Link para o comentário
Compartilhar em outros sites

  • 0

ok...  voce disse que não tinha a menor idéia de como fazer , por isso os links para voce aprender o conceito .

exemplos prontos tem varios na net, mas não usando IA

https://www.google.com.br/search?q=jogo+da+velha+em+c+com+matriz&o que=jogo+da+velha+em+c&gs_l=psy-ab.1.3.0l8.2564920.2575849.0.2582703.32.25.6.0.0.0.231.3007.1j22j1.24.0....0...1.1.64.psy-ab..2.30.3065...0i67k1j0i131k1j0i10k1j0i22i30k1j0i22i10i30k1j0i13k1.0.KtLyNtwHK5U

o que voce pode fazer é, aprender como montar a interface do usuario e depois aplicar o conceito de IA

 

OBS: Caso interessar, veja esse exemplo feito em delphi usando o conceito de IA

https://www.vivaolinux.com.br/script/Jogo-da-velha-inteligente

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
4 horas atrás, Jhonas disse:

ok...  voce disse que não tinha a menor idéia de como fazer , por isso os links para voce aprender o conceito .

exemplos prontos tem varios na net, mas não usando IA

https://www.google.com.br/search?q=jogo+da+velha+em+c+com+matriz&o que=jogo+da+velha+em+c&gs_l=psy-ab.1.3.0l8.2564920.2575849.0.2582703.32.25.6.0.0.0.231.3007.1j22j1.24.0....0...1.1.64.psy-ab..2.30.3065...0i67k1j0i131k1j0i10k1j0i22i30k1j0i22i10i30k1j0i13k1.0.KtLyNtwHK5U

o que voce pode fazer é, aprender como montar a interface do usuario e depois aplicar o conceito de IA

 

OBS: Caso interessar, veja esse exemplo feito em delphi usando o conceito de IA

https://www.vivaolinux.com.br/script/Jogo-da-velha-inteligente

abraço

Certo, agora tive um progresso, mas por ser em uma linguagem que não estou habituado, eu não entendi bem as declarações e funções, apenas a parte lógica, basicamente ele manda a "IA" jogar de forma randômica em qualquer local não escolhido? Pelo menos foi o que deu a entender.

Essa manipulação funciona bem em jogos de menor porte como jogo da velha que tem apenas 9 casas para preencher, mas em coisas mais elaboradas como damas e xadrez requer um refinamento a mais, algum tipo de filtragem nas jogadas, ou algo do gênero pra classificar como boas(executar) ou ruins(ignorar). Vou pesquisar sobre.

Link para o comentário
Compartilhar em outros sites

  • 0

eu não entendi bem as declarações e funções, apenas a parte lógica, basicamente ele manda a "IA" jogar de forma randômica em qualquer local não escolhido?

exato, mas o que ele faz é guardar as jogadas feitas, marcando aquelas em que o computador perdeu.

depois a cada nova jogada, ele faz uma verificação rapida nas posições que não deve mais usar

dessa forma, voce começa o jogo ganhando, mas depois o maximo que voce vai conseguir é empatar ou perder se cometer um erro.

a lógica é a mesma para qualquer linguagem que for usar

o mesmo programa do link ( delphi ) , convertido para o C#

using System;
using crt;

namespace Matriz
{

  public class Matriz
  {
    public static Char menu;
    public static Char posicao;
    public static int opcao;
    public static int jogadas;
    public static int empates;
    public static int derrotas;
    public static int vitorias;
    public static int i;
    public static int j;
    public static int linha;
    public static int coluna;
    public static int jogador;
    public static matriz_jogo mj;
    public static nome_jogadores nomes;
    public static Boolean jogar_mais;
    public static Boolean posicao_branco;

    public static void Zera_variaveis(ref matriz_jogo mat, nome_jogadores nomes, int a, int b, int c, ref int d, ref Boolean e)
    {
      int i;
      int j;
      int posicao;
      Clrscr;
      d = 0;
      e = false;
      posicao = 0;
      Writeln("Jogador1(X):", nomes[1][1]);
      Writeln("Vit�rias|Empates|Derrotas");
      Write("   ", c, "        ", a, "       ", b);
      Gotoxy(50, 1);
      Writeln("Jogador2(O):", nomes[2][1]);
      Gotoxy(50, 2);
      Write("Vit�rias|Empates|Derrotas");
      Gotoxy(50, 3);
      Write("   ", b, "        ", a, "       ", c);
      Gotoxy(1, 6);
      Writeln("___|___|___");
      Writeln("___|___|___");
      Writeln("   |   |   ");
      for (i = 1; i <= 3; i += 1)
      {
        for (j = 1; j <= 3; j += 1)
        {
          posicao = posicao + 1;
          Gotoxy(-2, i + 5);
          mat[i][j] = 0;
          Write(posicao);
        }
      }
    }

    public static void Zera_placar(ref int a, ref int b, ref int c)
    {
      a = 0;
      b = 0;
      c = 0;
    }

    public static int Sorteia_jogador()
    {
      sorteia_jogador = random(2) + 1;
    }

    public static void Imprime_matriz(ref matriz_jogo mat, nome_jogadores nomes, int a, int b, int c)
    {
      int i;
      int j;
      int posicao;
      Clrscr;
      Writeln("Jogador1(X):", nomes[1][1]);
      Writeln("Vit�rias|Empates|Derrotas");
      Write("   ", c, "        ", a, "       ", b);
      Gotoxy(50, 1);
      Writeln("Jogador2(O):", nomes[2][1]);
      Gotoxy(50, 2);
      Writeln("Vit�rias|Empates|Derrotas");
      Gotoxy(50, 3);
      Write("   ", b, "        ", a, "       ", c);
      Gotoxy(1, 6);
      Writeln("___|___|___");
      Writeln("___|___|___");
      Writeln("   |   |   ");
      posicao = 0;
      for (i = 1; i <= 3; i += 1)
      {
        for (j = 1; j <= 3; j += 1)
        {
          posicao = posicao + 1;
          Gotoxy(-2, i + 5);
          if (mat == 1)
          {
          }
          if (mat == 2)
          {
          }
          Write(posicao);
        }
      }
    }

    public static void Coordenadas_jogada(char posicao, ref int Linha, ref int coluna)
    {
      if (posicao == '1')
      {
        linha = 1;
        coluna = 1;
      }
      else if (posicao == '2') 
      {
        linha = 1;
        coluna = 2;
      }
      else if (posicao == '3') 
      {
        linha = 1;
        coluna = 3;
      }
      else if (posicao == '4') 
      {
        linha = 2;
        coluna = 1;
      }
      else if (posicao == '5') 
      {
        linha = 2;
        coluna = 2;
      }
      else if (posicao == '6') 
      {
        linha = 2;
        coluna = 3;
      }
      else if (posicao == '7') 
      {
        linha = 3;
        coluna = 1;
      }
      else if (posicao == '8') 
      {
        linha = 3;
        coluna = 2;
      }
      else
      {
        linha = 3;
        coluna = 3;
      }
    }

    public static void Posicao_em_branco(int caracter, int linha, int coluna, ref matriz_jogo mj, ref Boolean a)
    {
      if (mj == 0)
      {
        mj[linha][coluna] = caracter;
        a = true;
      }
      else
        a = false;
    }

    public static void Verifica_vencedor(int jogador, ref Boolean vencedor, matriz_jogo mj)
    {
      int pontos_coluna;
      int pontos_linha;
      int i;
      int j;
      Boolean posicao_vazial;
      Boolean posicao_vaziac;
      vencedor = false;
      for (i = 1; i <= 3; i += 1)
      {
        pontos_coluna = 0;
        pontos_linha = 0;
        posicao_vazial = false;
        posicao_vaziac = false;
        for (j = 1; j <= 3; j += 1)
        {
          if (mj == jogador)
          {
            pontos_coluna = pontos_coluna + mj[i][j];
          }
          else if (mj == 0) 
          {
            posicao_vaziac = true;
          }
          if (mj == jogador)
          {
            pontos_linha = pontos_linha + mj[j][i];
          }
          else if (mj == 0) 
          {
            posicao_vazial = true;
          }
        }
        if (((3 == 0) && (posicao_vaziac == false)) || ((3 == 0) && (posicao_vazial == false)) && (vencedor == false))
        {
          vencedor = true;
        }
        if (vencedor == false)
        {
          if ((3 == 0) && (mj == jogador) && (mj == jogador) && (mj == jogador))
          {
            vencedor = true;
          }
          else if ((3 == 0) && (mj == jogador) && (mj == jogador) && (mj == jogador)) 
          {
            vencedor = true;
          }
        }
      }
    }

    public static void Devolve_jogada_pc(matriz_jogo mj, int jogada, ref int soma, ref int espacos_vazios, ref int linha, ref int coluna)
    {
      int i;
      int j;
      int dif_linha;
      int dif_coluna;
      int lp;
      int cp;
      soma = 0;
      espacos_vazios = 0;
      linha = 0;
      coluna = 0;
      if (jogada <= 3)
      {
        dif_coluna = 0;
        for (j = 1; j <= 3; j += 1)
        {
          if (mj == 0)
          {
            espacos_vazios = espacos_vazios + 1;
            if (soma > 0)
            {
              dif_coluna = j - cp;
              if (dif_coluna < 0)
              {
                dif_coluna =  - dif_coluna;
              }
              if ((dif_coluna > 1) || (linha == 0))
              {
                linha = jogada;
                coluna = j;
              }
            }
            else
            {
              if (linha == 0)
              {
                linha = jogada;
                coluna = j;
              }
            }
          }
          else
          {
            soma = soma + mj[jogada][j];
            cp = j;
          }
        }
      }
      else if (jogada <= 6) 
      {
        dif_linha = 0;
        for (i = 1; i <= 3; i += 1)
        {
          if (mj == 0)
          {
            espacos_vazios = espacos_vazios + 1;
            if (soma > 0)
            {
              dif_linha = i - cp;
              if (dif_linha < 0)
              {
                dif_linha =  - dif_linha;
              }
              if ((dif_linha > 1) || (linha == 0))
              {
                linha = i;
                coluna = jogada - 3;
              }
            }
            else if (linha == 0) 
            {
              linha = i;
              coluna = jogada - 3;
            }
          }
          else
          {
            soma = soma + mj[i][jogada - 3];
            lp = i;
          }
        }
      }
      else if (jogada == 7) 
      {
        for (i = 1; i <= 3; i += 1)
        {
          if (mj == 0)
          {
            espacos_vazios = espacos_vazios + 1;
            if ((mj == 1) && (mj == 1) && (mj == 0))
            {
              linha = 1;
              coluna = 1;
            }
            else if ((mj == 1) && (mj == 1) && (mj == 0)) 
            {
              linha = 3;
              coluna = 3;
            }
            else
            {
              linha = i;
              coluna = i;
            }
          }
          else
            soma = soma + mj[i][i];
        }
      }
      else
      {
        for (i = 1; i <= 3; i += 1)
        {
          if (mj == 0)
          {
            espacos_vazios = espacos_vazios + 1;
            linha = i;
            coluna = 4 - i;
          }
          else
            soma = soma + mj[i][4 - i];
        }
      }
    }

    public static void Jogada_pc(int jogador, ref matriz_jogo mj)
    {
      int i;
      int j;
      int soma;
      int espacos_vazios;
      int linha_vazia;
      int coluna_vazia;
      int somamax;
      int espacosmin;
      int linha;
      int coluna;
      int[] jogadas_possiveis = new int[3 - 1 + 1];
      int jogadas;
      linha = 0;
      coluna = 0;
      somamax = 0;
      espacosmin = 3;
      for (i = 1; i <= 8; i += 1)
      {
        devolve_jogada_pc(mj, i, soma, espacos_vazios, linha_vazia, coluna_vazia);
        if ((soma >= somamax) && (espacos_vazios <= espacosmin) && (espacos_vazios >= 1) && (2 == 0))
        {
          if ((soma != somamax) || (espacos_vazios != espacosmin))
          {
            linha = linha_vazia;
            coluna = coluna_vazia;
            somamax = soma;
            espacosmin = espacos_vazios;
          }
        }
      }
      if ((linha == 0) && (coluna == 0))
      {
        for (i = 1; i <= 3; i += 1)
        {
          for (j = 1; j <= 3; j += 1)
          {
            if (mj == 0)
            {
              linha = i;
              coluna = j;
            }
          }
        }
      }
      mj[linha][coluna] = jogador;
    }

    void run()
    {
      Clrscr;
      zera_placar(empates, derrotas, vitorias);
      nomes[1][1] = "Computador1";
      Nomes[2][1] = "Computador2";
    }

    public static void Main(string[] args)
    {
      Matriz myApp = new Matriz();
      myApp.run();
    }
  }
}

Somente fiz a conversão , mas não testei .... O resto agora é com voce

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...