Advertisement
brunna25

att/2

May 26th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.54 KB | None | 0 0
  1. /*
  2. Programa Jogo da Velha
  3. Práticas de Fundamentos de Programação
  4. prof.: Filipe Costa Fernandes - 1ºsemestre/2017
  5. INSTRUÇÕES NO ENUNCIADO EM PDF
  6. */
  7.  
  8. #include<stdio.h>
  9. #include<conio.h>
  10. #include<stdlib.h>
  11. #include<locale.h>
  12. #include <windows.h>//necessário para usar SetConsoleTitle
  13.  
  14. //area de declaracao de constantes
  15. #define lim 3
  16. #define Jogador 'J'
  17. #define Maquina 'M'
  18.  
  19. /*variáveis globais utilizadas no programa*/
  20.  
  21. int c; //variável de controle para laços
  22. char op; //opção do jogador utilizado no programa principal
  23. int vezde; //variável que define de quem é a vez para jogar
  24. int jogo; //recebe o retorno das funções que define o fim do jogo
  25. char jv[3][3]; //matriz jogo 3 X 3
  26.  
  27. //procedimento utilizado para limpeza da matriz, colocando '0' em toda a matriz
  28. void limpeza()
  29. {
  30. int linha, coluna;
  31. for (linha=0;linha<lim; linha++)
  32. {
  33. for(coluna=0; coluna<lim; coluna++)
  34. jv [linha][coluna]=0;
  35. }
  36.  
  37. printf("\t 0 1 2\n\n");
  38. printf("\t _________________________\n");
  39. printf("\t0 | | | |\n");
  40. printf("\t | | | | \n");
  41. printf("\t | %d | %d | %d |\n",jv[0][0],jv[0][1],jv[0][2]);
  42. printf("\t | | | | \n");
  43. printf("\t |_______|_______|_______|\n");
  44. printf("\t | | | |\n");
  45. printf("\t | | | |\n");
  46. printf("\t1 | %d | %d | %d | \n",jv[1][0],jv[1][1],jv[1][2]);
  47. printf("\t | | | | \n");
  48. printf("\t |_______|_______|_______|\n");
  49. printf("\t | | | |\n");
  50. printf("\t | | | |\n");
  51. printf("\t2 | %d | %d | %d | \n",jv[2][0],jv[2][1],jv[2][2]);
  52. printf("\t | | | | \n");
  53. printf("\t |_______|_______|_______|\n");
  54. printf("\n\n\n");
  55. printf("\n\n\n");
  56. }
  57.  
  58. //procedimento utilizado para visualizar o conteúdo da matriz
  59. void visualizar()
  60. {
  61. //Faz com que a estrutura da matriz apareça uma unica vez.
  62. system("cls");
  63. //Comando usado para colocar titulo no console.
  64. SetConsoleTitle(TEXT("JOGO DA VELHA"));
  65. //Permite suporte a língua portuguesa. Garante que caracteres como “ç” e acentuação sejam exibidos normalmente no programa.
  66. setlocale(LC_ALL,"Portuguese");
  67.  
  68. int w,k;
  69. printf("\n");
  70. printf("\n\t\t\t\t JOGO DA VELHA \n\n\n\n");
  71.  
  72.  
  73. printf("\t\t\t\t C0 C1 C2 \n\n");
  74. printf("\t\t\t\t L0 %c | %c | %c \n",jv[0][0],jv[0][1],jv[0][2]);
  75. printf("\t\t\t\t ---|---|--- \n ");
  76. printf("\t\t\t\t L1 %c | %c | %c \n",jv[1][0],jv[1][1],jv[1][2]);
  77. printf("\t\t\t\t ---|---|--- \n ");
  78. printf("\t\t\t\t L2 %c | %c | %c \n",jv[2][0],jv[2][1],jv[2][2]);
  79. printf("\n\n");
  80. }
  81. //esta função verifica se houve ou não ganhador, retornando true (verdadeiro) se houver,
  82. //ou false (falso) se não tiver ganhador para cada jogada
  83. int velha(char jog)
  84. { //printf("Em construção........");
  85. // ESSE SERÁ O RESULTADO , CHECAR SE HOUVE GANHADOR NA PARTIDA;
  86. if((jv[0][0]==jog && jv[0][1]==jog && jv[0][2]==jog)||
  87. (jv[0][0]==jog && jv[1][0]==jog && jv[2][0]==jog)||
  88. (jv[0][0]==jog && jv[1][1]==jog && jv[2][2]==jog)||
  89. (jv[0][2]==jog && jv[0][1]==jog && jv[0][0]==jog)||
  90. (jv[2][0]==jog && jv[1][0]==jog && jv[0][0]==jog)||
  91. (jv[2][2]==jog && jv[1][1]==jog && jv[0][0]==jog)||
  92. (jv[0][1]==jog && jv[1][1]==jog && jv[2][1]==jog)||
  93. (jv[0][2]==jog && jv[1][2]==jog && jv[2][2]==jog)||
  94. (jv[0][2]==jog && jv[1][1]==jog && jv[2][0]==jog)||
  95. (jv[1][0]==jog && jv[1][1]==jog && jv[1][2]==jog)||
  96. (jv[2][0]==jog && jv[2][1]==jog && jv[2][2]==jog)||
  97. (jv[2][1]==jog && jv[1][1]==jog && jv[0][1]==jog)||
  98. (jv[2][2]==jog && jv[1][2]==jog && jv[0][2]==jog)||
  99. (jv[2][0]==jog && jv[1][1]==jog && jv[0][2]==jog)||
  100. (jv[1][2]==jog && jv[1][1]==jog && jv[1][0]==jog)||
  101. (jv[2][2]==jog && jv[2][1]==jog && jv[2][0]==jog))
  102. {
  103. return 1;
  104. }
  105. // printf("PARABENS! JOGADOR VENCEDOR!!");
  106. // fazer um do while para a pessoa jogar de novo ou não
  107. else
  108. return 0;
  109. //printf("Não houve ganhador, JOGUEM DE NOVO!!");
  110. }
  111.  
  112. //esta função recebe uma posição da matriz e verifica se esta posição já foi
  113. //selecionada, retornando true (verdadeiro) se já tiver sido selecionada ou
  114. //false (falso) caso contrário
  115. int posicao( int l, int c)
  116. { //printf("Em construção........");
  117.  
  118. //O laço abaixo ira percorrer toda a matriz
  119. for(int i = 0; i < 9; i++)
  120. {
  121. for(int j = 0; j < 9; j++)
  122. {
  123. // Os valores passados na função ('l','c') sao comparados com as posições; se ela for igual entra e faz uma outra comparação.
  124. if(i == l && c == j)
  125. {
  126. // Apos validar as posições da matriz ele ainda verifica se aquela posição ja foi ocupada por um valor. Se esta posição estiver com caractere diferente de '0' o e porque ela ja foi usada. logo a função irá retornar 1 'true';
  127. if(jv[j] == 0)
  128. {
  129. return 1;
  130. }
  131. // Caso contrario a função irá retornar 0 'false' pois aquela posição ainda pode ser usada.
  132. else
  133. {
  134. return 0;
  135. }
  136. }
  137. }
  138. }
  139. /* if(c > 3||c < 0)
  140. {
  141. if(l > 3||l < 0)
  142. printf("Opção Inválida. Escolha Novamente");
  143. //retornar para a escolha dnv
  144. }*/
  145. }
  146.  
  147. //esta função utiliza a função random (rand) para selecionar uma nova jogada da máquina,
  148. //retornando true (verdadeiro) se a jogada resultou em vitória ou false (falso) caso contrário
  149. int maquinajoga()
  150. {
  151. int l,c,rposicao,v;
  152. rposicao = 1;
  153. do
  154. {
  155. l = rand()%3;
  156. c = rand()%3;
  157. rposicao = posicao(l,c);
  158. if (!rposicao)
  159. jv[l][c] = Maquina;
  160. }while ( rposicao );
  161. visualizar();
  162. v = velha(Maquina);
  163. if ( v )
  164. {
  165. printf(" A MAQUINA VENCEU O JOGO..........\n");
  166. return 1;
  167. }
  168. else return 0;
  169. }
  170.  
  171. //esta função faz a jogada do jogador, que seleciona uma nova jogada válida,
  172. //retornando true (verdadeiro) se a jogada resultou em vitória ou false (falso) caso contrário }
  173. int jogadorjoga()
  174. { int w, k, o,O, x,X, letra;
  175. int l,c,rposicao,v;
  176. rposicao= 1;
  177. printf("\n\n\n");
  178. while (! rposicao == 1);
  179. {
  180. printf("\t\t#\tJogador - Escolha a coluna a ser marcada: ");
  181. scanf("%d",&w);
  182. printf("\t\t#\tJogador - Escolha a linha a ser marcada: ");
  183. scanf("%d",&k);
  184.  
  185. rposicao = posicao(k,w);
  186. if (rposicao ==1)
  187. jv[k][w] = Jogador;
  188. }
  189. visualizar();
  190. v = velha(Jogador);
  191. if ( v==1 ){
  192. int i = 10;
  193.  
  194. while (i)
  195. {
  196. printf(" \n\n\n\t\t\t O JOGADOR VENCEU O JOGO! \n");
  197. Sleep (2000);
  198. system ("cls");
  199. Sleep (100);
  200.  
  201. }
  202. return 1;
  203. }
  204. else return 0;
  205. }
  206. //preencher com O ou X
  207. //isso tem que alterar dentro da matriz//
  208. //esperar a maquina jogar e retornar para cá//*/
  209.  
  210. //programa principal. Jogo da Velha, esta parte do programa é a mais importante,
  211. //controla de quem é a vez de jogar, chamando as funções e procedimentos necessários
  212. //para cada execução do programa
  213. int main()
  214. {
  215. setlocale(LC_ALL,"Portuguese");
  216. c = 1;
  217. limpeza(); //chama a função para limpeza da matriz
  218. visualizar(); //visualiza a matriz 3 X 3 com '0'
  219. //Controle para selecionar de quem é a primeira jogada MAQUINA ou JOGADOR
  220. do
  221. {
  222. printf("Opção para início do jogo...\n");
  223. printf(" m = máquina\n");
  224. printf(" j = jogador\n");
  225. op = getchar();
  226. }while ( ( op != 'm' ) && ( op != 'M' ) && ( op != 'j' ) && ( op = 'J' ) );
  227.  
  228. if ( ( op == 'm' ) || ( op == 'M' ) )
  229. {
  230. jogo = maquinajoga();
  231. vezde = 1; // está variável é muito importante no programa,
  232. //fazendo com que após a máquina jogar ela sede a vez para o jogador.
  233. }
  234. else
  235. {
  236. jogo = jogadorjoga();
  237. vezde = 0; //esta variável é muito importante no programa,
  238. //fazendo com que após o jogador jogar ele sede a vez para a maquina
  239. }
  240.  
  241. //este laço controla as jogadas e só termina quando alguém ganha ou quando
  242. //der empate: OBS.: uma ótima modificação neste programa seria o jogador
  243. //selecionar se quer parar ou começar um novo jogo
  244.  
  245. do
  246. {
  247. if ( vezde )
  248. {
  249. jogo = jogadorjoga();
  250. vezde = 0;
  251. }
  252. else
  253. {
  254. jogo = maquinajoga();
  255. vezde = 1;
  256. }
  257. c++;
  258. }while (( c <= 8 ) && ( !jogo ));
  259. getch();
  260. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement