Aprende a crear un juego interactivo de tres en raya (tic-tac-toe) en Visual Basic 6.0 para dos jugadores. Este proyecto incluye validación de nombres, lógica de verificación de ganador, sistema de puntuación y una interfaz gráfica completa con botones controles.
Explicación del Funcionamiento
1️⃣ Validación de Nombres de Jugadores
Restricciones de Entrada
Al iniciar el programa, los jugadores deben ingresar sus nombres. El sistema valida que solo se permitan letras (mayúsculas o minúsculas) y la letra Ñ. No se aceptan números ni caracteres especiales.
Código de Validación:
' TextBox donde ingresaremos el nombre del primer jugador Private Sub playerOneInput_KeyPress(KeyAscii As Integer) KeyAscii = Verificar_Tecla(KeyAscii) End Sub ' TextBox donde ingresaremos el nombre del segundo jugador Private Sub playerTwoInput_KeyPress(KeyAscii As Integer) KeyAscii = Verificar_Tecla(KeyAscii) End Sub
Función de Verificación:
' Verificamos que tecla se ha pulsado Function Verificar_Tecla(Tecla_Presionada) Dim Teclas As String ' Definimos los caracteres permitidos que podremos ingresar al textbox Teclas = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz" & Chr(vbKeyBack) ' Si el carácter es permitido entonces se mostrará en el textbox caso contrario no If InStr(1, Teclas, Chr(Tecla_Presionada)) Then Verificar_Tecla = Tecla_Presionada Else Verificar_Tecla = 0 End If End Function
2️⃣ Proceso de Inicio del Juego
Pasos Iniciales
- Ingresar nombres: Ambos jugadores escriben sus nombres en los campos de texto
- Validar nombres: Presionar el botón "VALIDAR" para confirmar que ambos nombres fueron ingresados
- Determinar turno: Al presionar "JUGAR", se selecciona aleatoriamente quién comienza
- Mensaje informativo: Se muestra quién empieza la partida mediante un cuadro de diálogo
- Comenzar juego: El tablero se habilita y los jugadores pueden hacer clic en las celdas
3️⃣ Lógica del Tablero (Celdas con Botones)
Funcionamiento de las Celdas
El tablero está formado por 9 botones (índices 0 a 8) organizados en una matriz 3x3. Cada celda alterna entre "O" y "X" mediante una variable de control llamada X (que funciona como switch).
Código de una Celda:
Private Sub cell_Click(Index As Integer) ' X es un switch: 0 = Jugador 1 (O), 1 = Jugador 2 (X) If (X = 0) Then ' Mostrar O en la celda cell(Index).Caption = "O" cell(Index).Enabled = False ' Desactivar la celda X = 1 ' Cambiar de turno Else ' Mostrar X en la celda cell(Index).Caption = "X" cell(Index).Enabled = False ' Desactivar la celda X = 0 ' Cambiar de turno End If ' Verificar si hay ganador verify End Sub
Variable X (Switch):
- X = 0: Turno del Jugador 1 (coloca "O")
- X = 1: Turno del Jugador 2 (coloca "X")
4️⃣ Verificación de Ganador
Lógica de Comprobación
Se verifican 8 combinaciones ganadoras: 3 filas, 3 columnas y 2 diagonales. El array results almacena los índices de las celdas para cada combinación.
Inicialización del Array de Combinaciones:
' Filas results(0, 0) = 0: results(0, 1) = 1: results(0, 2) = 2 ' Fila 1 results(1, 0) = 3: results(1, 1) = 4: results(1, 2) = 5 ' Fila 2 results(2, 0) = 6: results(2, 1) = 7: results(2, 2) = 8 ' Fila 3 ' Columnas results(3, 0) = 0: results(3, 1) = 3: results(3, 2) = 6 ' Columna 1 results(4, 0) = 1: results(4, 1) = 4: results(4, 2) = 7 ' Columna 2 results(5, 0) = 2: results(5, 1) = 5: results(5, 2) = 8 ' Columna 3 ' Diagonales results(6, 0) = 0: results(6, 1) = 4: results(6, 2) = 8 ' Diagonal principal results(7, 0) = 2: results(7, 1) = 4: results(7, 2) = 6 ' Diagonal inversa
Función de Verificación:
Private Sub verify() ' Recorrer las 8 combinaciones ganadoras For row = 0 To 7 ' Verificar si el Jugador 1 (O) ganó If cell(results(row, 0)).Caption = "O" And _ cell(results(row, 1)).Caption = "O" And _ cell(results(row, 2)).Caption = "O" Then infoLabelp1 = infoLabelp1 + 1 infoLabel.Caption = playerOneName & " ES EL GANADOR" clear ' Verificar si el Jugador 2 (X) ganó ElseIf cell(results(row, 0)).Caption = "X" And _ cell(results(row, 1)).Caption = "X" And _ cell(results(row, 2)).Caption = "X" Then infoLabelp2 = infoLabelp2 + 1 infoLabel.Caption = playerTwoName & " ES EL GANADOR" clear End If Next ' Verificar si es empate (todas las celdas llenas) If cell(0).Caption <> "" And cell(1).Caption <> "" And _ cell(2).Caption <> "" And cell(3).Caption <> "" And _ cell(4).Caption <> "" And cell(5).Caption <> "" And _ cell(6).Caption <> "" And cell(7).Caption <> "" And _ cell(8).Caption <> "" Then infoLabel.Caption = "ES UN EMPATE" clear End If End Sub
5️⃣ Gestión de Botones de Control
Funciones de los Botones
| Botón | Función | Acción |
|---|---|---|
| VALIDAR | Validar nombres | Verifica que ambos nombres estén completos y habilita el botón JUGAR |
| JUGAR | Iniciar partida | Determina aleatoriamente quién comienza y habilita el tablero |
| VOLVER A JUGAR | Nueva partida | Limpia el tablero mantiene los nombres y puntuación. Comienza nueva ronda |
| REINICIAR | Reset completo | Borra nombres, reinicia marcador a 0-0 y limpia tablero |
| SALIR | Cerrar programa | Cierra la aplicación completamente |
6️⃣ Función Auxiliar gameCells()
Gestión Centralizada del Tablero
Esta función maneja el estado de todas las celdas con un único parámetro:
Function gameCells(condition) Dim i As Integer ' Desactivar todas las celdas If (condition = "disable") Then For i = 0 To cell.Count - 1 cell(i).Enabled = False Next ' Activar todas las celdas ElseIf (condition = "enable") Then For i = 0 To cell.Count - 1 cell(i).Enabled = True Next ' Limpiar todas las celdas ElseIf (condition = "clear") Then For i = 0 To cell.Count - 1 cell(i).Caption = "" Next End If End Function
7️⃣ Sistema de Puntuación
Seguimiento de Victorias
El sistema mantiene un registro de las victorias mediante variables:
- infoLabelp1: Contador de victorias del Jugador 1
- infoLabelp2: Contador de victorias del Jugador 2
- Visualización: Se muestra en una etiqueta con el formato "Nombre: Victorias"
- Actualización: Se incrementa cada vez que el jugador gana
- Reinicio: Se resetea a 0 cuando se presiona el botón REINICIAR
Actualizar Información de Puntuación:
Private Sub mensaje() info.Caption = playerOneName & ": " & infoLabelp1 & vbCrLf & _ playerTwoName & ": " & infoLabelp2 End Sub
Estructura del Tablero 3x3
| 0 | 1 | 2 |
| 3 | 4 | 5 |
| 6 | 7 | 8 |
Descarga los Archivos Completos
Accede al código fuente completo, formulario y todos los recursos necesarios para compilar y ejecutar el juego:
✅ Conceptos Aprendidos
Con este proyecto dominas: manejo de controles en Visual Basic, validación de entrada de usuario, lógica de juegos, arrays multidimensionales, sistemas de puntuación, interfaces gráficas interactivas y control de flujo avanzado. Estas habilidades son transferibles a otros lenguajes y tipos de aplicaciones.
Publicar un comentario
¡Hola! Nos alegra mucho que hayas llegado hasta aquí y que estés leyendo este artículo en Edeptec.
Este formulario es un espacio abierto para ti: puedes dejar un comentario con tus dudas, sugerencias, experiencias o simplemente tu opinión sobre el tema tratado.
» ¿Te resultó útil la información?
» ¿Tienes alguna experiencia personal que quieras compartir?
» ¿Se te ocurre algún tema que te gustaría ver en próximos artículos?
Recuerda que este espacio es para aprender y compartir, por eso te animamos a participar de manera respetuosa y constructiva. Tus comentarios pueden ayudar a otros lectores que están en el mismo camino, ya sea en electrónica, programación, deportes o tecnología.
¡Gracias por ser parte de esta comunidad de aprendizaje! Tu participación es lo que hace crecer este proyecto.