Cita:
Iniciado por aceutico
Espero tu análisis, a ver si descubres cómo funciona o al revés, cómo de malo es.
Me tomé un tiempo para analizarlo, y la verdad es que lo veo horrible, seguro que te costó mucho más trabajo hacerlo de esa forma tan difícil de leer que si lo hubieras hecho 'como se debe'.
Acerca del código de aceutico:
Me gustó la forma general (no el código) como resolviste el problema, es interesante, el hecho de que comparas cada combinación de 3 posible (8 en total, 3 horizontales, 3 verticales, y 2 diagonales) y luego ves cuál es su estado para hacer tu jugada.
Algo que también me gustó fue cómo compruebas si alguien ha ganado, comprobando si alguna de las combinaciones suma 3 (gana el usuario), o si suma 20 (gana la computadora, ya que con una jugada que ya no es necesario completará 30)
No me gustaron los nombres que usaste, dificultaron el gran manera saber su función (Por ejemplo:
l,
fa,
fai,
j,
s,
jj,
ll,
u,
uu,
![:-S](http://static.forosdelweb.com/fdwtheme/images/smilies/crap.png)
).
Tampoco ha sido muy bueno que usaras una única función para realizar todas las acciones, si lo dividieras en varias facilitarías mucho la
lectura del código, cosa que según mencionaste adrede trataste de complicar.
Muchas son las cosas que complicaste. Por ejemplo:
Código PHP:
d[11] = {'-', ('-' - 1) * 2, 0, 0, 0,
0, 0, 0, 0, 0, '\'' + '('};
Podría ser:
Código PHP:
d[11] = {'-', 'X', 0, 0, 0,
0, 0, 0, 0, 0, 'O'};
Y otras operaciones desnecesarias como: 5 * -2 (-10), -2 - 10 (-12). Además de que varias veces retornas datos (return) que no son capturados en ninguna parte.
Bueno, realmente si el propósito era complicar el código lo lograste muy bien
![Aplauso](http://static.forosdelweb.com/fdwtheme/images/smilies/aplausos.gif)
.
Ahora, comentando un poco acerca de su funcionamiento, es básicamente lo que dije al principio.
Tiene una matriz (p) donde guarda las jugadas, cuando juega el usuario escribe un 1, cuando juega la computadora escribe un 10. Luego analiza, la suma de cada una de las combinaciones de 3 posibles (ya mencioné cuales son) para saber si el usuario está por ganar (cuando la suma es 2):
Luego, con
jj lo que hacemos son solo varias comparaciones parecidas a la primera con un orden de preferencia:
Código PHP:
jj(10, 0, 1, 11)
Primero: 10 si hay una combinación que solo tenga una jugada de la computadora. Segundo: 0 si hay una combinación sin jugadas. Tercero: 1 si hay una combinación con una sola jugada del usuario. Cuarto: 11 si hay una combinación con una jugada de la computadora y una del usuario. (En el nivel fácil el orden de preferencia es al revés).
Después encontrar uno de los casos, con
uu busca el espacio vacío en la respectiva combinación para colocar la jugada de la computadora.
A decir verdad, si no hubieras optado por complicar el código por esa actitud que yo describiría como poco elegante y poco respetuosa hacia los demás participantes y usuarios votantes; tu código sería bastante bueno.
Saludos