• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

tiagoagm

[Ajuda] Concepção do programa Mastermind

7 mensagens neste tópico

oi peço ajuda na concepção em linguagem c e em pseudo código do jogo mastermind, o programa em c e em pseudo código tem d ser ou com matrizes ou com filas, mas gostava antes k fosse com matrizes pk filas n percebo mt  :thumbsup:.Agradeço mt td a ajuda possivel. Mt obrigada

eu já fiz isto mas dá m erros estruturais alguem m pd ajudar, o problema é k eu n sei ond estão os erros n faço a mínima iedia msm, já corri o rpograma d abixo a cima e nd :S?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int tentativas,flag2,contador,f,flag,i,j,o,k,l,lenghtcountaux[3],lenghtcountmat[3];
    char car[2],mat[3][99],aux[3][99];
  //leitura da chave
  printf("Digite a chave de 6 cores separada por espacos: ");
  for(i=0;i<=5;i++)
  {
      j=0;
      do
      {
       car[1]=getchar();
       mat[i][j]=car[1];
       j++;
      }while(car[1]!=' ' && car[1]!='\n');
      lenghtcountmat[i]=j-1;
  }
  f=0;
  tentativas=0;
  do
  {
      contador=0;
      tentativas++;
      //leitura da tentativa
    printf("Digite a sequencia de 6 cores: ");
    for(i=0;i<=5;i++)
    {
      j=0;
      do
      {
       car[1]=getchar();
       aux[i][j]=car[1];
       j++;
      }while(car[1]!=' ' && car[1]!='\n');
      lenghtcountaux[i]=j-1;
    }
    //verificar se corresponde
    for(i=0;i<=5;i++)
    {
        //se os tamanhos das palavras nao corresponderem nao vale a pena compara-las
        flag=0;
        if (lenghtcountmat[i]==lenghtcountaux[i])
        {
           for(k=0;k<=lenghtcountmat[i]-1;k++)
           {
               
               if (mat[i][k]!=aux[i][k])
               {
                  k=lenghtcountmat[i];
                  flag=1;
               }
           }
        }else {flag=1;}
        //se forem iguais a flag esta a 0 entao tem d imprimir que esta no sitio certo
        if (flag==0 && lenghtcountmat[i]==lenghtcountaux[i])
        {
           for(l=0;l<=lenghtcountmat[i]-1;l++)
           {
               printf("%c", mat[i][l]);
           }
           printf(" esta no sitio correcto\n");
           contador++;
        }
        //se os tamanhos forem difrentes ou se as palavras tambem forem vai testar com todas as outras palavras
        if (flag==1)
        {
           for(o=0;o<=5;o++)
           {
              if (lenghtcountmat[o]==lenghtcountaux[i])
              {
                 flag=0;
                 for(k=0;k<=lenghtcountmat[o]-1;k++)
                 {
                    
                    if (mat[o][k]!=aux[i][k])
                    {
                       flag2=1;
                       flag=1;
                    }
                 }
                 if (flag==0)
                 {        
                    for(l=0;l<=lenghtcountaux[i]-1;l++)
                    {
                        printf("%c", aux[i][l]);
                    }
                    printf(" existe noutra posicao\n");
                    flag2=0;
                    o=3;
                 }
              }else if (lenghtcountmat[o]!=lenghtcountaux[i])
              {
                    flag2=1;
              }
           }
        }
        if (flag2==1)
        {
              for(l=0;l<=lenghtcountaux[i]-1;l++)
              {
                   printf("%c", aux[i][l]);
               }
               printf(" nao existe\n");
               flag2=0;
        }
    }                  
  }while (contador!=6);
  printf("PARABENS!! Numero de tentativas %d",tentativas);
  system("PAUSE");	
  return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Começas por gerar n (número de bolas) números aleatórios.

De seguida, les k tentativas do utilizador.

Para cada tentativa, tens que dar a resposta correcta (antes do utilizador inserir a tentativa seguinte)

A resposta correcta é dada em função do número de números certos, na posição correcta, e de números correctos, mas em posição errada.

Só não estou a perceber para que serve a matriz, visto o MasterMind se basear num só vector.. A menos que queiras guardar as tentativas anteriores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A repetição d cores, o numero d cores, a dimensão da chave e o tal maximo d tentativas devem ser definidos á priori pelo utilizador.o computador deve gerar aleatoriamente a uma chave com n cores(representadas com letras), d um conjunto d M cores possiveis.Deverá ser possivel definir chaves com cores(letras) repetidas. O programa deverá ser implementado atraves d vectores bidimensionais alocados dinamicamente d acordo com a dimensão do tabuleiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

