#include <stdio.h>
void moivimentoBispo(int numCasas) {
int x = 1, y = 1;
if (numCasas > 0) {
//loop responsável pelo movimento vertical
while (x <= numCasas) {
x++;
//loop responsável pelo movimento horizontal
while (y < x) {
y++;
}
}
/*
Aqui eu estou meio que "forçando" a chamada recursiva a acontecer apenas quando
os valores de x e y são reiniciados para 1 dentro dos loops
Isso garante que os loops externo e interno não imprimam os dados mais vezes do que
o esperado.
*/
if ((y == 1) && (x == 1)) {
moivimentoBispo(numCasas - 1);
}
}
}
void movimentoTorre(int numCasas) {
if (numCasas > 0){
movimentoTorre(numCasas - 1);
}
}
void movimentoRainha(int numCasas) {
if (numCasas > 0){
movimentoRainha(numCasas - 1);
}
}
int main() {
printf("*** Desafio de Xadrez - MateCheck ***\n"); printf("*** Nível Mestre - Funções Recursivas e Loops Aninhados ***\n"); printf("*** Objetivo: utilizar estruturas de repetição e funções para determinar os limites de movimentação dentro do jogo. ***\n");
// Implementação da Movimentação do Bispo
// Movimentação do Bispo em diagonal usando Funções Recursivas e Loops Aninhados
printf("*** Movimento do Bispo ***\n"); int bispoCasas = 5;
moivimentoBispo(bispoCasas);
// Implementação da Movimentação da Torre
// Movimentação da Torre 5 casas para a direita usando Função Recursiva
printf("*** Movimento do Torre ***\n"); int torreCasas = 5;
movimentoTorre(torreCasas);
// Implementação de Movimentação da Rainha
// Movimentação da Rainha 8 casas para a esquerda
printf("*** Movimento da Rainha ***\n"); int rainhaCasas = 8;
movimentoRainha(rainhaCasas);
// Implementação da movimentação do Cavalo utilizando loops com variáveis múltiplas e condições avançadas
// Incluído também o uso de continue e break dentro dos loops
printf("*** Movimento em 'L' do Cavalo ***\n"); int i, j;
for(i = 1; i <= 1; i++) {
for(j = 0; j <= i && j < 2; j++) {
if(j != i) {
continue;
}
} while (j <= 2) {
j++;
break;
}
}
printf("### FIM DO PROJETO! ###");
return 0;
}