La Red de Conocimientos Pedagógicos - Conocimientos históricos - Programación de juegos de backgammon (VB)

Programación de juegos de backgammon (VB)

Hay un dicho en el concepto de backgammon de IA que dice que "las autoridades están confundidas, pero los espectadores lo tienen claro. Sin embargo, esta frase no es cierta para los jugadores de computadora controlados por IA, porque la computadora". debe conocer las formas de ganar y calcular la probabilidad de ganar de cada movimiento a cualquier casilla del tablero de ajedrez, es decir, un concepto completo de IA de backgammon debe:

 

1. conocer todas las combinaciones ganadoras; 2. Crear y utilizar la tabla ganadora; 3. Establecer el puntaje ganador; 4. Darle a la computadora la capacidad de atacar y defender; 1. Encontrar la combinación ganadora de backgammon; La computadora debe saber qué combinaciones ganadoras hay, por lo que debemos encontrar el número total de combinaciones ganadoras. Suponemos que el tablero de ajedrez actual es de 10*10. (1) Calcule el número de combinaciones ganadoras en dirección horizontal. Las combinaciones ganadoras en cada columna son: 6, ***10 columnas, por lo que el número de combinaciones ganadoras en dirección horizontal es: 6*10=60 (2) Calcule el número total de combinaciones ganadoras en la dirección vertical, las combinaciones ganadoras en cada fila son: 6, ***10 filas, entonces el número de combinaciones ganadoras en la dirección vertical es: 6*10=60 (3) Calcule el número total de combinaciones ganadoras en la dirección diagonal, en la diagonal El número total de combinaciones ganadoras es 6 (5 4 3 2 1) * 2 = 36 (4) Calcule el número total de combinaciones ganadoras en la dirección anti-diagonal. El número total de combinaciones ganadoras en la línea antidiagonal es 6 (5 4 3 2 1) * 2 = 36, de modo que el número de todas las combinaciones ganadoras es: 60 60 36 36 = 192 2. Establezca y utilice la tabla ganadora. Hemos calculado que un tablero de backgammon de 10*10 tendrá 192 formas de ganar, por lo que podemos usar la matriz para construir la mesa ganadora. Las funciones principales de la mesa ganadora son: 1. Determinar si el método ganador actual es válido; Para determinar cuántas piezas del método ganador actual caen en la combinación ganadora. El uso detallado se verá en los siguientes procedimientos. 3. Configuración de la puntuación Para que la computadora determine el mejor movimiento para el siguiente paso del juego, primero debe calcular la puntuación de cualquier espacio en el tablero de ajedrez que juegue la computadora, y la puntuación más alta es la mejor jugada para la computadora. para el siguiente paso. Principio: Determinamos cuántas formas de ganar entre el espacio actualmente discutido y el punto actualmente discutido. Si hay varias formas de ganar el espacio, sumaremos puntos. Este principio puede parecer imposible al principio, pero no importa. Comprenderá este principio de toma de decisiones cuando comprenda nuestros procedimientos posteriores. Este tipo de toma de decisiones tiene algunos defectos, porque si se diseña basándose únicamente en este modelo, es posible que cuando la computadora o el jugador tenga tres piezas en línea, la computadora no pueda juzgarlas. son las mejores posiciones actuales para ganar sin atacar ni defender. No importa, podemos cambiar completamente la situación de puntuación actual mediante un algoritmo de fortalecimiento. Es decir, cuando la computadora o el jugador tiene tres o cuatro piedras conectadas en una línea, utilizamos el algoritmo de fortalecimiento para cambiar la puntuación actual. el espacio relacionado con las tres o cuatro piedras El valor aumenta para compensar esta deficiencia. 4. Ataque y defensa En el método anterior, de hecho, la computadora solo calcula la mejor posición de ataque. Para defender, también debemos calcular la mejor posición de ataque del jugador actual. ¿De qué sirve esto? La razón es muy simple. Si la puntuación de la mejor posición de ataque del jugador es mayor que la puntuación de la mejor posición de ataque de la computadora, entonces la computadora colocará la siguiente pieza de ajedrez en la mejor posición de ataque del jugador para evitar el ataque del jugador. la computadora moverá la pieza de ajedrez desde tu mejor posición de ataque. De hecho, este concepto de IA es muy poderoso. Si no eres un muy buen jugador de backgammon, la computadora puede derrotarte muy rápidamente. Soy un jugador de ajedrez intermedio en Lianzhong y mi tasa de victorias no es muy alta cuando juego contra este concepto. Utilice vb.net para escribir Gobang 1. Preparación antes de escribir: 1. Utilice el pensamiento informático para describir todo el proceso de juego de ajedrez. Considere los pasos: (1) Para simplificar, podemos dejar que la computadora haga el primer movimiento cada vez. La computadora hace un movimiento. Esto bloqueará muchas situaciones ganadoras posibles para los jugadores. (2) Cuando un jugador mueve ajedrez, primero debemos considerar la legalidad del movimiento del jugador. (3) Si es legal, los jugadores también bloquearán muchas posibles situaciones ganadoras para las computadoras.

