Cómo construir un juego de Tic Tac Toe (jugador contra IA) en C ++

P. ¿Cómo hago un juego de tres en raya en C ++?

¡¡¡¡¡¡Hola!!!!!! He hecho un juego de tres en raya en Turbo C ++. No tengo años de experiencia en C ++, pero he hecho todo lo posible para lograrlo.

Aquí está el código:

#include
#include
#include
principal()
{
clrscr ();
aleatorizar ();
int z [10] = {0,0,0,0,0,0,0,0,0};
int m = 0, g = 0, b, c, i, j;
char a [3] [3];
goto b;
un:
clrscr ();
goto d;
mi:
cout << "\ t \ t \ t" << "TIC-TAC-TOE GAME !!!!!!" << endl;
cout << endl;
cout << "\ t \ t \ t" << a [0] [0] << "|" << a [0] [1] << "|" << a [0] [2] << "\norte";
cout << "\ t \ t \ t" << "- | – | -" << "\ n";
cout << "\ t \ t \ t" << a [1] [0] << "|" << a [1] [1] << "|" << a [1] [2] << "\norte";
cout << "\ t \ t \ t" << "- | – | -" << "\ n";
cout << "\ t \ t \ t" << a [2] [0] << "|" << a [2] [1] << "|" << a [2] [2] << "\norte";
si (g == 1)
{
cout << endl << "X gana !!!!";
ir a f;
}
si (g == 2)
{
cout << endl << "¡¡¡Oh, Gana !!!!";
ir a f;
}
si (g == 3)
{
cout << endl << "Es un sorteo !!!!";
ir a f;
}
cout <> b;
si (b == 1)
{
si (z [0]! = 1)
{
a [0] [0] = ‘X’;
goto c1;
}
}
si (b == 2)
{
si (z [1]! = 1)
{
a [0] [1] = ‘X’;
goto c1;
}
}
si (b == 3)
{
si (z [2]! = 1)
{
a [0] [2] = ‘X’;
goto c1;
}
}
si (b == 4)
{
si (z [3]! = 1)
{
a [1] [0] = ‘X’;
goto c1;
}
}
si (b == 5)
{
si (z [4]! = 1)
{
a [1] [1] = ‘X’;
goto c1;
}
}
si (b == 6)
{
si (z [5]! = 1)
{
a [1] [2] = ‘X’;
goto c1;
}
}
si (b == 7)
{
si (z [6]! = 1)
{
a [2] [0] = ‘X’;
goto c1;
}
}
si (b == 8)
{
si (z [7]! = 1)
{
a [2] [1] = ‘X’;
goto c1;
}
}
si (b == 9)
{
si (z [8]! = 1)
{
a [2] [2] = ‘X’;
goto c1;
}
}
más
{
cout << "Ingrese números de la cuadrícula -";
ir a;
}
si:
a [0] [0] = ‘1’;
a [0] [1] = ‘2’;
a [0] [2] = ‘3’;
a [1] [0] = ‘4’;
a [1] [1] = ‘5’;
a [1] [2] = ‘6’;
a [2] [0] = ‘7’;
a [2] [1] = ‘8’;
a [2] [2] = ‘9’;
ir a;
c1:
goto g;
c2:
c = aleatorio (1000)% 9;
if (c == 0 && a [0] [0]! = ‘X’ && a [0] [0]! = ‘O’)
{
a [0] [0] = ‘O’;
z [0] = 1;
ir a;
}
if (c == 1 && a [0] [1]! = ‘X’ && a [0] [1]! = ‘O’)
{
a [0] [1] = ‘O’;
z [1] = 1;
ir a;
}
if (c == 2 && a [0] [2]! = ‘X’ && a [0] [2]! = ‘O’)
{
a [0] [2] = ‘O’;
z [2] = 1;
ir a;
}
if (c == 3 && a [1] [0]! = ‘X’ && a [1] [0]! = ‘O’)
{
a [1] [0] = ‘O’;
z [3] = 1;
ir a;
}
if (c == 4 && a [1] [1]! = ‘X’ && a [1] [1]! = ‘O’)
{
a [1] [1] = ‘O’;
z [4] = 1;
ir a;
}
if (c == 5 && a [1] [2]! = ‘X’ && a [1] [2]! = ‘O’)
{
a [1] [2] = ‘O’;
z [5] = 1;
ir a;
}
if (c == 6 && a [2] [0]! = ‘X’ && a [2] [0]! = ‘O’)
{
a [2] [0] = ‘O’;
z [6] = 1;
ir a;
}
if (c == 7 && a [2] [1]! = ‘X’ && a [2] [1]! = ‘O’)
{
a [2] [1] = ‘O’;
z [7] = 1;
ir a;
}
if (c == 8 && a [2] [2]! = ‘X’ && a [2] [2]! = ‘O’)
{
a [2] [2] = ‘O’;
z [8] = 1;
ir a;
}
más
{
goto c1;
}
re:
if (a [0] [0] == ‘X’ && a [0] [1] == ‘X’ && a [0] [2] == ‘X’)
{
g = 1;
ir a e;
}
if (a [1] [0] == ‘X’ && a [1] [1] == ‘X’ && a [1] [2] == ‘X’)
{
g = 1;
ir a e;
}
if (a [2] [0] == ‘X’ && a [2] [1] == ‘X’ && a [2] [2] == ‘X’)
{
g = 1;
ir a e;
}
if (a [0] [0] == ‘X’ && a [1] [0] == ‘X’ && a [2] [0] == ‘X’)
{
g = 1;
ir a e;
}
if (a [0] [1] == ‘X’ && a [1] [1] == ‘X’ && a [2] [1] == ‘X’)
{
g = 1;
ir a e;
}
if (a [0] [2] == ‘X’ && a [1] [2] == ‘X’ && a [2] [2] == ‘X’)
{
g = 1;
ir a e;
}
if (a [0] [0] == ‘X’ && a [1] [1] == ‘X’ && a [2] [2] == ‘X’)
{
g = 1;
ir a e;
}
if (a [0] [2] == ‘X’ && a [1] [1] == ‘X’ && a [2] [0] == ‘X’)
{
g = 1;
ir a e;
}
if (a [0] [0] == ‘O’ && a [0] [1] == ‘O’ && a [0] [2] == ‘O’)
{
g = 2;
ir a e;
}
if (a [1] [0] == ‘O’ && a [1] [1] == ‘O’ && a [1] [2] == ‘O’)
{
g = 2;
ir a e;
}
if (a [2] [0] == ‘O’ && a [2] [1] == ‘O’ && a [2] [2] == ‘O’)
{
g = 2;
ir a e;
}
if (a [0] [0] == ‘O’ && a [1] [0] == ‘O’ && a [2] [0] == ‘O’)
{
g = 2;
ir a e;
}
if (a [0] [1] == ‘O’ && a [1] [1] == ‘O’ && a [2] [1] == ‘O’)
{
g = 2;
ir a e;
}
if (a [0] [2] == ‘O’ && a [1] [2] == ‘O’ && a [2] [2] == ‘O’)
{
g = 2;
ir a e;
}
if (a [0] [0] == ‘O’ && a [1] [1] == ‘O’ && a [2] [2] == ‘O’)
{
g = 2;
ir a e;
}
if (a [0] [2] == ‘O’ && a [1] [1] == ‘O’ && a [2] [0] == ‘O’)
{
g = 2;
ir a e;
}
más
{
ir a e;
}
sol:
m = 0;
para (i = 0; i <3; i ++)
{
para (j = 0; j <3; j ++)
{
if (a [i] [j] == ‘X’ || a [i] [j] == ‘O’)
{
m ++;
}
}
}
si (m == 9)
{
g = 3;
ir a;
}
goto c2;
F:
cout << "";
getch ();
devuelve 0;
}

En este juego, no habrá empate. O usted o la computadora ganarán.

Puede que no sea un código perfecto, pero se puede entender.

Espero que haya ayudado 🙂

Edición 1: después de hacer modificaciones, ahora también puede ser un empate.

Diviértete 😀

Edición 2: Ahora, he representado la cuadrícula Tic-Tac-Toe de una mejor manera.

Diviértete 🙂

No estoy en C ++, pero he hecho un juego de 2 jugadores tick tac toe en JAVA.

¿Cuáles son las cosas que necesitas?

Necesita algo para contener todos los subpaneles. También debe llamar a los otros paneles para verificar si hay un ganador. Llamaremos a esto el panel.

Debe tener un subpanel para el marcador, que mantendrá la puntuación. Esto se llamará marcador

Necesitas tener un subpanel que mantendrá qué cuadrado tiene una pieza determinada. Esto se llamará tablero de juego.

Panel

  • Establecer el diseño y agregar un tablero de juego y un marcador
  • Tener un botón para reiniciar
  • Compruebe si hay empate o ganador

Juego de mesa

  • Esta es la lógica del tablero.
  • Verificar ganador
  • Verifique el empate (todos los cuadrados llenos)
  • Almacenar los botones
  • Tener un método de reinicio
  • Necesitas una forma de almacenar a quién le toca poner la pieza correcta

