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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / AYUDA. Comparar vectores de chars. en: 27 Marzo 2017, 04:33 am
Buenas gente, estoy haciendo un 4 en línea, el cual el tablero contenía enteros, luego decidí pasarlo a Chars para que sea más legible.

El jugador 1 utiliza las 'X'
El Jugador 2 utiliza los 'O' como fichas respectivamente

Estoy teniendo un problema al comparar el valor de estos chars cuando tengo que hacer un IF de 4 condiciones para verificar si hay 4 en línea diagonal, ya sea diagonal invertida o normal. Es decir, había hecho el MISMO código en enteros, pero ahora cuando lo paso a CHAR No me está funcionando, es decir el algoritmo está bien hecho, pero hay algo que me está fallando en alguna condición.

A continuación les dejo el código de la función donde estaría teniendo problemas y no me estaría funcionando.
Solo adjunto esa parte del código.

Es un tablero de 10x10
donde ultimaPosicion =3
DESDE YA MUCHAS GRACIAS A LOS QUE TOMAN SU TIEMPO PARA INTENTAR AYUDARME, SE AGRADECE.

Código
  1. void diagonal(char cuadro[][numeroDeColumnas]) // 4 en linea diagonal
  2. {
  3. int filasARecorrer = numeroDeFilas - ultimaPosicion;
  4. int i,j;
  5. for (i=0;i<filasARecorrer;i++)
  6. {
  7. for(j=numeroDeColumnas;j>ultimaPosicion;j--)
  8. {
  9. if (cuadro[i][j]=='X' && cuadro[i+1][j-1]=='X' && cuadro[i+2][j-2]=='X' && cuadro[i+3][j-3]=='X') // Si el Jugador 1 hace 4 en linea diagonal
  10. {
  11. cout << "El jugador 1 gana!" << endl;
  12. ganador=true;
  13. }
  14. if (cuadro[i][j]=='O' && cuadro[i+1][j-1]=='O' && cuadro[i+2][j-2]=='O' && cuadro[i+3][j-3]=='O') // Si el Jugador 2 hace 4 en linea Diagonal
  15. {
  16. cout << "El jugador 2 gana!" << endl;
  17. ganador=true;
  18. }
  19. }
  20. }
  21. }
2  Programación / Programación C/C++ / Re: [AYUDA[Error/Problema Cuatro en Línea en: 25 Marzo 2017, 07:31 am
Hola toomi.143 , te podrias explicar un poco mejor? para poder ayudarte, Saludos!

Hola Natalia, el problema que tengo es el siguiente, por algún motivo cuando arranca el juego e inserto la primer ficha en cualquiera de las columnas 6, 9 o 10, tengo un bug, que lo que pasa es que saltea el turno y no coloca la ficha en esas columnas. Esto ocurre la primera vez que se desea insertar las fichas en dichas columnas.

Espero poder haber sido lo suficientemente claro =D

Gracias espero tu ayuda.
3  Programación / Programación C/C++ / [AYUDA[Error/Problema Cuatro en Línea en: 25 Marzo 2017, 01:20 am
Hola a todos gente! Primero que nada quería comentarles que soy nuevo en este foro, y bastante nuevo en el mundo de la programación. Estoy programando un cuatro en línea de una manera bastante rudimentaria, no es eficaz, pero la idea es que funcione.

No tiene una interfaz gráfica, el tablero vacío son 0 y cuando juega el jugador 1 y 2 son 1 y 2 respectivamente.

Hasta ahora llegué a programar todo excepto cuando hay un cuatro en línea en diagonal, algo que todavía no llegué a hacer, pero me encontré con otro problema que la verdad pedí ayuda y nadie supo brindarmela.


MI PROBLEMA ES EL SIGUIENTE:

Cuando alguien desea introducir una "ficha" en la columna 6, 9, o 10,
POR PRIMERA VEZ automáticamente se "saltea" el turno, es decir, no toma el valor de esa ficha, y le corresponde jugar al siguiente jugador.
Esto solo me ocurre la primera vez en las columnas 6, 9 y 10 la verdad  me cuesta entender por que, en fin, adjunto el código y agradecería mucho al que encontrará este error

ACLARO: La lógica no es la mejor ni la más eficaz.

MUCHAS GRACIAS A LOS QUE TOMAN SU TIEMPO PARA DARME UNA MANO


Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const int numeroDeFilas=10;
  5. const int numeroDeColumnas=10;
  6. const int empate=(numeroDeFilas*numeroDeColumnas);
  7. bool ganador=false;
  8.  
  9. void inicializarCuadro(int cuadro[][numeroDeColumnas])
  10. {
  11. int i,j;
  12. for (i=0; i<numeroDeFilas; i++)
  13. {
  14. for (j=0; j<numeroDeColumnas; j++)
  15. {
  16. cuadro[i][j]=0;
  17. }
  18. }
  19. }
  20.  
  21. void imprimirCuadro(int cuadro[][numeroDeColumnas])
  22. {
  23. int i,j;
  24. for (i=0; i<numeroDeFilas; i++)
  25. {
  26. for (j=0; j<numeroDeColumnas; j++)
  27. {
  28. cout << cuadro[i][j];
  29. }
  30. cout << endl;
  31. }
  32. }
  33.  
  34. void turnoUno(int cuadro[][numeroDeColumnas]) // Turno del Jugador 1
  35. {
  36. bool movimientoValido=false;
  37. int c,i;
  38. while (!movimientoValido)
  39. {
  40. cout << "Juega el Jugador 1" << endl;
  41. cout << "Ingrese el numero de columna, de 1 a 10" << endl;
  42. cin  >> c;
  43. c--;
  44. while (c<0 || c>9)
  45. {
  46. cout << "Movimiento Invalido, reingrese la jugada" << endl;
  47. imprimirCuadro(cuadro);
  48. cout << "Juega el Jugador 1" << endl;
  49. cout << "Ingrese el numero de columna, de 1 a 10" << endl;
  50. cin  >> c;
  51. c--;
  52. }
  53. for (i=numeroDeFilas;i>-1;i--)
  54. {
  55. if (cuadro[i][c]==0 && !movimientoValido)
  56. {
  57. cuadro[i][c]=1;
  58. movimientoValido=true;
  59. }
  60. }
  61. if (cuadro[numeroDeFilas][c]!=0 && !movimientoValido)
  62. {
  63. imprimirCuadro(cuadro);
  64. cout << "La Columna está llena, reingrese la jugada" << endl;
  65. }
  66. }
  67. }
  68.  
  69. void turnoDos(int cuadro[][numeroDeColumnas]) //Turno del Jugador 2
  70. {
  71. bool movimientoValido=false;
  72. int c,i;
  73. while (!movimientoValido)
  74. {
  75. cout << "Juega el Jugador 2" << endl;
  76. cout << "Ingrese el numero de columna, de 1 a 10" << endl;
  77. cin  >> c;
  78. c--;
  79. while (c<0 || c>9)
  80. {
  81. cout << "Movimiento Invalido, reingrese la jugada" << endl;
  82. imprimirCuadro(cuadro);
  83. cout << "Juega el Jugador 2" << endl;
  84. cout << "Ingrese el numero de columna, de 1 a 10" << endl;
  85. cin  >> c;
  86. c--;
  87. }
  88. for (i=numeroDeFilas;i>-1;i--)
  89. {
  90. if (cuadro[i][c]==0 && !movimientoValido)
  91. {
  92. cuadro[i][c]=2;
  93. movimientoValido=true;
  94. }
  95. }
  96. if (cuadro[numeroDeFilas][c]!=0 && !movimientoValido)
  97. {
  98. imprimirCuadro(cuadro);
  99. cout << "La Columna está llena, reingrese la jugada" << endl;
  100. }
  101. }
  102. }
  103.  
  104. void vertical(int cuadro[][numeroDeColumnas])
  105. {
  106. bool encontradoUno, encontradoDos=false;
  107. int i,j;
  108. int totalUno =0;
  109. int totalDos=0;
  110. for (j=0;j<numeroDeColumnas;j++)
  111. {
  112. totalUno=0;
  113. totalDos=0;
  114. for (i=0;i<numeroDeFilas;i++)
  115. {
  116. if (cuadro[i][j] == 1 && encontradoUno) //Si el Jugador1 Hace 4 en linea Vertical
  117. {
  118. totalUno++;
  119. }
  120. else
  121. {
  122. encontradoUno=false;
  123. totalUno=0;
  124. }
  125. if (cuadro[i][j] == 1 && !encontradoUno)
  126. {
  127. totalUno++;
  128. encontradoUno=true;
  129. }
  130. if (totalUno == 4)
  131. {
  132. cout << "El jugador 1 gana!" << endl;
  133. ganador=true;
  134. }
  135. if (cuadro[i][j] == 2 && encontradoDos) //Si el Jugador 2 Hace 4 en linea Vertical
  136. {
  137. totalDos++;
  138. }
  139. else
  140. {
  141. totalDos=0;
  142. encontradoDos=false;
  143. }
  144. if (cuadro[i][j] == 2 && !encontradoDos)
  145. {
  146. totalDos++;
  147. encontradoDos=true;
  148. }
  149. if (totalDos == 4)
  150. {
  151. cout << "El jugador 2 gana!" << endl;
  152. ganador=true;
  153. }
  154. }
  155. }
  156. }
  157.  
  158. void horizontal(int cuadro[][numeroDeColumnas])
  159. {
  160. bool encontradoUno, encontradoDos=false;
  161. int i,j;
  162. int totalUno =0;
  163. int totalDos=0;
  164. for (i=0;i<numeroDeFilas;i++)
  165. {
  166. totalUno=0;
  167. totalDos=0;
  168. for (j=0;j<numeroDeColumnas;j++)
  169. {
  170. if (cuadro[i][j] == 1 && encontradoUno) //Si el Jugador1 Hace 4 en linea Horizontal
  171. {
  172. totalUno++;
  173. }
  174. else
  175. {
  176. encontradoUno=false;
  177. totalUno=0;
  178. }
  179. if (cuadro[i][j] == 1 && !encontradoUno)
  180. {
  181. totalUno++;
  182. encontradoUno=true;
  183. }
  184. if (totalUno == 4)
  185. {
  186. cout << "El jugador 1 gana!" << endl;
  187. ganador=true;
  188. }
  189. if (cuadro[i][j] == 2 && encontradoDos) //Si el Jugador 2 Hace 4 en linea horizontal
  190. {
  191. totalDos++;
  192. }
  193. else
  194. {
  195. totalDos=0;
  196. encontradoDos=false;
  197. }
  198. if (cuadro[i][j] == 2 && !encontradoDos)
  199. {
  200. totalDos++;
  201. encontradoDos=true;
  202. }
  203. if (totalDos == 4)
  204. {
  205. cout << "El jugador 2 gana!" << endl;
  206. ganador=true;
  207. }
  208. }
  209. }
  210. }
  211.  
  212. void jugar(int cuadro[][numeroDeColumnas])
  213. {
  214. int fichas=0;
  215. while (fichas!=empate && !ganador)
  216. {
  217. if (fichas%2==0)
  218. {
  219. turnoUno(cuadro);
  220. vertical(cuadro);
  221. horizontal(cuadro);
  222. fichas++;
  223. imprimirCuadro(cuadro);
  224. }
  225. else
  226. {
  227. turnoDos(cuadro);
  228. vertical(cuadro);
  229. horizontal(cuadro);
  230. fichas++;
  231. imprimirCuadro(cuadro);
  232. }
  233.  
  234. }
  235. if (fichas == empate) //Caso de Empate
  236. {
  237. cout << "EMPATE! El juego ha terminado" << endl;
  238. }
  239. }
  240.  
  241. int main() //Programa Principal
  242. {
  243. int cuadro[numeroDeFilas][numeroDeColumnas];
  244. cout << "Cuatro en Linea" << endl;
  245. inicializarCuadro(cuadro);
  246. imprimirCuadro(cuadro);
  247. jugar(cuadro);
  248. return 0;
  249. }

Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines