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

pnrf

Jogo MATE

4 mensagens neste tópico

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();

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Disseste que estavas com uma dúvida, mas não disseste qual era a dúvida...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ;)

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