fork download
  1. #include <stdio.h>
  2.  
  3. void moivimentoBispo(int numCasas) {
  4. int x = 1, y = 1;
  5. if (numCasas > 0) {
  6. //loop responsável pelo movimento vertical
  7. while (x <= numCasas) {
  8. printf("Cima, ");
  9. x++;
  10. //loop responsável pelo movimento horizontal
  11. while (y < x) {
  12. printf("Direita\n");
  13. y++;
  14. }
  15. }
  16. /*
  17.   Aqui eu estou meio que "forçando" a chamada recursiva a acontecer apenas quando
  18.   os valores de x e y são reiniciados para 1 dentro dos loops
  19.   Isso garante que os loops externo e interno não imprimam os dados mais vezes do que
  20.   o esperado.
  21.   */
  22. if ((y == 1) && (x == 1)) {
  23. moivimentoBispo(numCasas - 1);
  24. }
  25. }
  26. }
  27.  
  28. void movimentoTorre(int numCasas) {
  29. if (numCasas > 0){
  30. printf("Direita\n");
  31.  
  32. movimentoTorre(numCasas - 1);
  33. }
  34. }
  35.  
  36. void movimentoRainha(int numCasas) {
  37. if (numCasas > 0){
  38. printf("Esquerda\n");
  39.  
  40. movimentoRainha(numCasas - 1);
  41. }
  42. }
  43.  
  44.  
  45. int main() {
  46. printf("*** Desafio de Xadrez - MateCheck ***\n");
  47. printf("*** Nível Mestre - Funções Recursivas e Loops Aninhados ***\n");
  48. printf("*** Objetivo: utilizar estruturas de repetição e funções para determinar os limites de movimentação dentro do jogo. ***\n");
  49. printf("\n");
  50.  
  51.  
  52. // Implementação da Movimentação do Bispo
  53. // Movimentação do Bispo em diagonal usando Funções Recursivas e Loops Aninhados
  54. printf("*** Movimento do Bispo ***\n");
  55. int bispoCasas = 5;
  56. moivimentoBispo(bispoCasas);
  57. printf("\n");
  58.  
  59. // Implementação da Movimentação da Torre
  60. // Movimentação da Torre 5 casas para a direita usando Função Recursiva
  61. printf("*** Movimento do Torre ***\n");
  62. int torreCasas = 5;
  63. movimentoTorre(torreCasas);
  64. printf("\n");
  65.  
  66. // Implementação de Movimentação da Rainha
  67. // Movimentação da Rainha 8 casas para a esquerda
  68. printf("*** Movimento da Rainha ***\n");
  69. int rainhaCasas = 8;
  70. movimentoRainha(rainhaCasas);
  71. printf("\n");
  72.  
  73. // Implementação da movimentação do Cavalo utilizando loops com variáveis múltiplas e condições avançadas
  74. // Incluído também o uso de continue e break dentro dos loops
  75. printf("*** Movimento em 'L' do Cavalo ***\n");
  76. int i, j;
  77. for(i = 1; i <= 1; i++) {
  78. for(j = 0; j <= i && j < 2; j++) {
  79. printf("Cima,");
  80. if(j != i) {
  81. continue;
  82. }
  83. } while (j <= 2) {
  84. printf("Direita");
  85. j++;
  86. break;
  87. }
  88.  
  89. }
  90. printf("\n\n");
  91. printf("### FIM DO PROJETO! ###");
  92.  
  93. return 0;
  94. }
  95.  
Success #stdin #stdout 0s 5292KB
stdin
Standard input is empty
stdout
*** Desafio de Xadrez - MateCheck ***
*** Nível Mestre - Funções Recursivas e Loops Aninhados ***
*** Objetivo: utilizar estruturas de repetição e funções para determinar os limites de movimentação dentro do jogo. ***

*** Movimento do Bispo ***
Cima, Direita
Cima, Direita
Cima, Direita
Cima, Direita
Cima, Direita

*** Movimento do Torre ***
Direita
Direita
Direita
Direita
Direita

*** Movimento da Rainha ***
Esquerda
Esquerda
Esquerda
Esquerda
Esquerda
Esquerda
Esquerda
Esquerda

*** Movimento em 'L' do Cavalo ***
Cima,Cima,Direita

### FIM DO PROJETO! ###