(4) La ruta de pensamiento de la computadora: primero, determine si todas las combinaciones ganadoras del jugador actual y la computadora necesitan mejorarse.

Sí, se realizan asignaciones mejoradas; de lo contrario, se realizan asignaciones normales. (5) Compare el jugador actual y la computadora para ver quién tiene la puntuación más alta. El punto con la puntuación más alta se utiliza como siguiente movimiento de la computadora. 2. Utilice formularios y herramientas gráficas de vb.net para crear una interfaz de tablero de backgammon (1) Agregue un control de cuadro de imagen para dibujar piezas de ajedrez y tableros de ajedrez (2) Agregue un control de etiqueta para mostrar la marca ganadora actual, que es la marca ganadora actual. Esta etiqueta se muestra cuando un lado gana o empata. (3) Agregar un control del menú principal Función: controlar el inicio o el final del juego (4) Agregar un componente de reproducción multimedia Función: habilitar el programa para reproducir música. 3. Establezca el precio general del marco. Utilizamos un tablero de ajedrez de 10*10 como plataforma principal. Utilice matrices para definir todo el tablero de ajedrez y utilice matrices para definir combinaciones ganadoras y signos ganadores, etc. 2. Declare la matriz global y las variables para definir el escritorio virtual: Dim table(9, 9) As Integer Defina la puntuación del espacio de escritorio del reproductor actual: Dim pscore(9, 9) As Integer Defina la puntuación del escritorio de la computadora actual espacio: Dim cscore(9, 9) Como entero: define la combinación ganadora del jugador: Dim pwin(9, 9, 191) Como booleano: define la combinación ganadora de la computadora: Dim cwin(9, 9, 191) Como booleano: define el indicador de combinación ganadora del jugador: Dim pflag(191) Como booleano Defina el indicador de combinación ganadora de la computadora:

Dim cflag(191) Como booleano Defina el indicador válido del juego: Dim theplayflag como booleano 3. Inicialice el juego'* ******************* ********************************** ****************** ****************

'** Nombre del módulo: initplayenvironment

'**

'** Descripción: Las funciones principales de esta función son las siguientes:

'** 1. Establecer música de fondo.

'** 2. Establece que el estado del juego sea válido.

'** 3. Inicializa la etiqueta de estado del juego.

'** 4. Especifique directamente el primer movimiento del ordenador.

'** 5. Inicialice el escritorio de partitura básica.

'** 6. Se inicializan las banderas ganadoras de la computadora y del jugador.

'** 7. Inicializa todas las combinaciones ganadoras.

'** 8. Restablecer la bandera ganadora del jugador.

'**

'********************************* ** **********************************************

Sub initplayenvironment()

player.FileName = ".\music\zhyu01.mid"

player.Play()

theplayflag = True

p>

'El juego es válido

Label1.Visible = False

'No se muestra la etiqueta de estado del juego

PictureBox1.Refresh()

'Borrar el contenido de Picturebox1

yuandian(130, 130)

'Llame a la función de dibujo para dibujar la posición donde La computadora actual va primero

Atenuar i, j, m, n como entero

Para i = 0 a 9

Para j = 0 a 9

table(i, j) = 0

Siguiente

Siguiente

'Inicialización del escritorio

Para i = 0 A 191

pflag(i) = Verdadero

p>

cflag(i) = Verdadero

Siguiente

'Bandera ganadora inicialización

table(4, 4) = 1

'Dado que configuramos la computadora para que vaya primero y apostamos 4,4, establecemos su valor en 1

''' ******** Inicializa la combinación ganadora***** ***

n = 0

Para i = 0 a 9

Para j = 0 a 5

Para m = 0 a 4

pwin(j m, i, n) = Verdadero

cwin(j m , i, n) = Verdadero

Siguiente

n = n 1

Siguiente

Siguiente

Para i = 0 a 9

Para j = 0 a 5

Para m = 0 a 4

pwin(i, j m, n) = Verdadero

cwin(i, j m, n) = Verdadero

Siguiente

n = n 1

Siguiente

Siguiente

Para i = 0 a 5

Para j = 0 a 5

Para m = 0 a 4

pwin(j m, i m, n) = Verdadero

cwin(j m, i m, n) = Verdadero

Siguiente

n = n 1

Siguiente

Siguiente

Para i = 0 a 5

Para j = 9 a 4 Paso -1

Para m = 0 a 4

pwin(j - m, i m, n) = Tru

e

cwin(j - m, i m, n) = Verdadero

Siguiente

n = n 1

Siguiente

Siguiente

''' ******** La combinación ganadora de inicialización finaliza*******

Para i = 0 a 191

Si pwin(4, 4, i) = Verdadero Entonces

pflag(i) = Falso

Finalizar si

Siguiente

'Dado que la computadora ha descargado 4,4 bits, necesitamos restablecer la bandera ganadora del jugador

End Sub

Cuatro, manejar eventos del mouse'**** * ************************************************** ***********************

'** Nombre del módulo: themedown

'**

'** Descripción: Esta función realiza principalmente las siguientes funciones:

'** 1. Determinar si la bandera del juego actual es válida.

'** 2. Convierte las coordenadas reales en coordenadas virtuales.

'** 3. Dibuja las piezas del jugador.

'** 4. Ejecute la función de ganar cheque.

'** 5. Ejecutar funciones de algoritmo informático.

'**

'********************************* ** **********************************************

Sub themousedown(ByVal x As Integer, ByVal y As Integer)

Si theplayflag = False Then

Salir de Sub

End If

'Comprueba si el estado del juego es válido

Dim i, j As Integer

Dim zhx, zhy As Integer

zhx = Int(( x - 10) / 30)

zhy = Int((y - 10) / 30)

Para i = 0 a 9

Para j = 0 A 9

p>

Si table(zhx, zhy) gt 0 Entonces

Salir de Sub

Fin

Siguiente

Siguiente

'Compruebe si la cuadrícula actualmente en la que hace clic con el mouse es válida

Atenuar mycolor como color

Atenuar como sistema .Drawing.Graphics

g = PictureBox1.CreateGraphics

mycolor = Color.White

Atenuar pincel1 como System.Drawing.Brush = Nuevo SolidBrush(mycolor)

g.FillEllipse(brush1, zhx * 30 10, zhy * 30 10, 30, 30)

'Dibuja las piezas del jugador

table(zhx, zhy ) = 2

Para i = 0 a 191

Si cwin(zhx, zhy, i) = Verdadero entonces

cflag(i) = Falso

End If

Siguiente

'Restablecer la bandera ganadora de la computadora

checkwin()

'Comprueba si el actual el jugador ganó

diannao()

'Algoritmo informático de llamada

End Sub 5. Algoritmo de verificación ganadora. '************************************************ * ***************************

'** Nombre del módulo: checkwin

' * *

'** Descripción: Este módulo realiza las siguientes funciones:

'** 1. Comprobar si hay empate.

'** 2. Comprueba si el ordenador gana.

'** 3. Comprueba si el jugador ganó.

'**

'********************************* ** **********************************************

Sub checkwin()

Atenuar i, j, k, m, n como entero

Atenuar ca como entero

Atenuar pa como entero

Dim cnormal como entero = 0

Para i = 0 a 191

Si cflag(i) = False Entonces

cnormal = cnormal 1

Fin si

Siguiente

Si cnormal = 190 Entonces

Etiqueta1.Visible = Verdadero

Etiqueta1 .Text = "Empate, ¡comienza de nuevo!"

PictureBox1.Refresh()

theplayflag = False

Salir Sub

Fin Si

'Establecer reglas de sorteo

Para i = 0 a 191

Si cflag(i) = True Entonces

ca = 0

Para j = 0 a 9

Para k = 0 a 9

Si tabla(j, k) = 1 Entonces

Si cwin(j, k, i) = True Entonces

ca = ca 1

Finalizar si

Finalizar si

Siguiente

Siguiente

Si ca = 5 Entonces

Label1.Visible = True

Label1.Text = "La computadora ganó, comience de nuevo "

PictureBox1.Refresh()

theplayflag = False

Salir Sub

Finalizar si

Finalizar si

Siguiente

'Comprueba si la computadora gana

For i = 0 To 191

Si pflag(i) = True Entonces

p>

pa = 0

Para j = 0 a 9

Para k = 0 a 9

Si tabla( j, k) = 2 Entonces

Si pwin(j, k, i) = Verdadero Entonces

pa = pa 1

Fin si

Finalizar si

Siguiente

Siguiente

Si pa = 5 Entonces

Etiqueta1.Visible = Verdadero

Label1.Text = "El jugador ganó, por favor comienza de nuevo"

PictureBox1.Refresh()

theplayflag = False

Salir Sub

Finalizar si

Finalizar si

Siguiente

'Comprueba si el jugador ganó

Fin Sub 6. Algoritmo informático'*************************************** ****************************************

'** Nombre del módulo: diannao

'**

'** Descripción: Este programa realiza principalmente las siguientes funciones:

'** 1. Inicializar el sistema de asignación .

'** 2. Algoritmo de mejora de asignaciones.

'** 3. Calcula las mejores posiciones de ataque para el ordenador y el jugador.

'** 4. Compara las mejores posiciones de ataque de la computadora y del jugador y determina la mejor estrategia de la computadora.

'** 5. Ejecute la función de ganar cheque.

'**

'********************************* ************************************************* Sub diannao()

Atenuar i, j, k, m, n como entero

Atenuar dc como entero

Atenuar cab como entero

Dim pab como entero

Para i = 0 a 9

Para j = 0 a 9

pscore(i, j) = 0

cscore (i, j) = 0

Siguiente

Siguiente

'Inicializar matriz de asignación

''' ** **** **Algoritmo mejorado por computadora********

Para i = 0 a 191

Si cflag(i) = True Entonces

cab = 0

Para j = 0 a 9

Para k = 0 a 9

Si tabla(j, k) = 1 Entonces

Si cwin(j, k, i) = True Entonces

cab = cab 1

Fin si

Fin si

Siguiente

Siguiente

Seleccione Caso cab

Caso 3

Formulario m = 0 a 9

Para n = 0 a 9

Si table(m, n) = 0 entonces

Si cwin(m, n, i) = True entonces

cscore(m, n) = cscore(m, n) 5

Finalizar si

Finalizar si

Siguiente

Siguiente

Caso 4

Para m = 0 a 9

Para n = 0 a 9

Si tabla(m, n) = 0 Entonces

Si cwin(m, n, i) = Verdadero entonces

yuandian(m * 30 10, n * 30 10)

table(m, n ) = 1

Para dc = 0 a 191

Si pwin(m, n, dc) = True Entonces

pflag(dc) = False

checkwin()

Salir Sub

Finalizar si

Siguiente

Finalizar si

Finalizar si

p>

Siguiente

Siguiente

Finalizar Seleccionar

Finalizar si

Siguiente

Para i = 0 a 191

Si pflag(i) = Verdadero entonces

pab = 0

Para

j = 0 a 9

Para k = 0 a 9

Si table(j, k) = 2 Entonces

Si pwin(j, k, i ) = Verdadero Entonces

pab = pab 1

Finalizar si

Finalizar si

Siguiente

Siguiente

Seleccione el caso pab

Caso 3

Para m = 0 a 9

Para n = 0 a 9

Si tabla(m, n) = 0 Entonces

Si pwin(m, n, i) = Verdadero Entonces

pscore(m, n) = pscore(m, n) 30

Finalizar si

Finalizar si

Siguiente

Siguiente

Caso 4

Para m = 0 a 9

Para n = 0 a 9

Si tabla(m, n) = 0 Entonces

Si pwin(m, n , i) = Verdadero Entonces

yuandian(m * 30 10, n * 30 10)

table(m, n) = 1

Para dc = 0 a 191

Si pwin(m, n, dc) = True Entonces

pflag(dc) = False

checkwin()

Salir Sub

Finalizar si

Siguiente

Finalizar si

Finalizar si

Siguiente

Siguiente

Fin Seleccionar

Finalizar si

Siguiente

''' ******** Computadora Fin del algoritmo mejorado ******** ' ******** Sistema de asignación ********

Para i = 0 a 191

Si cflag(i) = True Entonces

Para j = 0 a 9

Para k = 0 a 9

Si table(j, k) = 0 Entonces

Si cwin(j, k, i) = True Entonces

Para m = 0 a 9

Para n = 0 a 9

Si tabla(m, n) = 1 Entonces

Si cwin(m, n, i) = Verdadero Entonces

cscore(j, k) = cscore(j , k) 1

Fin si

Fin si

Siguiente

Siguiente

Fin si

Finalizar si

Siguiente

Siguiente

Finalizar si

Siguiente

Para i = 0 A 191

Si pflag(i) =

Verdadero Entonces

Para j = 0 a 9

Para k = 0 a 9

Si tabla(j, k) = 0 Entonces

Si pwin(j, k, i) = True Entonces

Para m = 0 a 9

Para n = 0 a 9

Si table( m, n) = 2 Entonces

Si pwin(m, n, i) = Verdadero Entonces

pscore(j, k) = pscore(j, k) 1

Finalizar si

Finalizar si

Siguiente

Siguiente

Finalizar si

Finalizar si

Siguiente

Siguiente

Finalizar si

Siguiente

''' ******** Sistema de fin de tarea********

''' ******** Algoritmo de comparación de puntuación********

Dim a , b, c, d Como número entero

Dim cs como número entero = 0

Dim ps como número entero = 0

Para i = 0 a 9

Para j = 0 a 9

Si cscore(i, j) gt entonces

cs = cscore(i, j)

a = i

b = j

Finalizar si

Siguiente

Siguiente

Para i = 0 A 9

Para j = 0 a 9

Si pscore(i, j) gt; ps Entonces

ps = pscore(i, j)

c = i

d = j

Finalizar si

Siguiente

Siguiente

Si cs gt; ps Entonces

yuandian(a * 30 10, b * 30 10)

tabla(a, b) = 1

Para i = 0 Hasta 191

Si pwin(a, b, i) = True Entonces

pflag(i) = False

Fin

Siguiente

Else

yuandian(c * 30 10, d * 30 10)

table(c, d) = 1

Para i = 0 a 191

Si pwin(c, d, i) = True Entonces

pflag(i) = False

Fin si

Siguiente

End If

''' ******** Fin del algoritmo de comparación de puntuación*********

checkwin()

End Sub 7. Dibujar piezas de ajedrez'************************

************************************************** * *******

'** Nombre del módulo: yuandian

'**

'** Descripción: Esta función realiza principalmente el procesamiento del sorteo de piezas de ajedrez por computadora.

'**

'********************************* ** ********************************************** Sub yuandian( ByVal x As Integer, ByVal y As Integer)

Atenuar mycolor Como Color

Atenuar Como System.Drawing.Graphics

g = PictureBox1.CreateGraphics

Dim zhx, zhy como entero

zhx = Int((x - 10) / 30)

zhy = Int((y - 10) / 30)

mycolor = Color.Black

Atenuar pincel1 como System.Drawing.Brush = Nuevo SolidBrush(mycolor)

g.FillEllipse(brush1, zhx * 30 10, zhy * 30 10, 30, 30)

End Sub