/**Função que executa o comando dado o valor retornado na função que identifica que comando foi introduzido pelo utilizador.
 *@param jogo Referencia-se a onde se encontra guardado as dimensões do tabuleiro.
 *@param arg1 Variável onde está guardada o primeiro argumento dado pelo utilizador aquando a introdução do comando.
 *@param arg2 Variável onde está guardada o segundo argumento dado pelo utilizador aquando a introdução do comando.
 *@param comando Refere-se à opção que vai ser executada pelo utilizador.
 *@param argumentos Número de argumentos introduzidos pelo utilizador.
 *@return 1 a 7. Execução de comandos bem sucedida.
 *@return 0. Execução de comandos mal sucedida.
 */
int executa_comando(Tabuleiro jogo, int comando, int argumentos, char * arg1, char * arg2)
{
  switch(comando)
    {
    case 2: /*Se for 2 usa o carrega*/
      if(argumentos == 2) /*Recebe 2 args pois recebe o cr e o tabuleiro tipo ex1(Exemplificar: cr ex1)*/
      {
	 		carrega_tab(jogo, arg1); /*Um argumento pois só precisa do ex1, por exemplo*/
	  		return 0;
      }
      else
      {
	  		return mensagem_de_erro(E_ARGS);
      }
      break;
      
    case 3: /*Se for 3 usa o comando grava*/
      if(argumentos == 2) /*Recebe o gr e o tabuleiro que o utilizador quer*/
      {
	  		grava_tab(jogo, arg1);
	  		return 0;
      }
      else
		{
	  		return mensagem_de_erro(E_ARGS);
		}
      break;
      		
    case 4:
      if(argumentos == 3)
		{
	  		if(testa_inteiro(arg1) && testa_inteiro(arg2))
	    	{
	      	joga(jogo, atoi(arg1), atoi(arg2));
	      	jogo->n_comando++;
	    	}
	  		else
	    	{
	      	mensagem_de_erro(E_INVARGS);
	    	}
		}
      else
		{
	  		mensagem_de_erro(E_ARGS);
		}
      break;
    
    case 5:
      if(argumentos == 1)
		{
	  		estrategia1(jogo);
	  		jogo->n_comando++;
	  		impressao_ecra(jogo);
		}
      else
      {
	  		mensagem_de_erro(E_ARGS);
		}
      break;
      	
    case 6:
      if(argumentos == 1)
		{
	  		estrategia2(jogo);
	  		jogo->n_comando++;
	  		impressao_ecra(jogo);
		}
      else
		{
	  		mensagem_de_erro(E_ARGS);
		}	
      break;
      	
    case 7:
      if(argumentos == 3)
		{
	  		if(testa_inteiro(arg1) && testa_inteiro(arg2))
	    	{
	      	marca(jogo, atoi(arg1), atoi(arg2)); /*atoi significa converter uma string em inteiros*/
	      	jogo->n_comando++;
	    	}
	  		else
	    	{
	      	mensagem_de_erro(E_INVARGS);
	    	}
		}
      else
		{
	  		mensagem_de_erro(E_ARGS);
		}
      break;
      	
    case 8:
      if(argumentos == 1)
		{
	  		estrategia3(jogo);
	  		jogo->n_comando++;
	  		impressao_ecra(jogo);
		}
      else
		{
	  		mensagem_de_erro(E_ARGS);
		}	
      break;
      	
    case 9:
      if(argumentos == 1)
		{
	  		anula(jogo);
		}
      else
		{
	  		mensagem_de_erro(E_ARGS);
		}	
      break;
      	
    case 10:
      if(argumentos == 1)
		{
	  		estrategia4(jogo);
	  		jogo->n_comando++;
	  		impressao_ecra(jogo);
		}
      else
		{
	  		mensagem_de_erro(E_ARGS);
		}		
      break;
      	
    case 11:
      if(argumentos == 1)
		{
	  		estrategia5(jogo);
	  		jogo->n_comando++;
	  		impressao_ecra(jogo);
		}
      else
		{
	  		mensagem_de_erro(E_ARGS);
		}	
      break;
    
    case 12:
      if(argumentos == 1)
		{
	  		resolve(jogo);
	  		jogo->n_comando++;
	  		impressao_ecra(jogo);
		}
      else
		{
	  		mensagem_de_erro(E_ARGS);
		}	
      break;
    }
  return 0;
}
Esempio n. 2
0
int main (void)
{
    int pulo1=0,fim,jogada, c, l, x, contjogadas, jogador;
    int matriz [3][3], mjogador1[8][3], mjogador2[8][3], mjogada[3][3];
    void iniciamatriz(int [8][3]);
    void printmatriz(int [][3]);
    void matrizprincipal(int [][3]);
    void marca (int mjogador[][3], int jogada,int jogador,int* ppulo1);
    int* ppulo1;
    int repete (int);

fim=10;
ppulo1=&pulo1;
while (fim)
{
    //zerando a matriz jogada
  for(l=0;l<3;l++)
  {
        for(c=0;c<3;c++)
        {
            mjogada[l][c]=0;
        }
  }

  //iniciando as matrizes mjogador 1 e 2

  iniciamatriz(mjogador1);
  iniciamatriz(mjogador2);
    //preenchendo a matriz jogo da velha com valores de 1 a 9
    matrizprincipal(matriz);

    for(pulo1=0,jogador=1,contjogadas=0;contjogadas<9;contjogadas++,jogador++)
    {
    if(jogador==3)
    {
        jogador=1;
    }

        printf("\n\njogador %d\t",jogador);
        scanf("%d",&jogada);
        while(jogada<1||jogada>9)
        {
            printf("\njogada invalida, insira um numero entre 1 e 9\n");
            scanf("%d",&jogada);
        }
        jogada=jogada-1;
        l=jogada/3;
        c=jogada%3;
        while(mjogada[l][c]!=0)
        {
            printf("\njogada invalida, insira um numero entre 1 e 9 que ainda nao foi usado\n");
            scanf("%d",&jogada);
            jogada=jogada-1;
            l=jogada/3;
            c=jogada%3;
        }
        mjogada[l][c]=jogador;

    printf("\n");
    printf("\n     |     |     ");
    printf("\n %d   |  %d  |  %d   ",mjogada[0][0],mjogada[0][1],mjogada[0][2]);
    printf("\n_____|_____|_____");
    printf("\n     |     |     ");
    printf("\n %d   |  %d  |   %d  ",mjogada[1][0],mjogada[1][1],mjogada[1][2]);
    printf("\n_____|_____|_____");
    printf("\n     |     |     ");
    printf("\n %d   |  %d  |   %d  ",mjogada[2][0],mjogada[2][1],mjogada[2][2]);
    printf("\n     |     |     ");

printf("\n");

    if(jogador==1)
   {marca (mjogador1,jogada,jogador,ppulo1);}
    if(jogador==2)
    {marca (mjogador2,jogada,jogador,ppulo1);}
    if(pulo1==1)
    {
        break;
    }
    }
    if(contjogadas==9)
    {printf("\nnao houve vencedor\n");}
    fim=repete(fim);
}
    return 0;
}