Marcador

  • Llamado desde el panel
  • Muestra el puntaje de cada jugador y de quién es el turno

Estas deberían ser las partes amplias que necesitas para un juego de tick tack toe.

Hacer un juego de tres en raya es uno de los proyectos más fáciles en C ++ para principiantes.

Una vez que haya terminado, tendrá una idea clara de cómo funciona el bucle for, el bucle while y el bucle if-else.

La idea para hacer un juego de tres en raya es (aquí el juego se juega entre la computadora y el usuario):

  1. Obtenga la posición del usuario en donde el usuario tiene que asignar el número
  2. Si el lugar contiene un elemento anteriormente, solicite al usuario que ingrese a otra posición. Haga esto hasta que obtenga una posición válida para asignar un nuevo elemento.
  3. Para que la computadora asigne su elemento, genera aleatoriamente una posición.
  4. Verifique si un elemento existe previamente en ese lugar.
  5. Si existe un elemento, genere una nueva posición hasta que obtenga una posición válida.
  6. Después de cada movimiento por el usuario o la computadora, verifique las condiciones ganadoras utilizando la declaración if. Si se cumple la condición ganadora, salga del programa y continúe.

Estuviste cerca de decir el algoritmo min max pero, no del todo correcto. Se utiliza una pequeña versión extendida / mejorada del algoritmo min max, conocida como poda alfa-beta.

Aquí está la implementación de la poda alfa-beta http://www.geeksforgeeks.org/min

Debes recorrer el árbol de búsqueda hasta que la profundidad sea 5.

Documentos adicionales

Arboles de juego

Tic-tac-toe generalizado

El diseño de su juego es defectuoso, lo más probable es que siempre conduzca a un empate, porque obtener cinco en fila es casi imposible sin ser interceptado. Deje de lado, si quiere un oponente controlado por computadora, lo más fácil es calcular cada movimiento posible que se pueda hacer para las siguientes rondas x, y tomar el resultado que ofrezca la mayoría de los puntos (la fila más larga / ganar) en la menor cantidad de vueltas Esto también genera una buena opción de dificultad al alterar la cantidad de turnos que calcula la computadora.

Sin embargo, si está buscando un “ki real” que aprenda por sí mismo, necesita un enfoque mucho más complejo que debe buscar por su cuenta.

Espero que esto te ayudará.

Proyecto C ++ Tic Tac Toe Game

Antes de escribir AI para el juego, sugiero que juegues con una persona real. Es imposible ganar este juego para cualquiera de los jugadores a menos que el otro jugador quiera perder o sea súper tonto.