Posted on 17-09-2008
Filed Under (Desarrollo, Game Development, VB.NET) by Programlocura
Visual Basic:
  1. Module Module1
  2.  
  3.     Sub Main()
  4.  
  5.         Jugar()
  6.  
  7.     End Sub
  8.  
  9.     Sub Titulo()
  10.         Console.WriteLine("---------------------------------------")
  11.         Console.WriteLine("Mosqueta")
  12.         Console.WriteLine("---------------------------------------")
  13.         Console.WriteLine()
  14.     End Sub
  15.  
  16.     Sub Tablero()
  17.         Console.WriteLine("1 2 3")
  18.         Console.WriteLine("O O O")
  19.     End Sub
  20.  
  21.     Sub Jugar()
  22.         Dim ball, opcion, vaso As Short
  23.         Dim veces_ganadas As Short = 0
  24.         Dim dinero As Short = 500
  25.         Dim apuesta As Short
  26.         Dim Pantalla As New ClearConsole
  27.  
  28.         Do
  29.             Pantalla.Clear()
  30.             Titulo()
  31.             Tablero()
  32.             Console.WriteLine()
  33.             Console.WriteLine("Veces Ganadas: " + CStr(veces_ganadas))
  34.             Console.WriteLine("Usted tiene: " + CStr(dinero) + " $ de Saldo")
  35.             Do
  36.                 Console.Write("Cuanto desea apostar? $")
  37.                 apuesta = Console.ReadLine()
  38.  
  39.                 If (apuesta> dinero) Then
  40.                     Console.WriteLine("No puedes apostar mas de lo que tienes")
  41.                 ElseIf (apuesta = 0) Then
  42.                     Console.WriteLine("No puedes apostar 0")
  43.                 End If
  44.             Loop While (apuesta> dinero Or apuesta = 0)
  45.  
  46.             Do
  47.                 Console.Write("Seleccione una opcion: ")
  48.                 opcion = Console.ReadLine()
  49.  
  50.                 If (opcion> 3) Then
  51.                     Console.WriteLine("Ingrese una opcion Valida")
  52.                 End If
  53.             Loop While (opcion> 3)
  54.  
  55.             Randomize()
  56.             vaso = Rnd() * 3 + 1
  57.  
  58.             If (opcion = vaso And veces_ganadas <= 3) Then
  59.                 Console.WriteLine("Ganaste!")
  60.                 Console.WriteLine("Has recibido: " + CStr((apuesta * 2)) + " $")
  61.                 dinero += apuesta * 2
  62.                 veces_ganadas += 1
  63.             ElseIf (opcion = vaso And veces_ganadas> 3) Then
  64.                 Console.WriteLine("Perdiste! 3 Veces Seguidas no podia ser!")
  65.                 Console.WriteLine("Te han quitado: " + CStr(apuesta * 2) + " $")
  66.                 dinero -= apuesta * 2
  67.                 If (veces_ganadas> 0) Then
  68.                     veces_ganadas -= 1
  69.                 End If
  70.             Else
  71.                 Console.WriteLine("Perdiste!")
  72.                 Console.WriteLine("Te han quitado: " + CStr(apuesta) + " $")
  73.                 dinero -= apuesta
  74.                 If (veces_ganadas> 0) Then
  75.                     veces_ganadas -= 1
  76.                 End If
  77.             End If
  78.             Console.ReadLine()
  79.         Loop While (dinero>= 0)
  80.     End Sub
  81. End Module

Proximamente la explicacion :). No falten :P

(8) Comments    Read More   
Posted on 29-07-2008
Filed Under (Personal) by Programlocura

Buenas, este post es corto porque quiero decir que sigo vivo a pesar de que no estoy posteando asiduamente!

Se me está complicando, prometo completar el código de la "Batalla Naval" (Para VB.NET) y luego seguir con los tutoriales de FLASH y PHP.

No me extrañen xD
Saludos.

(0) Comments    Read More   
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.

(0) Comments    Read More   
Posted on 10-06-2008
Filed Under (Desarrollo, VB.NET, Varios) by Programlocura

Hace tiempo que no posteo nada interesante asi que vuelvo con este mini tutorial sobre los Procedimientos y Funciones en Visual .NET. Ya saben, cualquier correción pueden dejarla en los comentarios.

Recuerden siempre que pueden usar el codigo para el limpiado de pantalla que vimos en este Post

Procedimientos
Llamaremos procedimientos a una serie de pasos (identificados con un nombre) a realizar de forma "general", y que no devuelve ningun tipo de valor.

Funciones
Llamaremos funciones a una serie de pasos (identificados con un nombre) a realizar de forma "general" (generica) y que devuelve un valor.

Si bien esta definición no es exacta y carece de tecnisismo podemos identificar claramente la diferencia entre el procedimiento y la función. Ustedes dirán: "Pero... Podemos hacer que el procedimiento devuelva un valor?". La respuesta es "NO", VB no permite que los procedimientos devuelvan valores, si lo permite con las funciones.

Como identificar los unos de los otros
Procedimiento:

Visual Basic:
  1. Sub Procedimiento(ByVal parametros)
  2.         'Instrucciones del Procedimiento
  3.     End Sub

Función:

Visual Basic:
  1. Function Funcion(ByVal parametros)
  2.         'Instrucciones de la función
  3.         Return True
  4.     End Function

Como ven no son nada dificiles, la sintaxis es practicamente la misma, pero ahora veremos para que sirven cada una de ellas (Un detalle, las funciones tanto como los parametros pueden carecer de parametros, no son obligatorios).

Utilización
Sin ir más lejos en el Curso estamos realizando una "Batalla Naval" (Juego en el cual 2 jugadores colocan barcos en un tablero y tratan de hundirselos mutuamente) y se esta realizando bastante lento, pero es bueno saber de ante mano como hacer que las tareas se faciliten, por ejemplo, podriamos buscar la posicion de un barco en una matriz con una función:

Visual Basic:
  1. Function buscaBarco(ByVal tablero)
  2.         Dim i, j As Integer
  3.         For i = 0 To FILAS
  4.             For j = 0 To COLUMNAS
  5.                 If (tablero(i, j) = 1) Then
  6.                     Return True
  7.                 Else
  8.                     Return False
  9.                 End If
  10.             Next
  11.         Next
  12.     End Function

Veamos que hace la función.
Primero le asignamos un nombre, en este "buscaBarco" y le pasamos como parametro el Tablero en el que lo buscaremos (Tablero será una matriz obviamente). Recorriendo el tablero desde la posición 0 hasta la cantidad de FILAS y de COLUMNAS que haya, entonces, si en esa posición hay un 1 (Previamente la matriz se llena de 0's y colocamos un 1 donde quieramos que esté un barco) devuelve TRUE y sino, devuelve FALSE. Y eso es lo que lo hace una función, devuelve TRUE si hay coincidencia y FALSE si no la hay, es especialmente util para este tipo de cosas.

En cambio un procedimiento sirve para algo que sabemos que no devolverá ningun valor, por ejemplo para rellenar los barcos de un jugador (El codigo a continuación esta resumido y en forma de SEUDO CODIGO)

Visual Basic:
  1. Sub rellenaBarcos (ByVal Jugador)
  2. ' Lo colocaré como SEUDO CODIGO
  3. ' PEDIMOS UNA POSICION PARA EL BARCO 1
  4. ' Verificamos que esta sea correcta
  5. ' Insertamos un 1 en la posición indicada por el usuario si es correcta y si ya no esta ocupada
  6. End Sub

Como ven lo unico que hace es rellenar los barcos, por eso no necesitamos que devuelva ningun tipo de valor, de esta forma podemos evitarnos estar pensando todo para los 2 jugadores... De esta forma pasamos la variable como Jugador = 1 o Jugador = 2 y de esa forma se podria rellenar el Tablero 1 y el 2.

(0) Comments    Read More   
Posted on 20-05-2008
Filed Under (VB.NET) by Programlocura

Se me fué a largo, pero subo el EJEMPLO terminado de la "Adivinanza de numeros en cierto numero de intentos"
Es el que hice hoy en el curso pero que mejoré un poco ahora. Esta hecho en VB.NET como pueden ver. Cualquier consulta será bienvenida.

Sobre el Codigo

A pesar de que sigue siendo muy basico lo que estoy haciendo, aqui agregué algunas cosas que no dimos en el curso aún (por lo tanto el que hace el curso y lo leé aun no las entiende). Y por cierto, la clase usada para limpiar la pantalla es la misma que utilizé en el Post de la Calculadora.

Visual Basic:
  1. Dim num, num_player, intentos, intentos2 As Integer
  2.         Dim player As Short = 1
  3.         Dim jugadas As Short = 1
  4.         Dim Consola As New ClearConsole
  5.  
  6.         ImprimeMenu()
  7.  
  8.         Do
  9.             Do
  10.                 Console.WriteLine("Jugador {0} - Ingrese el Numero a Adivinar: ", player)
  11.                 num = Console.ReadLine()
  12.  
  13.                 If (num <1 Or num> 100) Then
  14.                     Console.WriteLine("Ingrese un numero del 1 al 100")
  15.                 Else
  16.                     Consola.Clear()
  17.                     ImprimeMenu()
  18.  
  19.                     If (player = 2) Then
  20.                         player = 1
  21.                     Else
  22.                         player = 2
  23.                     End If
  24.  
  25.                     Exit Do
  26.                 End If
  27.  
  28.             Loop While (num <1 Or num> 100)
  29.  
  30.             Do
  31.                 Console.WriteLine("Jugador {0} - Intente adivinar el numero del 1 al 100: ", player)
  32.                 num_player = Console.ReadLine()
  33.  
  34.                 If (player = 1) Then
  35.                     intentos += 1
  36.                 Else
  37.                     intentos2 += 1
  38.                 End If
  39.  
  40.                 If (num_player = num) Then
  41.                     Consola.Clear()
  42.                     ImprimeMenu()
  43.                     Console.WriteLine("Ganaste!")
  44.  
  45.                     If (intentos = 1 And player = 1) Then
  46.                         Console.WriteLine("Y lo hiciste en: 1 intento! Excelente!", intentos)
  47.                     ElseIf (intentos2 = 1 And player = 2) Then
  48.                         Console.WriteLine("Y lo hiciste en: 1 intento! Excelente!", intentos2)
  49.                     Else
  50.                         If (player = 1) Then
  51.                             Console.WriteLine("Y lo hiciste en: {0} intentos", intentos)
  52.                         Else
  53.                             Console.WriteLine("Y lo hiciste en: {0} intentos", intentos2)
  54.                         End If
  55.                     End If
  56.  
  57.                     jugadas += 1
  58.  
  59.                 ElseIf (num_player> num) Then
  60.                     Console.WriteLine("-----------------------------------------------------")
  61.                     Console.WriteLine("El numero seleccionado es MAYOR al numero a Adivinar")
  62.                     Console.WriteLine("-----------------------------------------------------")
  63.                 Else
  64.                     Console.WriteLine("-----------------------------------------------------")
  65.                     Console.WriteLine("El numero seleccionado es MENOR al numero a Adivinar")
  66.                     Console.WriteLine("-----------------------------------------------------")
  67.                 End If
  68.             Loop While (num_player <> num)
  69.             Console.ReadLine()
  70.             ' ---------------
  71.             ' Player = false
  72.         Loop While (jugadas <3)
  73.  
  74.         If (jugadas = 3) Then
  75.             Consola.Clear()
  76.             Console.WriteLine("-----------------------------")
  77.             Console.WriteLine("RESULTADOS FINALES")
  78.             Console.WriteLine("-----------------------------")
  79.             If (intentos <intentos2) Then
  80.                 Console.WriteLine("1. PLAYER 1 - Con {0} intento/s", intentos)
  81.                 Console.WriteLine("2. PLAYER 2 - Con {0} intento/s", intentos2)
  82.                 Console.WriteLine("Ganador el PLAYER 1 !!!")
  83.             ElseIf (intentos = intentos2) Then
  84.                 Console.WriteLine("Es un EMPATE !")
  85.             Else
  86.                 Console.WriteLine("1. PLAYER 2 - Con {0} intento/s", intentos2)
  87.                 Console.WriteLine("2. PLAYER 1 - Con {0} intento/s", intentos)
  88.                 Console.WriteLine("Ganador el PLAYER 2 !!!")
  89.             End If
  90.  
  91.             Console.ReadLine()
  92.         End If