fork(2) download
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <time.h>
  6.  
  7. #define MAX_JOGADOR 7//numero maximo de jogadores
  8. #define MAX_BOLA_JOGADOR 2//numero maximo de bolas para cada jogador
  9. #define MAX_BOLA 5//numero maximo de bolas para jogo
  10.  
  11. typedef struct BOLA BOLA;
  12. typedef struct JOGADOR JOGADOR;
  13. typedef struct CAMPO CAMPO;
  14.  
  15. struct BOLA {//cada bola
  16. int num_bola; //contem um numero de bola
  17. };
  18.  
  19. struct JOGADOR {//cada jogador
  20. int num_jogador; //contem um numero de jogador
  21. struct BOLA bola[MAX_BOLA_JOGADOR]; //entre uma a duas bolas
  22. int qt_bola_jogador; //quantidade bola
  23. };
  24.  
  25. struct CAMPO {
  26. struct JOGADOR jogadores[MAX_JOGADOR]; //contem no maximo 7 jogadores
  27. struct BOLA bolas[MAX_BOLA]; //possui no maximo 5 bolas para cada jogo
  28. };
  29.  
  30. struct JOGADOR novo_jogador; /*novo jogador*/
  31. struct BOLA nova_bola; /*nova bola*/
  32. struct BOLA *ptr_bola; /*apontador para nova bola*/
  33. struct JOGADOR *ptr_jogador; /*apontador para novo jogador*/
  34. struct CAMPO *ptr_campo; /*apontador para campo*/
  35.  
  36. void jogador_recebe_bola(void);
  37. void criar_bola(void);
  38. void criar_jogador(void);
  39.  
  40. //nesta função cria os jogadores e adiciona ao ponteiro_campo,
  41. //e está função funciona na perfeição
  42.  
  43. void criar_jogador(void) {
  44.  
  45. int i, j; //identificador para incrementar criação de jogador
  46.  
  47. //alocaçao de memoria para simular jogo
  48. ptr_campo = (CAMPO *) malloc(sizeof (ptr_campo));
  49.  
  50. printf("\n--- JOGADOR ---\n");
  51.  
  52. /* criar jogador*/
  53. for (i = 0, j = 0; i < MAX_JOGADOR; i++) {
  54. novo_jogador.num_jogador++; //incrementa o numero de jogador
  55. novo_jogador.qt_bola_jogador = 0;
  56. ptr_jogador = &novo_jogador;
  57. ptr_campo->jogadores[i] = *ptr_jogador; //adicionar o jogador no campo
  58. printf(">> Criando jogador %d...\n\n", ptr_campo->jogadores[i].num_jogador);
  59. j++;
  60. }
  61.  
  62. if (j == MAX_JOGADOR) {
  63. //criar bola
  64. criar_bola();
  65. }
  66. }
  67.  
  68.  
  69. //nesta função cria a bola e adiciona ao ponteiro_campo,
  70. //e está função também funciona na perfeição
  71.  
  72. void criar_bola(void) {
  73.  
  74. int k, m; //identificador para incrementar criação de bola
  75.  
  76. printf("\n--- BOLA ---\n");
  77.  
  78. /*cria bola*/
  79. for (k = 0, m = 0; k < MAX_BOLA; k++) {
  80. nova_bola.num_bola++; //incrementa o numero da bola
  81. ptr_bola = &nova_bola;
  82. ptr_campo->bolas[k] = *ptr_bola; //atribuir a baliza para cada jogador
  83. printf(">> Criar bola %d...\n\n", ptr_campo->bolas[k].num_bola);
  84. m++;
  85. }
  86.  
  87. if (m == MAX_BOLA) {
  88. //criar bola
  89. jogador_recebe_bola();
  90. }
  91. }
  92.  
  93. //A minha dúvida é nesta função jogador recebe bola,
  94. //a função funciona quando o numero de bola for 1 e/ou 2 bolas
  95. //e se no caso for 3 bolas, como mostra na imagem abaixo o codigo,
  96. //em vez de dizer que o jogador tem bola nº3, diz que tem bola nº4 e
  97. //funciona só que quando o jogador que tem bola nº3, diz que tem bola nº0
  98.  
  99. void jogador_recebe_bola(void) {
  100.  
  101. int recebe_bola = 0;
  102. int j, m, p;
  103. srand(time(NULL));
  104.  
  105. printf("\n--- JOGADOR RECEBE BOLA---\n");
  106.  
  107. //faz um loop
  108. for (m = 0, p = 0; m < MAX_BOLA; m++) {
  109. //captura a bola
  110. if (m + 1 == ptr_campo->bolas[m].num_bola) {
  111. //escolhe um jogador aleatorio
  112. recebe_bola = 1 + rand() % MAX_JOGADOR;
  113. ////faz um loop
  114. for (j = 0; j < MAX_JOGADOR; j++) {
  115. //captura o jogador a receber bola
  116. if ((j + 1 == ptr_campo->jogadores[j].num_jogador)
  117. //jogador escolhido igual ao que está no campo
  118. && (recebe_bola == ptr_campo->jogadores[j].num_jogador)) {
  119. //escolhe o jogador x
  120. printf(">> Jogador %d foi escolhido para receber bola %d...\n",
  121. ptr_campo->jogadores[j].num_jogador, m + 1);
  122. //recebe a bola do campo
  123. ptr_campo->jogadores[j].bola[m] = ptr_campo->bolas[m];
  124. //incrementa a quantidade de bola
  125. ptr_campo->jogadores[j].qt_bola_jogador++;
  126. //a bola nº y foi para jogador x
  127. printf("\t>> Bola %d foi para jogador %d...\n",
  128. ptr_campo->bolas[m].num_bola,
  129. ptr_campo->jogadores[j].num_jogador);
  130. //o jogador x tem bola nºy
  131. printf(">> Jogador %d tem a bola %d...\n\n",
  132. ptr_campo->jogadores[j].num_jogador,
  133. ptr_campo->jogadores[j].bola[m].num_bola);
  134. }
  135. }
  136. }
  137. }
  138. }
  139.  
  140. //função main
  141.  
  142. int main(void) {
  143. //criar jogador
  144. criar_jogador();
  145.  
  146. return 0;
  147. }
  148.  
  149.  
  150.  
Success #stdin #stdout 0s 2244KB
stdin
Standard input is empty
stdout
--- JOGADOR ---
>> Criando jogador 1...

>> Criando jogador 2...

>> Criando jogador 3...

>> Criando jogador 4...

>> Criando jogador 5...

>> Criando jogador 6...

>> Criando jogador 7...


--- BOLA ---
>> Criar bola 1...

>> Criar bola 2...

>> Criar bola 3...

>> Criar bola 4...

>> Criar bola 5...


--- JOGADOR RECEBE BOLA---
>> Jogador 4 foi escolhido para receber bola 1...
	>> Bola 1 foi para jogador 4...
>> Jogador 4 tem a bola 1...

>> Jogador 2 foi escolhido para receber bola 2...
	>> Bola 2 foi para jogador 2...
>> Jogador 2 tem a bola 2...

>> Jogador 4 foi escolhido para receber bola 3...
	>> Bola 3 foi para jogador 4...
>> Jogador 4 tem a bola 4...

>> Jogador 3 foi escolhido para receber bola 4...
	>> Bola 4 foi para jogador 3...
>> Jogador 3 tem a bola 4...

>> Jogador 5 foi escolhido para receber bola 5...
	>> Bola 5 foi para jogador 5...
>> Jogador 5 tem a bola 5...