Posted on 29-06-2008
Filed Under (Desarrollo, VB.NET) by Programlocura

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:
  1. Const FILAS As Integer = 10
  2. Const COLUMNAS As Integer = 10
  3. 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:
  1. Sub Main()
  2.         Dim opcion As Integer
  3.         Dim Pantalla As New ClearConsole
  4.  
  5.         Titulo()
  6.         Console.WriteLine("1. Player 1 Vs Player 2")
  7.         Console.WriteLine("2. Player 1 Vs CPU")
  8.         Do
  9.             opcion = Console.ReadLine()
  10.  
  11.             If (opcion> 2) Then
  12.                 Console.WriteLine("La opcion no esta disponible")
  13.             End If
  14.         Loop While (opcion> 2)
  15.  
  16.         Select Case opcion
  17.             Case 1
  18.                 Pantalla.Clear()
  19.                 Player1vs2()
  20.             Case 2
  21.                 Pantalla.Clear()
  22.                 Player1vsCPU()
  23.         End Select
  24.     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:
  1. Sub Player1vs2()
  2.         ' Player 1 VS Player 2
  3.         Dim Jugador As Short = 1
  4.         Dim Tablero_uno(FILAS, COLUMNAS), Tablero_dos(FILAS, COLUMNAS) As Short
  5.         Dim Tablero_uno_aux(FILAS, COLUMNAS), Tablero_dos_aux(FILAS, COLUMNAS) As Short
  6.         Dim num_barcos_uno, num_barcos_dos, intento As Integer
  7.         Dim x, y, xx, yy, i, j As Integer
  8.         Dim Pantalla As New ClearConsole
  9.  
  10.         cargaBarcos(Jugador, Tablero_uno)
  11.         Jugador = 2
  12.         cargaBarcos(Jugador, Tablero_dos)
  13.  
  14.         ' Comenzamos a Jugar
  15.         intento = 1
  16.         Jugador = 1
  17.  
  18.         num_barcos_uno = CANT_BARCOS
  19.         num_barcos_dos = CANT_BARCOS
  20.  
  21.             Do
  22.                 Pantalla.Clear()
  23.                 Titulo()
  24.                 Console.WriteLine("Empieza el juego")
  25.                 Console.WriteLine("Jugador {0} - Intente hundir un barco:", Jugador)
  26.                 Console.WriteLine("Barco {0} - FILA:", intento)
  27.                 Do
  28.                     Do
  29.                         xx = Console.ReadLine()
  30.                         If (xx> FILAS) Then
  31.                             Console.WriteLine("El numero es Mayor al numero de FILAS")
  32.                         End If
  33.                     Loop While (xx> FILAS)
  34.                     Console.WriteLine("Barco {0} - COLUMNA:", intento)
  35.                     Do
  36.                         yy = Console.ReadLine()
  37.                         If (yy> COLUMNAS) Then
  38.                             Console.WriteLine("El numero es Mayor al numero de COLUMNAS")
  39.                         End If
  40.                     Loop While (yy> COLUMNAS)
  41.  
  42.                     If ((Jugador = 1 And Tablero_uno_aux(xx, yy) = 1) Or (Jugador = 2 And Tablero_dos_aux(xx, y) = 1)) Then
  43.                         Console.WriteLine("La Posicion {0},{1} Esta ocupada", xx, yy)
  44.                     End If
  45.                 Loop While ((Jugador = 1 And Tablero_uno_aux(xx, yy) = 1) Or (Jugador = 2 And Tablero_dos_aux(xx, y) = 1))
  46.  
  47.                 If (Jugador = 1) Then
  48.                     If Tablero_dos(xx, yy) = 1 Then
  49.                         Console.WriteLine("Has Hundido el Barco ({0},{1}) !", xx, yy)
  50.                         Tablero_dos_aux(xx, yy) = 2
  51.                         num_barcos_dos -= 1
  52.                         Jugador = 2
  53.                     Else
  54.                         Console.WriteLine("Agua en la posicion ({0},{1})", xx, yy)
  55.                         Tablero_dos_aux(xx, yy) = 1
  56.                         Jugador = 2
  57.                     End If
  58.                 Else
  59.                     If Tablero_uno(xx, yy) = 1 Then
  60.                         Console.WriteLine("Has Hundido el Barco ({0},{1}) !", xx, yy)
  61.                         Tablero_uno_aux(xx, yy) = 2
  62.                         num_barcos_uno -= 1
  63.                         Jugador = 1
  64.                     Else
  65.                         Console.WriteLine("Agua en la posicion ({0},{1})", xx, yy)
  66.                         Tablero_uno_aux(xx, yy) = 1
  67.                         Jugador = 1
  68.                     End If
  69.                 End If
  70.                 Console.ReadLine()
  71.         Loop While (num_barcos_uno <> 0 Or num_barcos_dos <> 0)
  72.     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.

    Read More   
Post a Comment
Name:
Email:
Website:
Comments: