Proyecto Programación Orientada a Objetos

Descripción del Problema

En la vida contemporánea, se ha vuelto una necesidad latente la búsqueda de medios de entretenimiento y competencia, tal que nos brinde una experiencia tanto agradable como desafiante. Cualquier tipo de juego está al alcance de nuestra mano, a un click o tap, sin embargo, muy pocos de ellos buscan poder brindar entretenimiento y al mismo tiempo generar una ayuda cognitiva, juego clásicos como el Ajedrez son aquellos que nutren al usuario de ambas experiencias.
Similar a este es el juego conocido como Gomoku (del japonés "go" = cinco, y "moku" que aunque literalmente quiere decir ojo, en este caso se toma como punto, también llamado cinco en línea o cinco en raya).
Para que puedan conocer el juego entrar al siguiente enlace.

Análisis del Problema

El problema se identifica como la construcción del juego elegido, para ello se debe escoger una plataforma de diseño, un lenguaje y cuales serán los objetivos visuales.
Como grupo sabemos la importancia de lo atractivo en un juego, sea desde un juego simple hasta el más reciente y complejo. Por ello se escogió la plataforma Android, la cual debe ser implementada en Android Studio, por su infinidad de utilidades, librerias, las cuales vemos cada día en nuestros propios teléfonos y dispositivos móviles.
Del problema anterior se identifican los siguientes desafios:

  1. Desarrollar en Lenguaje Java el código correspondiente al "Cerebro del Juego"
  2. Comprender los conceptos básicos de Android y como usar Android Studio
  3. Unir el juego con la parte gráfica de Android

Solución Entregada

La solución al problema propuesto, fue implementar el juego descrito en una plataforma móvil, como juego fue programado en Android. Por ello se pensó en inicialmente crear un sistema en el que se pudiera marcar las casillas en una interfaz gráfica, que fue creada con las herramientas propia de Android Studio, creando las Actividades necesarias.
El primer modo de juego implementado fue Multijugador que permite varios jugadores en el mismo tablero, hasta un total de 4, para ello se debe tener un signo distintivo en el tablero según el jugador. Diferenciando asi las marcas de cada uno, evaluando en cada jugada, si existe un ganador.
El siguiente modo de juego es Un jugador , el cual posee un bot el cual debe estar "pendiente" de los movimientos del jugador, para escoger la mejor contrajugada. Para ello se conocen muchos algoritmos de juego, sin embargo, consideramos realizar un algoritmo propio que pudiera ser simple y a la vez funcional, con ello se creó un sistema de evaluación de casillas en torno al último movimiento del jugador, las cuales tendrán mayor valor si son "mejores jugadas". El código adjunto en la sección de Implementación puede explicar mejor lo descrito.

Diagrama UML

Para el diagrama descrito se debe recordar que la aplicación creada en este proyecto fue en la plataforma Android, la cual posee de 3 Actividades principales que se ven en la imágen adjunta, MainActivity, Secondary Activity, SplashActivity.
logo

Descripción de las Clases

  1. Bot_analisis: clase encargada de analisar jugadas presentes y a futuro en el tablero para que la computadora juegue de la mejor manera
  2. Game: contiene la estructura del game, tal como condiciones de victoria y analisis de estas
  3. Board: contiene el tablero en si, y metodos relacionados con este como marcar una jugada en el tablero o ver las coordenadas vacias

Descripción de las Actividades

  1. MainActivity:Contiene la interfaz gráfica principal del juego
  2. SplashActivity:Pantalla inicial que se muestra al comienzo del juego
  3. SecondActivity:Es el menú que se muestra al iniciar el juego, selección de Modo de Juego

Pruebas de Solución

Al implementar la aplicación en el dispositivo Android se obtiene el funcionamiento adjunto en los siguientes archivos audiovisuales.


Dificultades

  1. Realizar la inteligencia del Bot fue la principal dificultad, ya que para ella existen algoritmos como Minimax que se ocupan mucho en este tipo de aplicaciones, sin embargo, se concluyó en un código propio siguiendo la idea de Minimax
  2. Aprender a Crear cada interfaz
  3. Los problemas de rendimiento también fue una dificultad importante, ya que no se conocía que podría existir este tipo de problema, esto fue provocado porque el programa se ejecutaba "sobre el mismo hilo", para ello se distribuyó el desempeño en varios hilos más. Solucionando así dicho problema.

Código Fuente

El código correspondiente al proyecto puede ser descargado en la siguiente imagen.