elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error extraño en programa de C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error extraño en programa de C  (Leído 1,470 veces)
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Error extraño en programa de C
« en: 6 Noviembre 2018, 23:06 pm »

Tengo un juego, escrito en C, el cúal se trata del tres en raya.
Tu compites contra la computadora (el juego tiene una seudo IA)
Todo funciona bien, pero si el jugador o la seudo IA pone una ficha en el casillero 5, (el de almedio), se vuelve invisible y se bugea el juego.
Espero que logren leer mi código espagueti.  :)
Saludos.
Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. void mainloop(char c[3][3]);
  5. void inum(char c[3][3]);
  6. void tablero(char c[3][3]);
  7. void inusr(char c[3][3]);
  8. void seudoai(char c[3][3]);
  9. int win(char c[3][3]);
  10.  
  11. int main()
  12. {
  13. char c[3][3];
  14. mainloop(c);
  15.  
  16. system("pause");
  17. return 0;
  18. }
  19.  
  20. void mainloop(char c[3][3])
  21. {
  22. int j;
  23. int i = 0;
  24. inum(c);
  25. tablero(c);
  26.  
  27. do
  28. {
  29. system("cls");
  30. tablero(c);
  31. if(i % 2 == 0)
  32. {
  33. inusr(c);
  34. }
  35. else
  36. {
  37. seudoai(c);
  38. }
  39. j = win(c);
  40. ++i;
  41. }while(i <= 9 && j == 2);
  42.  
  43.  
  44. if(j == 0)
  45. {
  46. printf("Ganaste!\n\n");
  47. }
  48. else if(j == 1)
  49. {
  50. printf("Perdiste!\n\n");
  51. }
  52. else
  53. {
  54. printf("Empate!\n\n");
  55. }
  56.  
  57. }
  58.  
  59. void inum(char c[3][3])
  60. {
  61. int i, j;
  62. char aux = '0';
  63.  
  64. for(i = 0; i < 3; ++i)
  65. {
  66. for(j = 0; j < 3; ++j)
  67. {
  68. c[i][j] = ++aux;
  69. }
  70. }
  71. }
  72.  
  73. void inusr(char c[3][3])
  74. {
  75. char aux;
  76. int i, j, k;
  77.  
  78. do
  79. {
  80. do
  81. {
  82. printf("Introduce ficha: ");
  83. fflush(stdin);
  84. scanf("%c", &aux);
  85. }while(aux < '1' || aux > '9');
  86.  
  87. k = 0;
  88.  
  89. switch(aux)
  90. {
  91. case '1':{
  92. i = 0;
  93. j = 0;
  94. if (c[i][j] == 'X' || c[i][j] == 'O')
  95. {
  96. k = 1;
  97. printf("Casilla ocupada!\n\n");
  98. }
  99. break;
  100. }
  101. case '2':{
  102. i = 0;
  103. j = 1;
  104. if (c[i][j] == 'X' || c[i][j] == 'O')
  105. {
  106. k = 1;
  107. printf("Casilla ocupada!\n\n");
  108. }
  109. break;
  110. }
  111. case '3':{
  112. i = 0;
  113. j = 2;
  114. if (c[i][j] == 'X' || c[i][j] == 'O')
  115. {
  116. k = 1;
  117. printf("Casilla ocupada!\n\n");
  118. }
  119. break;
  120. }
  121. case '4':{
  122. i = 1;
  123. j = 0;
  124. if (c[i][j] == 'X' || c[i][j] == 'O')
  125. {
  126. k = 1;
  127. printf("Casilla ocupada!\n\n");
  128. }
  129. break;
  130. }
  131. case '5':{
  132. i = 1;
  133. j = 1;
  134. if (c[i][j] == 'X' || c[i][j] == 'O')
  135. {
  136. k = 1;
  137. printf("Casilla ocupada!\n\n");
  138. }
  139. break;
  140. }
  141. case '6':{
  142. i = 1;
  143. j = 2;
  144. if (c[i][j] == 'X' || c[i][j] == 'O')
  145. {
  146. k = 1;
  147. printf("Casilla ocupada!\n\n");
  148. }
  149. break;
  150. }
  151. case '7':{
  152. i = 2;
  153. j = 0;
  154. if (c[i][j] == 'X' || c[i][j] == 'O')
  155. {
  156. k = 1;
  157. printf("Casilla ocupada!\n\n");
  158. }
  159. break;
  160. }
  161. case '8':{
  162. i = 2;
  163. j = 1;
  164. if (c[i][j] == 'X' || c[i][j] == 'O')
  165. {
  166. k = 1;
  167. printf("Casilla ocupada!\n\n");
  168. }
  169. break;
  170. }
  171. case '9':{
  172. i = 2;
  173. j = 2;
  174. if (c[i][j] == 'X' || c[i][j] == 'O')
  175. {
  176. k = 1;
  177. printf("Casilla ocupada!\n\n");
  178. }
  179. break;
  180. }
  181. }
  182. }while(k == 1);
  183.  
  184. c[i][j] = 'X';
  185. }
  186.  
  187. void seudoai(char c[3][3])
  188. {
  189. int i, j, k;
  190. //char aux;
  191. srand(time(NULL));
  192.  
  193. do
  194. {
  195. i = rand() % 3; // n rand entre 0 y 2
  196. j = rand() % 3;
  197. k = 0;
  198.  
  199. if(c[i][j] == 'X' || c[i][j] == 'O')
  200. {
  201. k = 1;
  202. }
  203. }while(k == 1);
  204. c[i][j] = 'O';
  205. }
  206.  
  207. void tablero(char c[3][3])
  208. {
  209. int i, j;
  210.  
  211. for(i = 0; i < 3; ++i)
  212. {
  213. for(j = 0; j < 3; ++j) //replace ++j with ++i, and have fun!
  214. {
  215. if(j < 2)
  216. {
  217. printf(" %c |", c[i][j]);
  218. }
  219. else
  220. {
  221. printf(" %c ", c[i][j]);
  222. }
  223. }
  224. if(i < 2)
  225. {
  226. printf("\n-----------\n");
  227. }
  228. }
  229. printf("\n\n");
  230. }
  231.  
  232. int win(char c[3][3])
  233. {
  234. if(c[0][0] == 'X' || c[0][0] == 'O')
  235. {
  236. if(c[0][0] == c[0][1] && c[0][0] == c[0][2])
  237. {
  238. if(c[0][0] == 'X')
  239. {
  240. return 0;
  241. }
  242. else
  243. {
  244. return 1;
  245. }
  246. }
  247. else if(c[0][0] == c[1][0] && c[0][0] == c[2][0])
  248. {
  249. if(c[0][0] == 'X')
  250. {
  251. return 0;
  252. }
  253. else
  254. {
  255. return 1;
  256. }
  257. }
  258. }
  259. if(c[1][1] == 'X' || c[1][1] == 'O')
  260. {
  261. if(c[1][1] = c[0][0] && c[1][1] == c[2][2])
  262. {
  263. if(c[1][1] == 'X')
  264. {
  265. return 0;
  266. }
  267. else
  268. {
  269. return 1;
  270. }
  271. }
  272. if(c[1][1] == c[1][0] && c[1][1] == c[1][2])
  273. {
  274. if(c[1][1] == 'X')
  275. {
  276. return 0;
  277. }
  278. else
  279. {
  280. return 1;
  281. }
  282. }
  283. if(c[1][1] == c[2][0] && c[1][1] == c[0][2])
  284. {
  285. if(c[1][1] == 'X')
  286. {
  287. return 0;
  288. }
  289. else
  290. {
  291. return 1;
  292. }
  293. }
  294. if(c[1][1] == c[0][1] && c[1][1] == c[2][1])
  295. {
  296. if(c[1][1] == 'X')
  297. {
  298. return 0;
  299. }
  300. else
  301. {
  302. return 1;
  303. }
  304. }
  305. }
  306. if(c[2][2] == 'X' || c[2][2] == 'O')
  307. {
  308. if(c[2][2] == c[2][0] && c[2][1] == c[2][1])
  309. {
  310. if(c[2][2] == 'X')
  311. {
  312. return 0;
  313. }
  314. else
  315. {
  316. return 1;
  317. }
  318. }
  319. if(c[2][2] == c[0][2] && c[2][2] == c[1][2])
  320. {
  321. if(c[2][2] == 'X')
  322. {
  323. return 0;
  324. }
  325. else
  326. {
  327. return 1;
  328. }
  329. }
  330. }
  331. return 2;
  332. }
  333.  


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Error extraño en programa de C
« Respuesta #1 en: 6 Noviembre 2018, 23:56 pm »

