-
Notifications
You must be signed in to change notification settings - Fork 0
Bots
con el siguiente comando se ejecuta la aplicación por consola con el bot deseado cargo run -- --mode computer --bot <nombre del bot>
El bot opera bajo la premisa de que la mejor defensa es un buen bloqueo. En cada turno, analiza el estado del tablero para identificar las intenciones del oponente y coloca su ficha en la posición que maximice el bloqueo de la conectividad enemiga con el lado al que se dirige.
- Identifica los lados del tablero que al oponente le faltan por conectar.
- Evalúa las celdas vacías adyacentes a las fichas enemigas.
- Prioriza bloquear el acceso a los lados faltantes y evita gastar movimientos cerca de los lados que el oponente ya ha conseguido.
A diferencia de bots que realizan movimientos aleatorios o locales, este bot tiene una visión completa del tablero, evaluando el estado global del juego en cada turno. Para ello utiliza un sensor de distancia (BFS), que es un algoritmo de búsqueda en anchura para medir la distancia mínima entre cualquier celda y los tres bordes del tablero. Además, el bot ignora jugadas irrelevantes y se enfoca en las celdas donde la victoria o derrota es inminente. Adapta su estrategia en tiempo real.
Se podría describir como "Defensa preventiva prioritariamente", pues su objetivo no es solo ganar, sino neutralizar sistemáticamente cualquier intento de conexión del usuario.
- Prioriza el bloqueo: El bot valora 10 veces más frustrar el camino del oponente que avanzar en el suyo propio.
- Urgencia en situaciones críticas: Mediante la fórmula V=1000/(d^2 + 1) el bot prioriza ir hacia las celdas críticas. De esta manera, cuando el oponente está a 1 o 2 celdas de conectar un borde, el valor de esa posición se dispara.
- Control del centro: El bot entiende que el centro es el punto con más valor, por lo que intenta hacerse con la zona en las fases iniciales.
- Detección de uniones: El bot favorece movimientos que unen sus propias fichas. Si una celda le permite unir dos grupos de filas, bonifica dicha celda para fomentarla.
Este bot esta diseñado para una dificultad "facil". Nace de dudas sobre la implementacion del tamaño de tablero variable y la necesidad de implementacion de varios bot por dificultad Este bot tiene una restricción de comportamiento absoluta, se niega a jugar en el interior del tablero. Utiliza el cálculo de coordenadas matemáticas baricéntricas (detectando si la fila o la columna tocan el límite geométrico de la matriz) para confinar todos sus movimientos exclusivamente al anillo perimetral del triángulo
El edge_bot sigue una estrategia en la que le regala el centro del tablero al oponente, lo cual resulta en que sea extremadamente fácil cortarle el paso Su comportamiento se resume en tres partes:
- Solo bordes: El bot tiene prohibido jugar en el interior del triángulo. Solo ve y utiliza las casillas que conforman el límite exterior del tablero.
- Movimientos al azar: No tiene un plan estructurado ni intenta conectar sus propias fichas para formar un camino. Simplemente elige un hueco libre del perímetro a cara o cruz.
- Mecanismo de seguridad: Si la partida se alarga mucho y los bordes se llenan por completo de fichas, el bot se salta su propia norma. Para evitar que el juego se bloquee o dé error, pondrá su ficha en cualquier casilla vacía del centro.
El bot atacante es un bot de dificultad "alta" que prioriza su propio camino antes de preocuparse por el camino de su rival. Utiliza el mismo algoritmo de búsqueda en anchura (BFS) que el Pro_Bot para medir distancias topológicas, pero invierte radicalmente los pesos heurísticos.
Su comportamiento se define como "agresividad ciega pero inteligente". Se centra en hacer su propio camino e ignora al jugador humano casi toda la partida. Sigue varias reglas:
- Antes de pensar en ninguna táctica compleja, el bot comprueba lo evidente. Si puede poner una ficha y ganar inmediatamente, lo hace. Si ve que al jugador humano le falta solo una ficha para ganar, tira su plan a la basura y le bloquea esa casilla
- Al principio de la partida, su máxima prioridad es dominar el centro del tablero. Una vez lo consigue, no pone fichas sueltas al azar; siempre intenta que sus fichas nuevas toquen a las que ya tiene