Пример #1
0
int p_brancas(Elem **Tab, int i, int j,int *DIM,Gravados *gr){
	int n,o,s,e,mudou1,mudou2,mudou3,mudou4;
	mudou1=1;mudou2=1;mudou3=1;mudou4=1;
		
	if (i==0) n=0;else n=1;
	if (j==0) o=0;else o=1;
	if (i==((*DIM)-1)) s=0; else s=-1;
	if (j==((*DIM)-1)) e=0; else e=-1;
	
	if (n!=0) {
		if ((mudou1=jogada('b',j+1,(i-n)+1,Tab,gr))>0) return -1;
	}
	if (s!=0) {
		if ((mudou2=jogada('b',j+1,(i-s)+1,Tab,gr))>0) return -1;
	}
	if (e!=0) {
		if ((mudou3=jogada('b',j-e+1,i+1,Tab,gr))>0) return -1;
	}
	if (o!=0) {
		if ((mudou4=jogada('b',j-o+1,i+1,Tab,gr))>0) return -1;
	}
	if(mudou1==0 || mudou2==0 || mudou3==0 || mudou4==0) return 1;
	else return 0;

}
Пример #2
0
void doisjogadores(char **board) {
    system("clear");
    print_usage2();
    print_board(board);
    while ((!game_over(board) && (!someone_wins(board, 'O')))) {
        while(1) {
            printf("\n\t\t\tVez de jogador 1:\n");
            if (jogada(board,'X')) {
                break;
                //print_board(board)
            }
        }
        if(game_over(board) || someone_wins(board, 'X'))
            break;
        system("clear");
        print_board(board);

        while (1) {
            printf("\n\t\t\tVez de jogador 2:\n");
            if(jogada(board,0)) {
                break;
            }
        }
        system("clear");
        print_board(board);
    }
    system("clear");
    print_board(board);
    if (someone_wins(board, 'X')) {
        printf("\t\t\t\t\t\t\t\tJogador 1 ganhou!\n");

        enter();

        getchar();
        ultimos(board, 1);
    } else if (someone_wins(board, 'O'))  {
        printf("\t\t\t\t\t\t\t\tJogador 2 ganhou!\n");

        enter();


        getchar();
        ultimos(board, 2);
    } else {
        printf("\t\t\t\t\t\t\t\tFoi um empate!\n");

        enter();
        getchar();
        getchar();
    }


}
Пример #3
0
void umjogador(char **board) {
    system("clear");
    print_usage1();
    int hor, vert, alpha;
    move best_move = (move) malloc (sizeof(struct legal_move));
    print_board(board);

    while (!game_over(board) && (!someone_wins(board, 'X'))) {
        if (jogada(board,0)) {
            system("clear");
            printf("A posição depois de sua última jogada:\n");
            print_board(board);
            alpha = minimax(board, 1, best_move);
            update_board(board, best_move -> hor, best_move -> vert, 1);
            printf("A posição depois da última jogada do computador:\n");
            print_board(board);
        }
    }


    if (someone_wins(board, 'X')) {
        ai_wins();
    } else {
        cats_game();
    }
}
Пример #4
0
main (){
   setlocale (LC_ALL, "Portuguese");
   system ("color 07");

   //Essse loop "ZERA" as casas do tabuleiro para qualquer novo jogo.
    for (i=0; i<=3; i++){            
        for (j=0;j<=3; j++){
            casa[i][j] = '\0';
		}
	}

     if (opcao == 5){
        system ("cls");
        cabecalho();
        informa ();
	} else {
		menu1();
		informa ();
	}

	opcao=0;

   //O loop seguinte repete o jogo enquanto se iniciarem novos jogos com os mesmos jogadores. 
	do {
      //A função da estrutura de decisão abaixo é informar novamente ao programa os nomes dos 
      //jogadores 1 e 2. O programa só passará por ela, em caso de novo jogo com jogadores iguais aos da partida anterior.
		if (nomeaux == 1){
			strcpy (nome1, nomeaux1);
			strcpy (nome2, nomeaux2);
			cabecalho ();
			tabuleiro ();
		}	
		//Laço de repetição que determina a duração do jogo.
		while (vencedor == 0 && turno < 9) {
            tabuleiro ();
			jogada ();
			system ("cls");
			cabecalho ();
			tabuleiro ();
            for (i=1; i<=3; i++){
                verificavencedor (i, 1, i, 2, i, 3);     //verifica vencedor nas colunas
				verificavencedor (1, i, 2, i, 3, i);    //verifica vencedos nas linhas
            }
            verificavencedor (1, 1, 2, 2, 3, 3);       //verifica vencedor na primeira diagona
            verificavencedor (1, 3, 2, 2, 3, 1);       //verifica vencedor na segunda diagonal
		}

		printf ("Pressione qualquer tecla para continuar...\n\n");
        getch ();
		placar ();
		printf ("Pressione qualquer tecla para continuar...\n\n");
        getch ();
		menu2();

	} while (opcao == 1);
	
	printf("Obrigado por jogar TicTacToe\nDesenvolvido por José Tarciso e Olliver Felipe.\n\n Pressione qualquer tecla para sair...");
	getch();
}
Пример #5
0
int p_preta(Elem **Tab, int i, int j,char letra,int *DIM,Gravados *gr){
	int a,mudou1,mudou2;
	mudou1=-1;mudou2=-1;
	
	for (a=0;a<(*DIM);a++){
		if(letra==(*Tab)[a][j].letra && a!=i) {
			if ((mudou1=jogada('p',j+1,a+1,Tab,gr))>0) return -1;
		}
		if(letra==(*Tab)[i][a].letra && a!=j) {
			if ((mudou2=jogada('p',a+1,i+1,Tab,gr))>0) return -1;
		}
	}
	
	if(mudou1==0 || mudou2==0) return 1;
	else return 0;

}
Пример #6
0
/*
  Função principal, que faz as chamadas das demais funções.
*/
int main(){

    allegro_init();
    install_keyboard();
    install_mouse();
    set_color_depth(32);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 560, 400, 0, 0);
    show_mouse(screen);
    casasInva();
    preecherCasas();
    jogada();
    displayUser_1();
    msgVencedor();
    return 0;
}
Пример #7
0
/**A função executajogada recebe os argumentos da linha de comandos e a cor que vai passar para a jogada.
 * Vai verificar se tem os argumetos certos, e se tal vou verdade, chama a função jogada, para que esta se possa realizar.
 * @param args Recebe ums string com os argumentos do comando do utilizador. 
 * @param cor Corresponde ao próprio comado que irá ser utilizado como a cor que se pretende mudar.
 * @param Tab Tabuleiro do jogo
 * @param DIM dimensão do tabuleiro
 * @returns Retorna um inteiro que verifica se foi ou não bem sucedida a função.
 */
int executaJogada(char *args,char *cor,int *DIM,Elem **Tab) {
  char buf[1024];
  int x, y;
	char teste1[1024],teste2[1024];
	
	int nargs = sscanf(args, "%s %s %[^\n]", teste1,teste2, buf);
	if(!isdigit(teste1[0]) || !isdigit(teste2[0])) {
     return mensagem_de_erro(E_INVARGS);
  }
	
	nargs = sscanf(args, "%d %d %[^\n]", &x, &y, buf);

  if(nargs != 2) {
     return mensagem_de_erro(E_ARGS);
  }

  jogada(*cor,x,y,DIM,Tab);

return 0;
}
Пример #8
0
void verifica(){

    // Verifica quais das 4 opções são possíveis de jogar.

    int cima=0, baixo=0, esquerda=0, direita=0;

    // Verifica se a posição onde o cursor está é uma PECA

     if(m[posLin][posCol] != PECA)
         return;

     // Verifica jogada para cima

     if(posLin>1 &&                     // Verifica se linhas acima a posição estará na matriz
        m[posLin-1][posCol] == PECA &&  // Verifica se a primeira casa acima é uma PECA
        m[posLin-2][posCol] == VAZIO){  // Verifica se a segunda casa acima é um VAZIO
            destaca(posLin-2,posCol);   // Se satisfazer todas as condições, desta a jogada
            cima = 1;                   // Marca como possível a jogada para cima
     }

     // Verifica jogada para baixo

     if(posLin<7 &&
        m[posLin+1][posCol] == PECA &&
        m[posLin+2][posCol] == VAZIO){
            destaca(posLin+2,posCol);
            baixo = 1;
     }

     // Verifica jogada para esquerda

     if(posCol>1 &&
        m[posLin][posCol-1] == PECA &&
        m[posLin][posCol-2] == VAZIO){
            destaca(posLin,posCol-2);
            esquerda = 1;
     }

     // Verifica jogada para direita

     if(posCol<7 &&
        m[posLin][posCol+1] == PECA &&
        m[posLin][posCol+2] == VAZIO){
            destaca(posLin,posCol+2);
            direita = 1;
     }

     // Verifica se alguma jogada é possível

     if(cima || baixo || esquerda || direita){

        // Se apenas uma jogada está disponível, faz a jogada automaticamente.
        // Se mais de uma está disponível, destaca as opções possíveis
        // e pede ao jogador selecionar uma.

         if(getch() == 224){

             switch(getch()){
                 case CIMA:      if(cima)     jogada(CIMA);     break;
                 case BAIXO:     if(baixo)    jogada(BAIXO);    break;
                 case ESQUERDA:  if(esquerda) jogada(ESQUERDA); break;
                 case DIREITA:   if(direita)  jogada(DIREITA);  break;
             }
         }
     }
}
Пример #9
0
//MOVE A PE�A (OU N�O)
int mover(int x, int y, char sentido[6])
{
    if (strcasecmp(sentido, "dir")== 0)
    {
        if ((y+1)>9)
            msg(1);
        else
        {

            confeito = tab[x][y+1];
            tab[x][y+1] = tab[x][y];
            tab[x][y] = confeito;
            jogada(x, y+1, sentido);
            gameover();
        }
    }
    else if (strcasecmp(sentido, "esq")== 0)
    {
        if (y-1<1)
            msg(1);
        else
        {

            confeito = tab[x][y-1];
            tab[x][y-1] = tab[x][y];
            tab[x][y] = confeito;
            jogada(x,y-1, sentido);
            gameover();
        }
    }
    else if (strcasecmp(sentido, "cima")== 0)
    {
        if (x-1<1)
            msg(1);
        else
        {

            confeito = tab[x-1][y];
            tab[x-1][y] = tab[x][y];
            tab[x][y] = confeito;
            jogada(x-1, y, sentido);
            gameover();
        }
    }
    else if (strcasecmp(sentido, "baixo")== 0)
    {
        if (x+1>9)
            msg(1);
        else
        {

            confeito = tab[x+1][y];
            tab[x+1][y] = tab[x][y];
            tab[x][y] = confeito;
            jogada(x+1, y, sentido);
            gameover();
        }
    }
    else
        msg(1);

    return 0;
}