7 de Septiembre de 2008
Mayo
27

Tamagotcho! Codigos para empezar a darle vida a tu bicho. La inteligencia vendrá despues ;)

Categorías: 

Os actualizo esto con gran gozo y pena a la vez:

Fuelito, mi mascota virtual, nació siendo una diminuta gotica de diesel.  Segun fue pasando el tiempo iba moviendose lentamente de acá para allá sin rumbo fijo -la poca inteligencia de una gota y la ausencia de cosas con las que entretenerte te tendrian igual-, creciendo a la que pasaban los segundos...

Hasta que murió a los 48 minutos de nacer -si, he hecho una prueba completa de que todo este bien y os aviso que esto va a ser mas aburrido que mirar una pecera-.

Aqui os traigo: Los codigos de la vida!! 

 

 Para que os funcionen debeis crear lo siguiente en el formulario principal -el unico que tenemos-

 Por ahora tenemos el formulario con el fondo y el imagebox con la mascota con el fondo transparente. Añadiremos:

 

  •  Dos objetos de la izquierda llamados timer para controlar el tiempo que pasa de cada cosa.
  • Un label en el medio que nos dirá informacion -por ahora, lo unico que os dara con este codigo es la confirmacion de que el bicho ha muerto-

Es facil. Configuramos uno de los relojes -timers-:

 

  1.  Donde pone name -en la parte de atributos, a la derecha- le ponemos timervida. Nos servirá para medir el tiempo de vida de nuestro bicho -mas adelante, de todos los que haya allí- y para decidir cuanto tiempo tenemos que dejar que se quede haciendo algo o en algun estado como feliz o triste.
  2. En donde pone interval pondremos los milisegundos que tardara en contar. Si ponemos 1000 significará que cada segundo actualizará todas las cosas, con este reloj controlaremos cada cuanto tiempo se tiene que redibujar el escenario, volver a calcular la posicion de la mascota, etc... Lo hacemos asi para que sea igual en todos los ordenadores donde se ponga, si se pone con un contador -cosa de programacion- el tiempo varia de un ordenador a otro dandose problemas de que en un ordenador se mueva todo mucho mas rapido que en otro mas antiguo.

Configuramos el otro timer:

 

  1.  Este se llamará Timerdescanso. En realidad no haria falta ponerle pero como no todos somos informaticos o matematicos para calcular cada cuantos intervalos del primer reloj contamos lo mismo que estos otros, nos ahorramos ese paso y sacrificamos algo de la potencia del ordenador. Si ha movido crysis sin problemas, entonces no te preocupes por esto aunque sea una mala practica de programacion. En el Basic esas cosas se pasan por el forro de las pelotas como vereis a continuacion...
  2.  En el intervalo pondremos 4000 para que calcule 4 segundos. Asi cuando se active estara 4 segundos contando. En el codigo haremos que la mascota descanse donde este. Por hacer algo mas que nada.

Ahora daremos doble click sobre cualquier objeto del formulario para que se abra una pestaña donde aparecerá el codigo.

Tranquilos, yo os lo doy mascadito y como papilla para que sea facil, luego os lo explico para los interesados. Simplemente todo lo que haya alli lo sobreescribis por esto otro:

Public Class Form1

'caracteristicas fisicas

Dim altura_maximo As Integer

Dim anchura_maxima As Integer

Dim altura_inicial As Integer

Dim anchura_inicial As Integer

Dim tiempo_vivido As Integer

Dim tiempo_vida As Integer



Dim altura As Decimal

Dim anchura As Decimal




'estados mentales

Dim abrurrimiento As Integer

Dim felicidad As Integer

Dim ira As Integer

Dim hambre As Integer

Dim gustos(9) As Integer



'estados fisicos

Dim salud As Integer

Dim anticuerpos As Integer

Dim bacterias As Integer

Dim estomago_lleno As Integer

Dim corazon As Integer



'para calcular donde se moverá

Dim objetivo_x As Integer

Dim objetivo_y As Integer



'otros

Dim estado As Integer

Dim nombre As String



Dim tamaño As Size

Dim posicion As Point







Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Label1.Hide()

nuevo_bicho()



loop_principal()

Timervida.Start()



End Sub


Public Sub nuevo_bicho()

'haremos que el bicho exista.



Randomize()

altura_inicial = CInt(Int((10 * Rnd()) + 26))

anchura_inicial = CInt(Int((10 * Rnd()) + 18))

tamaño.Height = altura_inicial

tamaño.Width = anchura_inicial

altura = altura_inicial

anchura = anchura_inicial

PictureBox1.Size = tamaño



altura_maximo = CInt(Int((340 * Rnd()) + 1))

anchura_maxima = CInt(Int((225 * Rnd()) + 1))



posicion.Y = 400

posicion.X = CInt(Int((615 * Rnd()) + 1))

PictureBox1.Location = posicion



tiempo_vida = CInt(Int((900 * Rnd()) + 5400))

tiempo_vivido = 0

estado = 2



End Sub




Public Sub loop_principal()



'actualizar estado fisico del bicho

If altura <= altura_maximo Then

altura = altura + 0.01

posicion.Y = PictureBox1.Location.Y - 0.01

End If

If anchura <= anchura_maxima Then

anchura = anchura + 0.01

posicion.X = PictureBox1.Location.X - 0.005

End If

tamaño.Height = altura

tamaño.Width = anchura









'actualizar el estado mental del bicho



'si esta muerto, game over.
tiempo_vivido = tiempo_vivido + 2

If tiempo_vivido >= tiempo_vida Then

gameover()

End If

'Si no esta en objetivo, mover



If estado = 1 Then

If PictureBox1.Location.X > objetivo_x Then

posicion.X = posicion.X - 1

ElseIf PictureBox1.Location.X < objetivo_x Then

posicion.X = posicion.X + 1

ElseIf PictureBox1.Location.X = objetivo_x Then

estado = 2

End If

End If

'si esta en objetivo, esperar unos instantes

If estado = 2 Then

Timerdescanso.Start()

End If

'si ese instante ha pasado, calcular nuevo punto a mover



PictureBox1.Size = tamaño

PictureBox1.Location = posicion

End Sub






Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timervida.Tick



loop_principal()



End Sub




Private Sub Timerdescanso_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timerdescanso.Tick

Timerdescanso.Stop()

estado = 1

objetivo_x = CInt(Int((615 * Rnd()) + 1))


End Sub


Sub gameover()

Timervida.Stop()

Label1.Visible = True

Label1.BringToFront()

Label1.Text = "El ultimo Fuelito ha muerto, nadie mas habitará esta zona del desierto." + Chr(10) + Chr(13) + "Game Over"

End Sub




End Class



Cuando llevas mucho programando, ves esto moviendose por las paredes...


 La parte con el fondo en rojo son unas cosas llamadas variables, donde se guardan datos que en este caso son numeros, por eso se pone al final As Integer. Eso indica al lenguaje que ahi se guardarán numeros.

Para organizarlo un poco vemos que  cada variable tiene un nombre entendible para saber que representa. Ahi sobran, por ahora he añadido unas que usaré mas tarde... en otro tutorial ;)

 ------------------------------------------------------

La parte con el fondo en verde oscuro indica al programa lo que se hara cuando se ejecute -cuando se abra el formulario-. En el esconderemos el label que hemos hecho al principio -para eso vemos como se nombra con lo que aparece en la parte Name cuando editabamos las propiedades- seguido de un punto para indicar que usaremos un atributo o una funcion de ese objeto. Asi podemos cambiar el texto, cambiar de posicion, cambiar los colores, etc...  Como lo que hace una funcion suele venir descrito en el nombre, aqui esta facil... Hide, esconder, escondemos el label.

 Luego llamamos a dos funciones que hemos creado nosotros mas abajo, pues no vienen en ningun objeto. Y bueno, siendo mas precisos, esos son procesos, las funciones devuelven un valor, los procesos no tienen por que. Eso lo hacemos porque son trozos de codigo recurrentes y para facilitarnos las cosas en vez de escribirlo 5 veces, lo hacemos una vez en una funcion y cuando se vuelva a necesitar se le llama.

Esos procesos son los de crear al nuevo bicho -en realidad, darle unos valores a sus variables para saber cuanto mide al principio, cuando mide al final, donde nace, etc...- y el de  comenzar a mover las cosas -bueno, este se tendria que quitar, porque despues hacemos que el reloj principal, el timervida, empiece a contar, y cada vez que cuenta llama al codigo del bucle principal-

El bucle principal seria donde hasta que se acabe el juego se miran una y otra vez las teclas que pulsa el usuario, se calcula donde se mueven las cosas y lo que hacen, se redibuja el escenario, etc...

En un lenguaje de programacion mas orientado a juegos eso es mas facil, pero como visual basic esta mas orientado a programas serios de windows, esta es la forma de hacerlo.

 -------------------------------------------

 En la parte con fondo azul celeste se le asignan unos valores a los atributos que definiran al bicho:

Lo primero que llama la atencion es donde pone randomize. Eso sirve para que el ordenador genere una secuencia de numeros aleatorios que dependen del reloj de windows. Asi cada segundo esa cadena seria distinta. Eso nos servira para hacer las cosas del azar mas "azarosas".

 Luego calcula el tamaño inicial que tendra el bicho. Calcula un numero al azar del 0 al 9 -por eso pone 10 * rnd- y luego le suma el tamaño minimo que tendra cualquier bicho. Asi nos aseguramos que por lo menos mida ese minimo y luego se le suma lo que da el rnd -funcion que calcula numeros al azar en el rango por que se multiplique-. Con esa explicacion teneis suficiente, cuando querais hacer algo al azar copiad y pegar. Lo que multiplique al random sera que da un resultado entre el 0 y el numero que multiplique - 1. Luego le suma algo -nomalmente un 1 para que no de 0- y listo.

 Asigna tamaños minimo y maximo y tiempo de vida, dice que su estado es 2 -eso lo traducira el juego com oque esta descansando 4 segundos, para que no empieze moviendose por ahi-.

-------------------------------------------

 la parte con el fondo azul indica el "loop principal", donde se calcula donde esta el bicho, a donde se mueve, que hace, etc... Se puede decir que es el nucleo.

Primero mira si el tamaño no es igual o superior al maximo. Si no lo es entonces hace que crezca algo. y lo recoloca para que no se mueva donde no debe -sin eso, el bicho creceria hacia abajo o hacia la derecha-.

Luego aumenta el tiempo que ha vivido -en este caso contara 2 unidades cada medio segundo. Y vive un minimo de 5400 unidades ;) . Despues calcula si el tiempo vivido es igual o mayor que el tiempo maximo de vida. Si ha vivido mas de lo que debe, llama al fin del juego. Asi si esta muerto evitamos tener que pensar donde colocarlo.

Ahora piensa en que estado esta: Si quieto o moviendose.

Si no esta en el punto en el que quiera estar, mira si ese punto esta a su izquierda o su derecha y se mueve hacia alla. Si llega, cambia de estado de 1 -moviendose a punto- a 2-quieto y calculando a donde moverse-

 Si esta en el sitio, activa el timer de que esta descansando.

Con todo esto tenemos actualizado donde se movera, entonces lo que se hace es pasar esos datos al imagebox para que dibuje en esa posicion al bicho, dando la impresion de que se ha movido.

------------------------------------------------

 La parte con el fondo en amarillo indica que cada vez que el reloj principal hace tick, vuelve a calcular todo lo del loop principal.

--------------------------------------------- 

 La segunda parte con el fondo en rojo indica que cuando el reloj de descanso hace tick, el reloj se para, el estado vuelve a ser el de moverse y asigna unas nuevas coordenadas para que se mueva alli. Como veis, esas coordenadas se calculan segun el ancho de la ventana principal, si no se saldria fuera.

------------------------------------------------ 

la ultima parte del juego hace que cuando se muera, todo se pare y aparezca un mensaje que dice Game Over. -bueno, la animacion no se puede parar-.

 AQUI IRIA UNA IMAGEN QUE REPRESENTE EL COÑAZO QUE OS ACABO DE METER; PERO EN EL BUSCADOR SOLO APARECIAN IMAGENES OBSCENAS AL BUSCAR COÑAZO

ME HE PASADO MAS TIEMPO ESCRIBIENDO ESTA EXPLICACION QUE EL CODIGO!!

Para la proxima lo pongo, copiais, pegais, y quien quiera saberlo con lo que hemos dado hoy tiene que tener ya nociones para entenderlo... que me habeis hecho perder un dia de mi suscripcion al Age of Conan... al bueno, no a este:

 

PD: Lo que dice la tia lo dice una chica en la novela de Conan ;)

 

 

En fin, tras esto vereis como el bicho se mueve por la pantalla, espera 4 segundos y se vuelve a mover. Mientras esta creciendo y al llegar a cierto punto, se muere.

Tocando cosillas del bucle principal hareis que se mueva mas rapido o crezca mas deprisa. Tocando en las variables iniciales cambiareis el tamaño inicial minimo o el tamaño final maximo. O hareis que viva mas o menos tiempo. Configuraoslo al gusto y segun vuestra mascota, pues lo tengo configurado para la mia.

Y en la parte de sub timerdescanso donde se calcula que hace cuando deja de descansar, ahi podeis tocar para restringir de donde a donde se mueve.

Disfrutadlo, yo me voy a dormir. Que harton de escribir... ;)

 

0