Java desafío de programación: la adición de matrices para el programa simple tic-tac-toe

Video: Gato con matriz parte 1 - Android Studio 2.1

Este desafío de programación Java se basa en los desafíos anteriores de esta serie Tic-Tac-Toe y pone a prueba su capacidad de utilizar matrices - dos de ellos, de hecho.

En Desafío de Java de programación: A Simple Tic-Tac-Toe y Desafío de Java Programación: Adición a la clase Tic-Tac-Toe programa simple que tienen el reto de escribir un programa para jugar el juego simple de Tic-Tac-Toe.

Como un juego, Tic-Tac-Toe clama por el uso de una matriz para representar el estado del juego. Sin matrices, debe utilizar una variable independiente para representar cada casilla del tablero. Con una matriz, se puede utilizar una sola variable para representar a todos los nueve cuadrados.

Este desafío de programación es simple: Escribir una versión mejorada del programa que hace uso de matrices. Debe utilizar al menos dos matrices en su solución:

  1. Debe utilizar una matriz para representar la junta. Lo más probable es que usted tendrá que usar una matriz unidimensional con nueve elementos, de la siguiente manera:

     0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- | --- | --- 6 | 7 | 8

    En otras palabras, la parte superior cuadrada (de izquierdaA1) Se almacena en elemento de la matriz 0, y el cuadrado inferior derecha (C3) Se almacena en elemento de la matriz 8.

  2. También debe utilizar una matriz para representar los ocho posibles vectores de tres en raya.

    A continuación, puede utilizar esta matriz para determinar si alguno de los jugadores ha ganado la partida. Lo más probable es que tendrá que utilizar una matriz de dos dimensiones para esta tarea. La matriz tendrá ocho, matrices de tres elementos, cada uno de los cuales representa los tres índices de un vector particular tres-en-uno-fila.

    La matriz completa contendría los siguientes datos:

     0 1 23 4 56 7 80 3 61 4 72 5 80 4 82 4 6 

Video: TRIQUI EN JAVA NETBEANS CON MATRICES CODIGO PARA DESCARGAR

Un requisito adicional de este programa es que el TicTacToeBoard clase que se cree para este desafío debe ser totalmente compatible con la clase que ha creado para el desafío anterior. En otras palabras, se debe aplicar los mismos métodos exactos. Para su comodidad, estos métodos se repiten en la siguiente tabla.

Debido a que estos métodos se refieren a las casillas del tablero tic-tac-dedo del pie usando designaciones de fila-columna tal como A1 o B2, su aplicación será necesario mapear estas designaciones de números de índice. Por ejemplo, si la cadena A1 se pasa a la método playAt, el programa debe marcar el juego en el índice 0 en la matriz.

La Clase TicTacToeBoard
ConstructorDescripción
TicTacToeBoardCrea un nuevo TicTacToeBoard con todos los cuadrados vacíos.
MétodoDescripción
void reset ()Restablece el estado de cada cuadrado a vacío.
playAt anular (Cadena cuadrada, reproductor int)Marca el cuadrado especificado (A1, A2, A3, B1, B2, B3, C1, C2, o C3) Para el jugador especificado (1 para X, 2 para O). lanza Argumento de excepción ilegal si la plaza no es uno de los valores admisibles, el jugador no es 1 o 2, o la plaza especificado no está vacía.
int isGameOver ()Determina si el juego ha terminado. Devuelve 0 si el juego no ha terminado, 1 si X ha ganado la partida, 2 si O ha ganado el juego, y 3 si el juego es un empate. El juego termina condiciones son las siguientes:
1: Si cualquier fila, columna o diagonal contiene todas las X.
2: Si cualquier fila, columna o diagonal contiene toda O de.
3: Si no hay plazas vacías y ni X ni O ha ganado.
int getNextMove ()Devuelve un entero que representa el siguiente paso para el equipo oponente. Este método debe hacer un esfuerzo rudimentaria para seleccionar un buen movimiento, de acuerdo con la siguiente estrategia:
* Si el centro (plaza B2) Está vacía, jugar a la plaza del centro.
* Si el centro no está vacío, pero ninguna de las cuatro esquinas (cuadrados A1, A3, C1, o C3) Están vacías, jugar una de las esquinas (no importa cuál).
* Si el centro no está vacío y no hay esquinas están vacías, jugar a uno de los bordes (cuadrados A2, B1, B3, o C2).
String toString ()Devuelve una cadena que representa el estado actual de la junta. La cadena incluye caracteres de nueva línea para mostrar las filas, así como líneas de separación en las líneas de consola separadas, como en este ejemplo:
O | | O
- | - | -
| X |
- | - | -
| X |

Como un reto aún más, para esta versión del desafío TicTacToeBoard, el jugador de la computadora debe utilizar una estrategia más inteligente contra el oponente humano. Determinar el juego del equipo de la siguiente manera:

  1. Si es posible que el equipo para ganar en su siguiente jugada, el equipo debe jugar en la plaza de ganar.

  2. Si es posible que el oponente humano a ganar en su siguiente jugada, el equipo debe jugar en el rival humana casilla ganadora para bloquear la victoria.

  3. Si la casilla central está disponible, el equipo debe tomar la plaza del centro.

  4. Si alguna casilla de la esquina está disponible, el equipo debe jugar en una de las esquinas disponibles.

  5. El equipo debe jugar en una plaza de borde disponibles.

Tenga en cuenta que para implementar esta estrategia, que necesita para desarrollar una rutina que puede determinar si cualquier jugador puede ganar en su siguiente movimiento. Para ello, tendrá que buscar en cada una de las ocho, tres-en-uno-fila vectores para determinar si el vector contiene una casilla vacía y si cada uno de los otros dos cuadrados contienen marcas para el mismo oponente (que es decir, dos de X o dos o de).

Puede hacerlo mediante el uso de 0 a representar un cuadrado vacío, 1 para representar una X, y 2 para representar una O. Pero eso requeriría la lógica bastante complicado - algo como esto sería necesario, en el supuesto de que s1, s2, y s3 son números enteros que contienen los contenidos de los tres cuadrados de uno de los vectores de ocho, tres-en-uno-fila:

si (s1 == 0 & s2 == 1 & s3 == 1) // X puede ganar jugando en s1if (s2 == 0 & s1 == 1 & s3 == 1) // X puede ganar jugando en s2if (s3 == 0 & s1 == 1 & s2 == 1) // X puede ganar jugando en s3

Así que aquí está un consejo: En lugar de utilizar 0, 1 y 2 representan a una casilla vacía, una X y un O, utilice los números primos 2, 3, y 5 en su lugar. Entonces, para determinar si un jugador puede ganar en un vector dado, basta con multiplicar los tres valores para ese vector. Si el resultado es 18, X puede ganar (233 = 18). Si el resultado es 50, O puede ganar (255 = 50).

Tenga en cuenta también que aunque esta estrategia es una mejora con respecto a la estrategia empleada para las versiones anteriores del programa, todavía no es una estrategia perfecta: Todavía se puede vencer a la computadora con la secuencia correcta de las obras. Si quieres un reto adicional, considere lo que sería necesario para hacer el juego imposible de ganar estrategia adicional, y luego encontrar una manera de poner en práctica la nueva estrategia.

Usted puede encontrar la solución a este problema en el pestaña de descargas del Java Todo-en-uno para los maniquíes, 4ª Edición página del producto.

¡Buena suerte!

Artículos Relacionados