Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: CybeRoot en 7 Agosto 2018, 08:04 am



Título: MIT App Inventor, problemas con una aplicación
Publicado por: CybeRoot en 7 Agosto 2018, 08:04 am
Hola muy buenas, ya hace un tiempo le entregue un trabajo a mi colegio. Es un tres en raya, sí una tontería, en mi tiempo libre cuando no sabía que hacer lo he estado mejorando, no obstante, me he quedado atascado en una parte. Mi petición sería la siguiente: Existe un modo "IA", pero no consigo que funcione... alguien podría mirarlo y decirme cual ha sido mi fallo?

ai2.appinventor.mit.edu/?galleryId=5949267235700736 (http://ai2.appinventor.mit.edu/?galleryId=5949267235700736)


Título: Re: MIT App Inventor, problemas con una aplicación
Publicado por: Tachikomaia en 9 Agosto 2018, 02:32 am
Cuando entré a tu enlace me pidió que me conectara con una cuenta y luego me pone una especie de contrato. ¿Es necesario todo eso para entender tu problema? ¿no deberías postear el código mejor?

Se supone que el modo se debería activar o desactivar con un botón. Cambiaría el valor de una variable: IA = "On". Y el código tendría medio al inicio de la parte repetitiva:
Código:
Si IA == "On"
   // Código IA aquí.
sino
   // Código para random o lo que sea aquí.
Eso no debería ser difícil ni dar problema. ¿Quieres un código para una IA? No sé cómo has nombrado los casilleros pero supongamos que así:
123
456
789
Entonces... así no:
Código:
Si c1 == "M" //casillero 1 ocupado por máquina
   Si c2 == "M"
      Si c3 == "" // Vacío
         // Marcar c3.
      etc
...porque requiere escribir varias cosas repetidas, casos en que c1 es irrelevante. A menos que crees funciones pero se supone que hay algo mejor...

Este modo tiene el defecto de repetir varias veces los mismos chequeos:
Código:
Si c1 == "M" && c2 == "M" && c3 == ""
   // Marcar c3.
sino si c1 == "M" && c2 == "" && c3 == "M"
   // Marcar c2.
// etc

Algo interesante sería sumar los contenidos de los casilleros y si la extensión resulta > 1 entonces contar cantidad de Ms, si eso es < 2 entonces Js... Pero es medio complicado.

Otra cosa es crear funciones pero son muchas. Requiere usar "V" en vez de "".
Código:
Función MMVXXXXXX
   C3 = M
Función MVMXXXXXX
   C2 = M
Función VMMXXXXXX
   C1 = M
etc
Llamas a una función distinta según la situación. X significa que es irrelevante. J sería la marca del jugador.

Algo interesante sería que el programa aprenda. Eso yo lo hacía mediante que "jugara sólo" (aunque no era tateti, era nomás ubicarse en un casillero de 1d) y con archivos externos, pero a ver... Cuando la IA pierde o gana tiene que crear una función o decirte que crees una. Ejemplo: La situación es JJV... y pones en 3. Te dice:
Código:
Función MMV...
   c = 3
   Falta = 0
Nota que ha cambiado las Js por Ms y viceversa. Eso cuando eres tú quien gane. La función incluye el casillero que se marcó y una variable que indica cuánto falta para ganar.
Cuando alguien marca un casillero tienes que intentar cargar una función. Si existe tienes que crear otra, la de la situación anterior, pero le tienes que sumar 1 a la variable Falta.
De este modo las funciones se escribirían sólas o al menos se harían sólas (tú sólo tendrías que copiarlas y pegarlas), aunque tendrías que jugar bastante o hacer que la máquina haga una simulación de todas las posibles jugadas. En fin ando muy oxidado en el tema de aprendizaje y lo que te dije no es exactamente lo que yo hacía pero quizá te sirva.

A ver si otro forero se anima a dar otra respuesta!  :D


Título: Re: MIT App Inventor, problemas con una aplicación
Publicado por: CybeRoot en 9 Agosto 2018, 22:42 pm

Nota que ha cambiado las Js por Ms y viceversa. Eso cuando eres tú quien gane. La función incluye el casillero que se marcó y una variable que indica cuánto falta para ganar.
Cuando alguien marca un casillero tienes que intentar cargar una función. Si existe tienes que crear otra, la de la situación anterior, pero le tienes que sumar 1 a la variable Falta.
De este modo las funciones se escribirían sólas o al menos se harían sólas (tú sólo tendrías que copiarlas y pegarlas), aunque tendrías que jugar bastante o hacer que la máquina haga una simulación de todas las posibles jugadas. En fin ando muy oxidado en el tema de aprendizaje y lo que te dije no es exactamente lo que yo hacía pero quizá te sirva.

A ver si otro forero se anima a dar otra respuesta!  :D
Una persona me terminó ayudando y ahora lo estoy corrigiendo. Finalmente si quieres saber cómo lo he resuelto, házmelo saber. Gracias por la ayuda.