oi peço ajuda na concepção em linguagem c e em pseudo código do jogo mastermind, o programa em c e em pseudo código tem d ser ou com matrizes ou com filas, mas gostava antes k fosse com matrizes pk filas n percebo mt  :D.Agradeço mt td a ajuda possivel. Mt obrigada

eu já fiz isto mas dá m erros estruturais alguem m pd ajudar, o problema é k eu n sei ond estão os erros n faço a mínima iedia msm, já corri o rpograma d abixo a cima e nd :S?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int tentativas,flag2,contador,f,flag,i,j,o,k,l,lenghtcountaux[3],lenghtcountmat[3];
    char car[2],mat[3][99],aux[3][99];
  //leitura da chave
  printf("Digite a chave de 6 cores separada por espacos: ");
  for(i=0;i<=5;i++)
  {
      j=0;
      do
      {
       car[1]=getchar();
       mat[i][j]=car[1];
       j++;
      }while(car[1]!=' ' && car[1]!='\n');
      lenghtcountmat[i]=j-1;
  }
  f=0;
  tentativas=0;
  do
  {
      contador=0;
      tentativas++;
      //leitura da tentativa
    printf("Digite a sequencia de 6 cores: ");
    for(i=0;i<=5;i++)
    {
      j=0;
      do
      {
       car[1]=getchar();
       aux[i][j]=car[1];
       j++;
      }while(car[1]!=' ' && car[1]!='\n');
      lenghtcountaux[i]=j-1;
    }
    //verificar se corresponde
    for(i=0;i<=5;i++)
    {
        //se os tamanhos das palavras nao corresponderem nao vale a pena compara-las
        flag=0;
        if (lenghtcountmat[i]==lenghtcountaux[i])
        {
           for(k=0;k<=lenghtcountmat[i]-1;k++)
           {
               
               if (mat[i][k]!=aux[i][k])
               {
                  k=lenghtcountmat[i];
                  flag=1;
               }
           }
        }else {flag=1;}
        //se forem iguais a flag esta a 0 entao tem d imprimir que esta no sitio certo
        if (flag==0 && lenghtcountmat[i]==lenghtcountaux[i])
        {
           for(l=0;l<=lenghtcountmat[i]-1;l++)
           {
               printf("%c", mat[i][l]);
           }
           printf(" esta no sitio correcto\n");
           contador++;
        }
        //se os tamanhos forem difrentes ou se as palavras tambem forem vai testar com todas as outras palavras
        if (flag==1)
        {
           for(o=0;o<=5;o++)
           {
              if (lenghtcountmat[o]==lenghtcountaux[i])
              {
                 flag=0;
                 for(k=0;k<=lenghtcountmat[o]-1;k++)
                 {
                    
                    if (mat[o][k]!=aux[i][k])
                    {
                       flag2=1;
                       flag=1;
                    }
                 }
                 if (flag==0)
                 {        
                    for(l=0;l<=lenghtcountaux[i]-1;l++)
                    {
                        printf("%c", aux[i][l]);
                    }
                    printf(" existe noutra posicao\n");
                    flag2=0;
                    o=3;
                 }
              }else if (lenghtcountmat[o]!=lenghtcountaux[i])
              {
                    flag2=1;
              }
           }
        }
        if (flag2==1)
        {
              for(l=0;l<=lenghtcountaux[i]-1;l++)
              {
                   printf("%c", aux[i][l]);
               }
               printf(" nao existe\n");
               flag2=0;
        }
    }                  
  }while (contador!=6);
  printf("PARABENS!! Numero de tentativas %d",tentativas);
  system("PAUSE");	
  return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, para começar podes e deves usar a ferramenta GeSHi para meteres código... fica muito mais legível, com cores e tal...

Tens apenas 2 erros mas que cometes várias vezes...

mat[j] é um char[] enquanto que car[1] é um char, logo estás a atribuir um char[] a um char, o que obviamente dá erro.

acontece mais ou menos a mesma coisa com o lengthcountmat e lengthcountaux que são ambos int[] e estás a tentar comparar com (e atribuir a) um int.

ou seja o problema é que estás a juntar alhos (array de int e array de char) e bogalhos (int e char).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora