Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- int xeque_torre(int i, int j, char king);
- int xeque_bispo(int i, int j, char king);
- char tabuleiro[10][10] = {
- { 'T', 'C', 'B', 'Q', 'K', 'B', 'C', 'T' },
- { 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P' },
- { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
- { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
- { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
- { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' },
- { 'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p' },
- { 't', 'c', 'b', 'k', 'q', 'b', 'c', 't' },
- };
- char jogador1[6] = {'p', 't', 'c', 'b', 'k', 'q'};
- char jogador2[6] = {'P', 'T', 'C', 'B', 'Q', 'K'};
- void pula_linha(int n){
- int i;
- for(i = 0; i < n; i++) putchar('\n');
- }
- void visualizar_tabuleiro(void){
- int i, j, cont = 0;
- for(i = 0; i < 8; i++)
- {
- printf("\t\t\t\t\t %d ", cont); cont++;
- for(j = 0; j < 8; j++)
- {
- printf("%c ", tabuleiro[i][j]);
- }
- putchar('\n');
- }
- putchar('\n');
- printf("\t\t\t\t\t ");
- for(i = 0; i < 8; i++) printf("%d ", i);
- }
- void movimento(int x1, int y1, int x2, int y2){
- tabuleiro[x2][y2] = tabuleiro[x1][y1];
- tabuleiro[x1][y1] = ' ';
- }
- int xeque_rainha(int i, int j, char king){
- /*A RAINHA FAZ O MOVIMENTO DO BISOO E O DA TORRE*/
- /*DIRECIONAMOS O ALGORITMO PARA AS RESPECTIVAS FUNCOES*/
- if(xeque_bispo(i, j, king)) return 1;
- else if(xeque_torre(i, j, king)) return 1;
- return 0;
- }
- int xeque_bispo(int i, int j, char king){
- int x, y;
- /*NESSE FOR O BISPO CAMINHA PARA O SUDESTE DO TABULEIRO*/
- for(x = (i+1), y =(j+1); x < 8 && y < 8; x++, y++)
- { /*VERIFICA SE HA O REI EM SEU CAMINHO*/
- if(tabuleiro[x][y] == king) return 1;
- else if(tabuleiro[x][y] != ' ') break;
- }
- /*NESSE FOR O BISPO CAMINHA PARA O SUDOESTE DO TABULEIRO*/
- for(x = (i+1), y = (j-1); x < 8 && y < 8; x++, y--)
- { /*VERIFICA SE HA O REI EM SEU CAMINHO*/
- if(tabuleiro[x][y] == king) return 1;
- else if(tabuleiro[x][y] != ' ') break;
- }
- /*NESSE FOR O BISPO CAMINHA PARA O NOROESTE DO TABULEIRO*/
- for(x = (i-1), y = (j-1); x < 8 && y < 8; x--, y--)
- { /*VERIFICA SE HA O REI EM SEU CAMINHO*/
- if(tabuleiro[x][y] == king) return 1;
- else if(tabuleiro[x][y] != ' ') break;
- }
- /*NESSE FOR O BISPO CAMINHA PARA O NORDESTE DO TABULEIRO*/
- for(x = (i-1), y = (j+1); x < 8 && y < 8; x--, y++)
- { /*VERIFICA SE HA O REI EM SEU CAMINHO*/
- if(tabuleiro[x][y] == king) return 1;
- else if(tabuleiro[x][y] != ' ') break;
- }
- return 0;
- }
- int xeque_cavalo(int i, int j, char king){
- /*VERIFICA SE EM CADA POSICAO POSSIVEL DE JOGADA DO CAVALO, HA O REI*/
- if(tabuleiro[i+2][j+1] == king) return 1;
- else if(tabuleiro[i+2][j-1] == king) return 1;
- else if(tabuleiro[i+1][j+2] == king) return 1;
- else if(tabuleiro[i+1][j-2] == king) return 1;
- else if(tabuleiro[i-1][j-2] == king) return 1;
- else if(tabuleiro[i-1][j+2] == king) return 1;
- else if(tabuleiro[i-2][j-1] == king) return 1;
- else if(tabuleiro[i-2][j+1] == king) return 1;
- return 0;
- }
- int xeque_torre(int i, int j, char king){
- int x, y;
- /*NESSE FOR, A TORRE NAO MUDA DE COLUNA, ELA VAI PRA BAIXO*/
- for(x = (i + 1); x < 8; x++)
- { /*VERIFICA SE HA O REI EM SEU CAMINHO*/
- if(tabuleiro[x][j] == king) return 1;
- else if(tabuleiro[x][j] != ' ') break;
- }
- /*NESSE FOR, A TORRE NAO MUDA DE COLUNA, ELA VAI PRA CIMA*/
- for(x = (i - 1); x >= 0; x--)
- { /*VERIFICA SE HA O REI EM SEU CAMINHO*/
- if(tabuleiro[x][j] == king) return 1;
- else if(tabuleiro[x][j] != ' ') break;
- }
- /*NESSE FOR, A TORRE NAO MUDA DE LINHA, ELA VAI PRA DIREITA*/
- for(y = (j + 1); y < 8; y++)
- { /*VERIFICA SE HA O REI EM SEU CAMINHO*/
- if(tabuleiro[i][y] == king) return 1;
- else if(tabuleiro[i][y] != ' ') break;
- }
- /*NESSE FOR, A TORRE NAO MUDA DE LINHA, ELA VAI PRA ESQUERDA*/
- for(y = (j - 1); y >= 0; y--)
- { /*VERIFICA SE HA O REI EM SEU CAMINHO*/
- if(tabuleiro[i][y] == king) return 1;
- else if(tabuleiro[i][y] != ' ') break;
- }
- return 0;
- }
- int xeque_peao(int i, int j, char king, int atual){
- /*O PEAO ATACA APENAS PELAS SUAS DIAGONAIS*/
- if(atual == 1)
- { /*VERIFICA SE HA O REI NA SUA DIAGONAL DA ESQUERDA, DE CIMA PRA BAIXO*/
- if(tabuleiro[i+1][j-1] == king)
- return 1;
- /*VERIFICA SE HA O REI NA SUA DIAGONAL DA DIREITA, DE CIMA PRA BAIXO*/
- else if(tabuleiro[i+1][j+1] == king)
- return 1;
- }
- else if(atual == 2)
- { /*VERIFICA SE HA O REI NA SUA DIAGONAL DA ESQUERDA, DE BAIXO PRA CIMA*/
- if(tabuleiro[i-1][j-1] == king)
- return 1;
- /*VERIFICA SE HA O REI NA SUA DIAGONAL DA DIREITA, DE BAIXO PRA CIMA*/
- else if(tabuleiro[i-1][j+1] == king)
- return 1;
- }
- return 0;
- }
- int xeque(int i, int j, char king, int atual){
- /*LE TODA A MATRIZ*/
- for(i = 0; i < 8; i++)
- {
- for(j = 0; j < 8; j++)
- { /*SE FOR A VEZ DO JOGADOR 2, O ALGORITMO VAI VERIFICAR SE TEM ALGUMA PECA
- ADVERSARIA, ATACANDO O SEU REI*/
- if(atual == 2)
- { /*PROCURA AS PECAS DO OPONENTE*/
- if(tabuleiro[i][j] == 'p')
- { /*CHECA SE ALGUM DE TODOS OS PEOES INIMIGO AMEACA O SEU REI*/
- if(xeque_peao(i, j, king, atual)) return 1;
- }
- else if(tabuleiro[i][j] == 't')
- { /*CHECA SE ALGUMA DE TODAS AS TORRES INIMIGA AMEACA O SEU REI*/
- if(xeque_torre(i, j, king)) return 1;
- }
- else if(tabuleiro[i][j] == 'c')
- { /*CHECA SE ALGUMA DE TODOS OS CAVALOS INIMIGO AMEACA O SEU REI*/
- if(xeque_cavalo(i, j, king)) return 1;
- }
- else if(tabuleiro[i][j] == 'b')
- { /*CHECA SE ALGUM DE TODOS OS BISPOS INIMIGO AMEACA O SEU REI*/
- if(xeque_bispo(i, j, king)) return 1;
- }
- else if(tabuleiro[i][j] == 'q')
- {
- if(xeque_rainha(i, j, king)) return 1;
- }
- }
- if(atual == 1)
- { /*PROCURA AS PECAS DO OPONENTE*/
- if(tabuleiro[i][j] == 'P')
- { /*CHECA SE ALGUM DE TODOS OS PEOES INIMIGO AMEACA O SEU REI*/
- if(xeque_peao(i, j, king, atual)) return 1;
- }
- else if(tabuleiro[i][j] == 'T')
- { /*CHECA SE ALGUMA DE TODAS AS TORRES INIMIGA AMEACA O SEU REI*/
- if(xeque_torre(i, j, king)) return 1;
- }
- else if(tabuleiro[i][j] == 'C')
- { /*CHECA SE ALGUMA DE TODOS OS CAVALOS INIMIGO AMEACA O SEU REI*/
- if(xeque_cavalo(i, j, king)) return 1;
- }
- else if(tabuleiro[i][j] == 'B')
- { /*CHECA SE ALGUM DE TODOS OS BISPOS INIMIGO AMEACA O SEU REI*/
- if(xeque_bispo(i, j, king)) return 1;
- }
- else if(tabuleiro[i][j] == 'Q')
- {
- if(xeque_rainha(i, j, king)) return 1;
- }
- }
- }
- }
- return 0;
- }
- /*MOVIMENTO DO REI*/
- int rei(int x1, int y1, int x2, int y2){
- /*O REI SO PODE SE MOVIMENTAR UMA CASA AO SEU REDOR*/
- /*LOGO, A DIFERENCA ENTRA AS CASAS NAO PODEM VARIAR MAIS QUE -1 E 1*/
- if(((x2 - x1) <= 1 && (x2 - x1) >= -1) && ((y2 - y1) <= 1 && (y2 - y1) >= -1))
- return 1;
- return 0;
- }
- /*MOVIMENTO DA RAINHA*/
- int rainha(int x1, int y1, int x2, int y2){
- /*A RAINHA FAZ O MOVIMENTO DO BISPO + O DA TORRE*/
- int i, j;
- /*FAZ O MOVIMENTO DO BISPO*/
- if((x1 != x2) && (y1 != y2))
- {
- /*SE VERDADEIRO, SIGNIFICA QUE A RAINHA DESCEU (AUMENTOU LINHA)*/
- if(x1 < x2)
- { /*SE VERDADEIRO, SIGNIFICA QUE ELE FOI PRA DIREITA - SUDESTE*/
- if(y1 < y2)
- { /*COMEÇA A VERIFICAR A PARTIR DA CASA SEGUINTE*/
- for(i = (x1 + 1), j = (y1 + 1); (i < x2) && (j < y2); i++, j++)
- { /*RAINHA NAO PULA PECA, E PRECISO VERIFICAR O CAMINHO*/
- if(tabuleiro[i][j] != ' ')
- return 0;
- }
- return 1;
- }
- /*SE VERDADEIRO, SIGNIFICA QUE ELE FOI PRA ESQUEDA - SUDOESTE*/
- else if(y1 > y2)
- { /*COMEÇA A VERIFICAR A PARTIR DA CASA SEGUINTE*/
- for(i = (x1 + 1), j = (y1 - 1); (i < x2) && (j > y2); i++, j--)
- { /*RAINHA NAO PULA PECA, E PRECISO VERIFICAR O CAMINHO*/
- if(tabuleiro[i][j] != ' ')
- return 0;
- }
- return 1;
- }
- }
- /*SE VERDADEIRO, SIGNIFICA QUE A RAINHA SUBIU (DIMINUIU LINHA)*/
- else if(x1 > x2)
- { /*SE VERDADEIRO, SIGNIFICA QUE ELE FOI PRA DIREITA - NORDESTE*/
- if(y1 < y2)
- { /*COMEÇA A VERIFICAR A PARTIR DA CASA SEGUINTE*/
- for(i = (x1 - 1), j = (y1 + 1); (i > x2) && (j < y2); i--, j++) // SOBE PARA DIREITA
- { /*RAINHA NAO PULA PECA, E PRECISO VERIFICAR O CAMINHO*/
- if(tabuleiro[i][j] != ' ')
- return 0;
- }
- return 1;
- /*SE VERDADEIRO, SIGNIFICA QUE ELE FOI PRA ESQUERDA - NOROESTE*/
- }
- else if(y1 > y2)
- { /*COMEÇA A VERIFICAR A PARTIR DA CASA SEGUINTE*/
- for(i = (x1 - 1), j = (y1 - 1); (i > x2) && (j > y2); i--, j--) // SOBE PARA ESQUERDA
- { /*RAINHA NAO PULA PECA, E PRECISO VERIFICAR O CAMINHO*/
- if(tabuleiro[i][j] != ' ')
- return 0;
- }
- return 1;
- }
- }
- }
- /*SENAO FAZ O MOVIMENTO DA TORRE*/
- else
- { /*NESSA CONDICAO ELA SE MANTEM NA MESMA LINHA E MUDA DE COLUNA*/
- if(x1 == x2 && y1 != y2)
- { /*VERIFICA SE ELA FOI PRA DIREITA, SE SIM EXECUTA*/
- if(y2 > y1)
- { /*VERIFICA O CAMINHO ATE UMA CASA A MENOS DA DESEJADA*/
- for(i = (y1 + 1); i < y2; i++)
- { /*VENDO SE O CAMINHO ESTA LIVRE, JA QUE A RAINHA NAO PULA PECA*/
- if(tabuleiro[x1][i] != ' ')
- return 0;
- }
- return 1;
- }
- /*VERIFICA SE ELA FOI PRA ESQUERDA, SE SIM, EXECUTA*/
- else if(y2 < y1)
- { /*VERIFICA O CAMINHO ATE UMA CASA A MENOS DA DESEJADA*/
- for(i = (y1 - 1); i > y2; i--)
- { /*VENDO SE O CAMINHO ESTA LIVRE, JA QUE A RAINHA NAO PULA PECA*/
- if(tabuleiro[x1][i] != ' ')
- return 0;
- }
- return 1;
- }
- }
- /*NESSA CONDICAO ELA SE MANTEM NA MESMA COLUNA E MUDA DE LINHA*/
- else if(y1 == y2 && x1 != x2)
- { /*VERIFICA SE ELA FOI PRA BAIXO, SE SIM EXECUTA*/
- if(x2 > x1)
- { /*VERIFICA O CAMINHO ATE UMA CASA A MENOS DA DESEJADA*/
- for(i = (x1 + 1); i < x2; i++)
- { /*VENDO SE O CAMINHO ESTA LIVRE, JA QUE A RAINHA NAO PULA PECA*/
- if(tabuleiro[i][y1] != ' ')
- return 0;
- }
- return 1;
- }
- /*VERIFICA SE ELA FOI PRA CIMA, SE SIM, EXECUTA*/
- else if(x2 < x1)
- { /*VERIFICA O CAMINHO ATE UMA CASA A MENOS DA DESEJADA*/
- for(i = (x1 - 1); i > x2; i--)
- { /*VENDO SE O CAMINHO ESTA LIVRE, JA QUE A RAINHA NAO PULA PECA*/
- if(tabuleiro[i][y1] != ' ')
- return 0;
- }
- return 1;
- }
- }
- }
- return 0;
- }
- /*MOVIMENTO DO BISPO*/
- int bispo(int x1, int y1, int x2, int y2){
- int i, j;
- /*SE VERDADEIRO, SIGNIFICA QUE O BISPO DESCEU (AUMENTOU LINHA)*/
- if(x1 < x2)
- { /*SE VERDADEIRO, SIGNIFICA QUE ELE FOI PRA DIREITA - SUDESTE*/
- if(y1 < y2)
- { /*COMEÇA A VERIFICAR A PARTIR DA CASA SEGUINTE*/
- for(i = (x1 + 1), j = (y1 + 1); (i < x2) && (j < y2); i++, j++)
- { /*BISPO NAO PULA PECA, E PRECISO VERIFICAR O CAMINHO*/
- if(tabuleiro[i][j] != ' ')
- return 0;
- }
- return 1;
- }
- /*SE VERDADEIRO, SIGNIFICA QUE ELE FOI PRA ESQUEDA - SUDOESTE*/
- else if(y1 > y2)
- { /*COMEÇA A VERIFICAR A PARTIR DA CASA SEGUINTE*/
- for(i = (x1 + 1), j = (y1 - 1); (i < x2) && (j > y2); i++, j--)
- { /*BISPO NAO PULA PECA, E PRECISO VERIFICAR O CAMINHO*/
- if(tabuleiro[i][j] != ' ')
- return 0;
- }
- return 1;
- }
- }
- /*SE VERDADEIRO, SIGNIFICA QUE O BISPO SUBIU (DIMINUIU LINHA)*/
- else if(x1 > x2)
- { /*SE VERDADEIRO, SIGNIFICA QUE ELE FOI PRA DIREITA - NORDESTE*/
- if(y1 < y2)
- { /*COMEÇA A VERIFICAR A PARTIR DA CASA SEGUINTE*/
- for(i = (x1 - 1), j = (y1 + 1); (i > x2) && (j < y2); i--, j++) // SOBE PARA DIREITA
- { /*BISPO NAO PULA PECA, E PRECISO VERIFICAR O CAMINHO*/
- if(tabuleiro[i][j] != ' ')
- return 0;
- }
- return 1;
- /*SE VERDADEIRO, SIGNIFICA QUE ELE FOI PRA ESQUERDA - NOROESTE*/
- }
- else if(y1 > y2)
- { /*COMEÇA A VERIFICAR A PARTIR DA CASA SEGUINTE*/
- for(i = (x1 - 1), j = (y1 - 1); (i > x2) && (j > y2); i--, j--) // SOBE PARA ESQUERDA
- { /*BISPO NAO PULA PECA, E PRECISO VERIFICAR O CAMINHO*/
- if(tabuleiro[i][j] != ' ')
- return 0;
- }
- return 1;
- }
- }
- return 0;
- }
- /*MOVIMENTO DO CAVALO*/
- int cavalo(int x1, int y1, int x2, int y2){
- /*NESSA CONDICAO ELA MUDA APENAS UMA COLUNA PARA DIREITA OU PARA ESQUERDA*/
- if((y1 + 1) == y2 || (y1 - 1) == y2)
- { /*NESSA CONDICAO ELA DESCE DUAS LINHAS*/
- if((x1 + 2) == x2)
- { /*MOVIMENTO VALIDO, RETORNA 1*/
- return 1;
- }
- /*NESSA CONDICAO ELA SOBE DUAS LINHAS*/
- else if((x1 - 2) == x2)
- { /*MOVIMENTO VALIDO, RETORNA 1*/
- return 1;
- }
- }
- /*NESSA CONDICAO ELA MUDA APENAS UMA LINHA PARA CIMA OU PARA BAIXO*/
- if((x1 + 1) == x2 || (x1 - 1) == x2)
- { /*NESSA CONDICAO ELA VAI DUAS COLUNAS PARA DIREITA*/
- if((y1 + 2) == y2)
- { /*MOVIMENTO VALIDO, RETORNA 1*/
- return 1;
- }
- /*NESSA CONDICAO ELA VAI DUAS COLUNAS PARA ESQUERDA*/
- else if((y1 - 2) == y2)
- { /*MOVIMENTO VALIDO, RETORNA 1*/
- return 1;
- }
- }
- return 0;
- }
- /*MOVIMENTOS DA TORRE*/
- int torre(int x1, int y1, int x2, int y2){
- /*OBS: A TORRE, OU MUDA DE LINHA OU DE COLUNA*/
- int i;
- /*NESSA CONDICAO ELA SE MANTEM NA MESMA LINHA E MUDA DE COLUNA*/
- if(x1 == x2 && y1 != y2)
- { /*VERIFICA SE ELA FOI PRA DIREITA, SE SIM EXECUTA*/
- if(y2 > y1)
- { /*VERIFICA O CAMINHO ATE UMA CASA A MENOS DA DESEJADA*/
- for(i = (y1 + 1); i < y2; i++)
- { /*VENDO SE O CAMINHO ESTA LIVRE, JA QUE A TORRE NAO PULA PECA*/
- if(tabuleiro[x1][i] != ' ')
- return 0;
- }
- return 1;
- }
- /*VERIFICA SE ELA FOI PRA ESQUERDA, SE SIM, EXECUTA*/
- else if(y2 < y1)
- { /*VERIFICA O CAMINHO ATE UMA CASA A MENOS DA DESEJADA*/
- for(i = (y1 - 1); i > y2; i--)
- { /*VENDO SE O CAMINHO ESTA LIVRE, JA QUE A TORRE NAO PULA PECA*/
- if(tabuleiro[x1][i] != ' ')
- return 0;
- }
- return 1;
- }
- }
- /*NESSA CONDICAO ELA SE MANTEM NA MESMA COLUNA E MUDA DE LINHA*/
- else if(y1 == y2 && x1 != x2)
- { /*VERIFICA SE ELA FOI PRA BAIXO, SE SIM EXECUTA*/
- if(x2 > x1)
- { /*VERIFICA O CAMINHO ATE UMA CASA A MENOS DA DESEJADA*/
- for(i = (x1 + 1); i < x2; i++)
- { /*VENDO SE O CAMINHO ESTA LIVRE, JA QUE A TORRE NAO PULA PECA*/
- if(tabuleiro[i][y1] != ' ')
- return 0;
- }
- return 1;
- }
- /*VERIFICA SE ELA FOI PRA CIMA, SE SIM, EXECUTA*/
- else if(x2 < x1)
- { /*VERIFICA O CAMINHO ATE UMA CASA A MENOS DA DESEJADA*/
- for(i = (x1 - 1); i > x2; i--)
- { /*VENDO SE O CAMINHO ESTA LIVRE, JA QUE A TORRE NAO PULA PECA*/
- if(tabuleiro[i][y1] != ' ')
- return 0;
- }
- return 1;
- }
- }
- return 0;
- }
- /*MOVIMENTOS DO PEAO*/
- int peao(int x1, int y1, int x2, int y2, int atual){
- int i;
- /*IDENTIFICA SE O JOGADOR 1 E O DA VEZ*/
- if(atual == 1)
- { /*PEAO ANDA PARA FRENTE*/
- if(x2 == (x1 - 1) && y1 == y2)
- { /*VERIFICA SE NAO HA ALGUMA PECA ADVERSARIA NAQUELE LOCAL*/
- for(i = 0; i < 6; i++)
- { /*SE HOUVER, RETORNA 0 E A JOGADA E INVALIDA*/
- if(tabuleiro[x2][y2] == jogador2[i]) return 0;
- }
- return 1;
- }
- /*PEAO CAPTURA PECA ADVERSARIA NA DIAGONAL*/
- else if((y2 == (y1 + 1) || y2 == (y1 - 1)) && (x1 - 1))
- { /*VERIFICA SE HA PECA INIMIGO NAQUELA POSICAO*/
- for(i = 0; i < 6; i++)
- { /*SE SIM, A FUNCAO RETORNA 1 E A VERIFICACAO E VALIDA*/
- if(tabuleiro[x2][y2] == jogador2[i]) return 1;
- }
- }
- }
- /*IDENTIFICA SE O JOGADOR 2 E O DA VEZ*/
- else
- { /*PEAO ANDA PARA FRENTE*/
- if(x2 == (x1 + 1) && y1 == y2)
- { /*VERIFICA SE NAO HA ALGUMA PECA ADVERSARIA NAQUELE LOCAL*/
- for(i = 0; i < 6; i++)
- { /*SE HOUVER, RETORNA 0 E A JOGADA E INVALIDA*/
- if(tabuleiro[x2][y2] == jogador1[i]) return 0;
- }
- return 1;
- }
- /*PEAO CAPTURA PECA ADVERSARIA NA DIAGONAL*/
- else if((y2 == (y1 + 1) || y2 == (y1 - 1)) && (x1 + 1))
- { /*VERIFICA SE HA PECA INIMIGA NAQUELA POSICAO*/
- for(i = 0; i < 6; i++)
- { /*SE SIM, A FUNCAO RETORNA 1 E A VERIFICACAO E VALIDA*/
- if(tabuleiro[x2][y2] == jogador1[i]) return 1;
- }
- }
- }
- return 0;
- }
- /*FUNCAO QUE ENCAMINHA PARA O MOVIMENTO DE CADA PECA*/
- int possivel(int x1, int y1, int x2, int y2, int atual){
- /*SE A PECA FOR O PEAO, ELA DIRECIONA PARA OS MOVIMENTOS POSSIVEIS DO PEAO*/
- if(tabuleiro[x1][y1] == 'p' || tabuleiro[x1][y1] == 'P') return peao(x1, y1, x2, y2, atual);
- /*SE A PECA FOR A TORRE, ELA DIRECIONA PARA OS MOVIMENTOS POSSIVEIS DA TORRE*/
- else if(tabuleiro[x1][y1] == 't' || tabuleiro[x1][y1] == 'T') return torre(x1, y1, x2, y2);
- /*SE A PECA FOR O CAVALO, ELA DIRECIONA PARA OS MOVIMENTOS POSSIVEIS DO CAVALO*/
- else if(tabuleiro[x1][y1] == 'c' || tabuleiro[x1][y1] == 'C') return cavalo(x1, y1, x2, y2);
- /*SE A PECA FOR O BISPO, ELA DIRECIONA PARA OS MOVIMENTOS POSSIVEIS DO BISPO*/
- else if(tabuleiro[x1][y1] == 'b' || tabuleiro[x1][y1] == 'B') return bispo(x1, y1, x2, y2);
- /*SE A PECA FOR A RAINHA, ELA DIRECIONA PARA OS MOVIMENTOS POSSIVEIS DA RAINHA*/
- else if(tabuleiro[x1][y1] == 'q' || tabuleiro[x1][y1] == 'Q') return rainha(x1, y1, x2, y2);
- /*SE A PECA FOR O REI, ELA DIRECIONA PARA OS MOVIMENTOS POSSIVEIS DO REI*/
- else if(tabuleiro[x1][y1] == 'k' || tabuleiro[x1][y1] == 'K') return rei(x1, y1, x2, y2);
- return 0;
- }
- /*VERIFICA SE O JOGADOR PEGOU SUA PECA*/
- int peca_certa(int x1, int y1, int atual){
- int i;
- /*INDENTIFICA QUAL E O JOGADOR*/
- if(atual == 1)
- { /*VERIFICA SE A PECA E DELE*/
- for(i = 0; i < 6; i++)
- { /*SE VERDADEIRO, RETORNA 1 E SEQUENCIA CONTINUA*/
- if(tabuleiro[x1][y1] == jogador1[i])
- return 1;
- }
- }
- /*INDENTIFICA QUAL E O JOGADOR*/
- else if(atual == 2)
- { /*VERIFICA SE A PECA E DELE*/
- for(i = 0; i < 6; i++)
- { /*SE VERDADEIRO, RETORNA 1 E SEQUENCIA CONTINUA*/
- if(tabuleiro[x1][y1] == jogador2[i])
- return 1;
- }
- }
- /*CASO NAO, RETORNA 0 E VERIFICAO PARA*/
- return 0;
- }
- /*VERIFICA SE NO DESTINO EXISTE UMA PECA ALIADA*/
- int ocupado(int x2, int y2, int atual){
- int i;
- /*INDENTIFICA QUAL E O JOGADOR*/
- if(atual == 1)
- { /*VERIFICA E HA ALGUMA PECA ALIADA NO LOCAL DE JOGADA*/
- for(i = 0; i < 6; i++)
- { /*SE VERDADEIRO RETORNA 0 E A JOGADA E INVALIDA*/
- if(tabuleiro[x2][y2] == jogador1[i])
- return 0;
- }
- }
- /*INDENTIFICA QUAL E O JOGADOR*/
- else if(atual == 2)
- { /*VERIFICA E HA ALGUMA PECA ALIADA NO LOCAL DE JOGADA*/
- for(i = 0; i < 6; i++)
- { /*SE VERDADEIRO RETORNA 0 E A JOGADA E INVALIDA*/
- if(tabuleiro[x2][y2] == jogador2[i])
- return 0;
- }
- }
- /*CASO NAO, RETORNA 0 E VERIFICAO PARA*/
- return 1;
- }
- /*FUNCAO QUE VERIFICA SE A JOGADA E VALIDA*/
- int verifica(int x1, int y1, int x2, int y2, int atual){
- /*VERIFICA SE A POSICAO ATUAL EXISTE*/
- if((x1 < 8 && x1 >= 0) && (y1 < 8 && y1 >= 0))
- { /*VERIFICA SE A POSICAO DE JOGADA EXISTE*/
- if((x2 < 8 && x2 >= 0) && (y2 < 8 && y2 >= 0))
- { /*VERIFICA SE A POSICAO ATUAL NAO E VAZIA*/
- if(tabuleiro[x1][y1] != ' ')
- { /*VERIFICA SE NO DESTINO EXISTE UMA PECA ALIADA*/
- if(ocupado(x2, y2, atual))
- { /*VERIFICA SE O JOGADOR PEGOU SUA PECA*/
- if(peca_certa(x1, y1, atual))
- { /*VERIFICA SE O MOVIMENTO DA PECA E POSSIVEL*/
- if(possivel(x1, y1, x2, y2, atual))
- {
- return 1;
- }
- }
- }
- }
- }
- }
- return 0;
- }
- void cabecalho(){
- puts("\t\t\t\t\t\t'C'HESS");
- puts("\t\t\tJOGO TOTALMENTE DESENVOLVIDO COM AS ESTRUTURAS BASICAS DE C");
- puts("\t\tDEV: Anderson da Costa Santos - SEGUNDO PERIODO DE CIENCIA DA COMPUTACAO");
- putchar('\n');
- }
- int main(void){
- int x1, y1, x2, y2;
- int atual = 1, XequeMate = 1, validez;
- char king;
- /*O JOGO SE MANTEM ATE QUE OCORRA O XEQUE MATE*/
- while(XequeMate)
- {
- /*MOSTRA O CABECALHO DO PROGRAMA*/
- cabecalho();
- validez = 1;
- do
- {
- printf("\t\t\t\t\t\tJOGADOR %d", atual);
- king = (atual == 1) ? 'k' : 'K';
- /*VERIFICA SE O JOGADOR ATUAL ESTÁ EM XEQUE*/
- if(xeque(x2, y2, king, atual))
- {
- pula_linha(1);
- puts("\t\t\t\t\t\tEM XEQUE!");
- }
- pula_linha(2);
- visualizar_tabuleiro();
- pula_linha(2);
- /*INFORMA A COORDENADA DA PEÇA*/
- printf("COORDENADA DA PECA QUE DESEJA JOGAR[X / Y]: ");
- scanf("%d %d", &x1, &y1);
- pula_linha(1);
- printf("COORDENADA DA POSICAO QUE DESEJA INSERIR[X / Y]: ");
- scanf("%d %d", &x2, &y2);
- pula_linha(1);
- /*VERIFICA SE TAL JOGADA E VALIDA*/
- if(verifica(x1, y1, x2, y2, atual))
- {
- /*SE A VERIFICACAO FOR VALIDA, A PECA SE DESLOCA*/
- movimento(x1, y1, x2, y2);
- /*JOGADA SENDO VALIDA, A VARIAVEL RECEBE 0 E ENCERRA O LOOP*/
- validez = 0;
- }
- else
- puts("\t\t\t\t\t JOGADA INVALIDA!!!");
- pula_linha(2);
- }
- /*SE A JOGADA NAO FOR VALIDA, O LOOP SE REPETE*/
- while(validez);
- /*INFORMA QUEM VAI SER O PROXIMO A JOGAR*/
- atual == 1 ? atual++ : atual--;
- /*LIMPA TELA*/
- system("cls");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement