▷ Juego de tres en raya en Visual Basic 6.0 - jugador vs jugador.

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

  1. Ingresar nombres: Ambos jugadores escriben sus nombres en los campos de texto
  2. Validar nombres: Presionar el botón "VALIDAR" para confirmar que ambos nombres fueron ingresados
  3. Determinar turno: Al presionar "JUGAR", se selecciona aleatoriamente quién comienza
  4. Mensaje informativo: Se muestra quién empieza la partida mediante un cuadro de diálogo
  5. 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.

💡 Posibles Mejoras: Agrega dificultad de IA para jugar contra la computadora, temporizador de movidas, sonidos de victoria/derrota, diferentes temas visuales, historial de partidas, o la opción de jugar en red.

0/Deja un comentario/Comentarios

¡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.