Buen programa. Encontre el error, pero antes algunas observaciones, todo para bien y para mejorar :D

Agregar Biblioteca de Funcion stdlib para la funcion rand.

Código:
#include<stdlib.h> //para Rand

Aunque no se trate de un  programa que deba de ser ultra eficiente

Te porias ahorrar una comparación en el case del usuario mediante la modificaciones al if



Por ejemplo esta sección de codigo
Código:
			case '1':
i = 0;
j = 0;
if (c[i][j] == 'X' || c[i][j] == 'O')
{
k = 1;
printf("Casilla ocupada!\n\n");
}

Podria pasar a ser

Código:
			case '1':
i = 0;
j = 0;
if (c[i][j] != '1')
{
k = 1;
printf("Casilla ocupada!\n\n");
}

Ahorrandote un OR

La funcion tablero en la linea 25 Esta de mas, ya que inmediatamente despues utilizas un cls, aun realmente deberias de evitar las funciones system, en este caso didactico esta justificado, aun asi, el codigo no es compatible en sistemas Linux.

Una cosa mas, las sentencias case: no necesita de llavez {}, no se de donde sacaste eso.


Y el error que indicas  esta en la linea

261

Código:
		if(c[1][1] = c[0][0] && c[1][1] == c[2][2])


Tienes un solo igual, con lo cual estas igualando al valor de la Operacion

Código:
 c[0][0] &&  c[1][1] == c[2][2]

Saludos


« Última modificación: 7 Noviembre 2018, 00:00 am por AlbertoBSD » En línea

huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: Error extraño en programa de C
« Respuesta #2 en: 7 Noviembre 2018, 00:09 am »

Gracias! Me funciono, tomaré las consideraciones que me diste.
Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
extraño error en vista de una funcion sencilla: Runtime error '75': Path/File
Programación Visual Basic
drakolive 9 15,624 Último mensaje 9 Marzo 2012, 17:08 pm
por Sancho.Mazorka
Error extraño C
Programación C/C++
Sefean 4 2,683 Último mensaje 1 Noviembre 2014, 15:58 pm
por ivancea96
error extraño
Dudas Generales
ElagusxD 0 1,788 Último mensaje 21 Febrero 2022, 03:44 am
por ElagusxD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines