Jump to content
Sign in to follow this  
pnrf

Jogo MATE

Recommended Posts

pnrf

Boas pessoal.

É o meu primeiro tópico neste fórum.

Sou estudante de Tecnologias e Sistemas de Informação (TSI) e estou a desenvolver um jogo denominado MATE para a cadeira Inteligência Artificial. A ideia do jogo é colocar 2 jogadores a jogarem entre si. Regras básicas: cada jogador recebe 10 cartas, vector (20), existem 4 cores e 5 peças. Rainha, Torre, Peão,Bispo e Cavalo. E as cores são: Black, Red, Yellow e White (já pus tanto as peças como as cores por ordem de mais valiosa). E tou com duvidas na validação da carta.. Quem não percebeu bem as regras do jogo deixo aqui o meu relatório para o programa, onde explica la. http://cid-edce2e43937ef425.skydrive.live.com/self.aspx/.Public/UBI/relatorio.pdf

E já agora, uma função para jogar User vs PC que tambem desconheço como se faz.

Vou deixar aqui o código para se alguem me souber ajudar.

Não liguem muito à estrutura do programa, está mal organizado mas ainda sou um iniciante x)

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


enum boolean{
     true=1,false=0
     };  
     
// mostrar cartas

void mostracartas (char vector[][3],int n)
{
     int i;
     for (i=0;i<n;i++)
     {
         printf("%d-%s ",i, vector[i]);
     }
}     

// mostrar carta 


char mostracarta (char vector[][3],int n)
{
    
        printf("%s",vector[n]);
} 


// Ordebação por borbulagem - algoritmo de ordenação

void ordenacartas(int vector[], int n)
{
int k, Num_trocas, aux;
do{
Num_trocas = 0;
for (k = 0; k < n-1; k++)
if (vector[k] >vector[k+1])
{
aux = vector[k];
vector[k] = vector[k+1];
vector[k+1] = aux;
Num_trocas++;
}
} while (Num_trocas != 0);
return;
}


// Eliminar cartas jogadas

void eliminarcartas(char k, int n, int vector[])
{
   int i,aux;
   for (i = k+1; i <= n; ++i) 

    vector[i-1]=vector[i];
    aux = vector[i+1];
    vector[i]=aux;
      
   return ;
}
// concatenar cartas

void concatena(char v[][3], char y[][3], int w[],int n)
{
   int i;
   for(i=0;i<n;i++)
   {
   int a;     
   a=w[i]; 
   strcpy(y[i],v[a]);
   }      
} 

// --- MAIN ---

main(){
      
int i,j,n20=20,n10=10,pc,pp; // pc = pesquisa cor, pp = pesquisa peça
//char j1[1][3]={"bQ"};
char temp;
char cartas [20][3]={"bQ","bR","bB","bN","bP","rQ","rR","rB","rN","rP","yQ","yR","yB","yN","yP","wQ","wR","wB","wN","wP"};
char jog1 [10][3];
char jog2 [10][3];
char  jogada1;
char  jogada2;
char valorjoga1;//variavel com as letras da carta jogada pelo jogador1
char valorjoga2;//variavel com as letras da carta jogada pelo jogador2

const  int VALOR=20; ///quantos numeros vamos ter para misturar
const  int MAX=20;  ///valor maximo tem de ser igual ao que vamos misturar
int val [10];
int val1 [10];

// baralhar cartas
typedef enum boolean bool;
bool check = true;
if (check){
           check=false;
           }
           

srand(time(NULL));  
for (i=0;i<10;i++)
{
   
    int n;
    do
    {
    n=rand()%MAX;
    check=true;
    for (j=0;j<i;j++)
        if (n == val[j])
        {
            check=false; 
            break; 
        }
    } while (!check); 
    val[i]=n; 
}           

ordenacartas(val,10);

for(i=0;i<10;i++)
{
   int j=0;int k=0;
   for(i=0;i<20;i++)
   {
   if(i!=val[k])
   {
       val1[j]=i;
       j++;
   }
   else
   {
       k++;
   }
}
}
ordenacartas(val1,10);
concatena(cartas,jog1,val,10);
concatena(cartas,jog2,val1,10);
for(i=1;i<=10;i++)
{
    int aux;
    aux=val[i];
    val[i]=val1[i];
    val1[i]=aux;
}

// inicio  Jogo[
printf("***** Cartas de Jogo *****\n");
printf("\n");
mostracartas(cartas,n20);
printf("\n");

printf("\n----- Cartas do Jogador 1 -----\n");
mostracartas(jog1,n10);
printf("\n");

printf("\n----- Cartas do Jogador 2 -----\n");
mostracartas(jog2,n10);
printf("\n");

/// JOGAR

printf("\nVamos JOGAR \n");
int nj=10,njogada=1;
do{
do{
printf("\n---> Ronda %d\n",njogada);
printf("\n");
printf("Jogador 1 a Jogar\n");

concatena(cartas,jog1,val,nj);
mostracartas(jog1,nj);
printf ("\n:> ");

scanf("%s",&jogada1); ///jogada do jogador 1

printf("\nJogador 2 a Jogar \n");

concatena(cartas,jog2,val1,nj);
mostracartas(jog2,nj);
printf ("\n:> ");

scanf("\n%s",&jogada2); ///jogada do jogador 2


nj--;

eliminarcartas(jogada1,nj,val);
eliminarcartas(jogada2,nj,val1);

njogada++;
}while((val[jogada1]>val1[jogada2])&&(njogada>10));
}while(njogada<=10);



getch();

}

Share this post


Link to post
Share on other sites
pnrf

Validar as cartas jogadas. Tipo tenho um vector de 20 cartas, cada jogador fica com 10

Depois tens tipo as cartas de 0 a 9, mas para o jogador seguinte jogar, nem todas as cartas sao validas para jogar de acordo com as regras.

se leres o relatorio ja percebes as regras x)

Share this post


Link to post
Share on other sites
drexinhu

Quando o jogador escolhe uma carta para jogar:

1º - percorres o vector das cartas desse jogador, e verificas que essa carta encontra-se lá.

2º - Caso seja o segundo a jogar, verificas a cor da carta do primeiro jogador, e ves se tem a mesma cor.

3º - Caso seja o segundo a jogar, verificas a peça da carta do primeiro jogador, e ves se a carta jogada é a mesma peça mas de diferente cor.

se já estás encravado nesta parte, tenho sérias duvidas se serás capaz de concluir o trabalho :( a parte do pc VS pc com inteligência artificial vai-te comer bem a cabeça. E não te esqueças que o prof nao aceita brute force ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.