Hace un tiempo en el curso empezamos con este proyecto y lo estamos agrandando cada dia.
Voy a tratar de ir mostrando de a partes y dando consejos para construir un juego de este tipo en CONSOLA y dejando bien abierto para proximas cosas que tengan ganas de ponerle.
1. Uso de Constantes
Visual Basic:
-
Const FILAS As Integer = 10
-
Const COLUMNAS As Integer = 10
-
Const CANT_BARCOS As Integer = 4
Siempre! Siempre! Se usan constantes para este tipo de cosas, es complicado acostumbrarse a programar "generico" pero tiene que hacerse, que pasa si cambia el tamaño del tablero? Que pasa si queremos aumentar el numero de barcos en el juego? Tendriamos que cambiar todos los numeros en el codigo, seria un desastre.
El uso de constantes evita todo tipo de problemas y el uso de las palabras hace más clara la lectura del codigo.
2. El Procedimiento "Main()" limpio.
Visual Basic:
-
Sub Main()
-
Dim opcion As Integer
-
Dim Pantalla As New ClearConsole
-
-
Titulo()
-
Console.WriteLine("1. Player 1 Vs Player 2")
-
Console.WriteLine("2. Player 1 Vs CPU")
-
Do
-
opcion = Console.ReadLine()
-
-
If (opcion> 2) Then
-
Console.WriteLine("La opcion no esta disponible")
-
End If
-
Loop While (opcion> 2)
-
-
Select Case opcion
-
Case 1
-
Pantalla.Clear()
-
Player1vs2()
-
Case 2
-
Pantalla.Clear()
-
Player1vsCPU()
-
End Select
-
End Sub
El Main debe contener el menor numero de instrucciones posibles, cuanto más limpio mejor, no tiene porque pero si es muy recomendable.
3. Procedimientos genericos util para cualquier cantidad de jugadores
Visual Basic:
-
Sub Player1vs2()
-
' Player 1 VS Player 2
-
Dim Jugador As Short = 1
-
Dim Tablero_uno(FILAS, COLUMNAS), Tablero_dos(FILAS, COLUMNAS) As Short
-
Dim Tablero_uno_aux(FILAS, COLUMNAS), Tablero_dos_aux(FILAS, COLUMNAS) As Short
-
Dim num_barcos_uno, num_barcos_dos, intento As Integer
-
Dim x, y, xx, yy, i, j As Integer
-
Dim Pantalla As New ClearConsole
-
-
cargaBarcos(Jugador, Tablero_uno)
-
Jugador = 2
-
cargaBarcos(Jugador, Tablero_dos)
-
-
' Comenzamos a Jugar
-
intento = 1
-
Jugador = 1
-
-
num_barcos_uno = CANT_BARCOS
-
num_barcos_dos = CANT_BARCOS
-
-
Do
-
Pantalla.Clear()
-
Titulo()
-
Console.WriteLine("Empieza el juego")
-
Console.WriteLine("Jugador {0} - Intente hundir un barco:", Jugador)
-
Console.WriteLine("Barco {0} - FILA:", intento)
-
Do
-
Do
-
xx = Console.ReadLine()
-
If (xx> FILAS) Then
-
Console.WriteLine("El numero es Mayor al numero de FILAS")
-
End If
-
Loop While (xx> FILAS)
-
Console.WriteLine("Barco {0} - COLUMNA:", intento)
-
Do
-
yy = Console.ReadLine()
-
If (yy> COLUMNAS) Then
-
Console.WriteLine("El numero es Mayor al numero de COLUMNAS")
-
End If
-
Loop While (yy> COLUMNAS)
-
-
If ((Jugador = 1 And Tablero_uno_aux(xx, yy) = 1) Or (Jugador = 2 And Tablero_dos_aux(xx, y) = 1)) Then
-
Console.WriteLine("La Posicion {0},{1} Esta ocupada", xx, yy)
-
End If
-
Loop While ((Jugador = 1 And Tablero_uno_aux(xx, yy) = 1) Or (Jugador = 2 And Tablero_dos_aux(xx, y) = 1))
-
-
If (Jugador = 1) Then
-
If Tablero_dos(xx, yy) = 1 Then
-
Console.WriteLine("Has Hundido el Barco ({0},{1}) !", xx, yy)
-
Tablero_dos_aux(xx, yy) = 2
-
num_barcos_dos -= 1
-
Jugador = 2
-
Else
-
Console.WriteLine("Agua en la posicion ({0},{1})", xx, yy)
-
Tablero_dos_aux(xx, yy) = 1
-
Jugador = 2
-
End If
-
Else
-
If Tablero_uno(xx, yy) = 1 Then
-
Console.WriteLine("Has Hundido el Barco ({0},{1}) !", xx, yy)
-
Tablero_uno_aux(xx, yy) = 2
-
num_barcos_uno -= 1
-
Jugador = 1
-
Else
-
Console.WriteLine("Agua en la posicion ({0},{1})", xx, yy)
-
Tablero_uno_aux(xx, yy) = 1
-
Jugador = 1
-
End If
-
End If
-
Console.ReadLine()
-
Loop While (num_barcos_uno <> 0 Or num_barcos_dos <> 0)
-
End Sub
Los procedimientos deben ser genericos SIEMPRE! no podemos estar copiando y pegando codigo cada vez que necesitemos insertar un jugador nuevo por ejemplo.
Dejemoslo por acá... Esperen la 2° Parte :D.