elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Randomize Timer?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Randomize Timer?  (Leído 7,324 veces)
Saberuneko


Desconectado Desconectado

Mensajes: 2.194



Ver Perfil WWW
Randomize Timer?
« en: 3 Noviembre 2011, 12:08 pm »

Hola, en Basic, siempre he usado Randomize Timer para obtener un resultado lo más parecido a algo verdaderamente aleatorio...
En el juego que estoy desarrollando, pensé en utilizar lo mismo en Visual Basic para generar un conjunto de naves aleatorias que atacarían a la flota del jugador.

Sin Randomize Timer funciona, pero siempre me genera las mismas naves así que realmente no me vale.

Ésta es la parte del código que tengo hecha para generar dichas naves y cargarlas en pantalla:

Cabecera del Frame:
Código:
Option Explicit

Dim enemy1 As Ship
Dim enemy2 As Ship
Dim enemy3 As Ship
Dim enemy4 As Ship
Dim enemy5 As Ship

Randomize Timer

Sub que genera una flota enemiga aleatoria:
-Storage.shipdb contiene tanto los nombres de naves como las rutas de las imágenes a cargar, sus stats etc. Haré que esta pseudo-base de datos se cargue desde ficheros luego, de momento esto es experimental. (Así que no nos centremos en mi chapuza :3)
-Si necesitáis todo el código para orientarme, decídmelo y paso también el módulo storage que contiene todas las estructuras, arrays, etc... No pongo más de momento, ya que mi única duda es sobre cómo utilizar Randomize Timer correctamente.
Código:
Private Sub enemyload()
Dim dice As Integer
If Storage.level > 10 Then
    dice = Int((Rnd * 5) + 1)
Else
    dice = Int((Rnd * 3) + 1)
End If

    Select Case (dice)
        Case 1
            enemy1.exists = True
            enemy2.exists = False
            enemy3.exists = False
            enemy4.exists = False
            enemy5.exists = False
        Case 2
            enemy1.exists = True
            enemy2.exists = True
            enemy3.exists = False
            enemy4.exists = False
            enemy5.exists = False
        Case 3
            enemy1.exists = True
            enemy2.exists = True
            enemy3.exists = True
            enemy4.exists = False
            enemy5.exists = False
        Case 4
            enemy1.exists = True
            enemy2.exists = True
            enemy3.exists = True
            enemy4.exists = True
            enemy5.exists = False
        Case 5
            enemy1.exists = True
            enemy2.exists = True
            enemy3.exists = True
            enemy4.exists = True
            enemy5.exists = True
    End Select
   
    'this will have to be modified as it is just for combat alpha testing
    'in the way it currently is, it only supports pirate ship load
    If enemy1.exists Then
        If Storage.level > 10 Then
            dice = Int((Rnd * 6) + 6)
            enemy1.shipModel = Storage.shipdb(dice, 0)
        Else
            dice = Int((Rnd * 3) + 6)
            enemy1.shipModel = Storage.shipdb(dice, 0)
        End If
    Else
        enemy1.shipModel = Storage.shipdb(0, 0)
        img_enemy1.Visible = False
    End If
    img_enemy1.Picture = LoadPicture(App.Path & Storage.shipdb(dice, 2))
       
    If enemy2.exists Then
        If Storage.level > 10 Then
            dice = Int((Rnd * 6) + 6)
            enemy2.shipModel = Storage.shipdb(dice, 0)
        Else
            dice = Int((Rnd * 3) + 6)
            enemy2.shipModel = Storage.shipdb(dice, 0)
        End If
    Else
        enemy2.shipModel = Storage.shipdb(0, 0)
        img_enemy2.Visible = False
    End If
    img_enemy2.Picture = LoadPicture(App.Path & Storage.shipdb(dice, 2))
   
    If enemy3.exists Then
        dice = Int((Rnd * 3) + 6)
        enemy3.shipModel = Storage.shipdb(dice, 0)
    Else
        enemy3.shipModel = Storage.shipdb(0, 0)
        img_enemy3.Visible = False
    End If
    img_enemy3.Picture = LoadPicture(App.Path & Storage.shipdb(dice, 2))
   
    If enemy4.exists Then
        dice = Int((Rnd * 3) + 6)
        enemy4.shipModel = Storage.shipdb(dice, 0)
    Else
        enemy4.shipModel = Storage.shipdb(0, 0)
        img_enemy4.Visible = False
    End If
    img_enemy4.Picture = LoadPicture(App.Path & Storage.shipdb(dice, 2))
   
    If enemy5.exists Then
        dice = Int((Rnd * 3) + 6)
        enemy5.shipModel = Storage.shipdb(dice, 0)
    Else
        enemy5.shipModel = Storage.shipdb(0, 0)
        img_enemy5.Visible = False
    End If
    img_enemy5.Picture = LoadPicture(App.Path & Storage.shipdb(dice, 2))
   
End Sub

El problema es que me da un error cuando intento ejecutarlo:
Citar
El procedimiento externo no es válido.
Marcándome la palabra Timer de la linea:
Código:
Randomize Timer

Se puede usar esta función en VB?
Si es así, cómo puedo hacerlo?

Muchas gracias por adelantado.


En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: Randomize Timer?
« Respuesta #1 en: 3 Noviembre 2011, 13:17 pm »

HOLA!!!

No se si te servira:
Es un juego de naves que arme hace un tiempo:
el tema: http://foro.elhacker.net/empty-t313866.0.html;msg1554959#msg1554959
la descarga: http://www.gigasize.com/get.php?d=tcthckoql1f

Y si, se puede hacer "randomize timer" pero te recomiendo hacerlo en el form load y nunca mas :P.


GRACIAS POR LEER!!!


En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Randomize Timer?
« Respuesta #2 en: 3 Noviembre 2011, 13:41 pm »

Solo hace falta ejecutar Randomize por si solo y listo :D (Timer, es cuando lo usas en un Control Timer, ademas de que el parametro es opcional)
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Randomize Timer?
« Respuesta #3 en: 3 Noviembre 2011, 14:06 pm »

No es Randomize Timer , sino Randomize Time

Y esa instruccion la pones al principio de tu Sub enemyload
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: Randomize Timer?
« Respuesta #4 en: 3 Noviembre 2011, 15:31 pm »

HOLA!!!

No es Randomize Timer , sino Randomize Time

Y esa instruccion la pones al principio de tu Sub enemyload

El sub Randomize (seed) funciona con cualquier numero.

Se suele utilizar Timer.

GRACIAS POR LEER!!!
En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Saberuneko


Desconectado Desconectado

Mensajes: 2.194



Ver Perfil WWW
Re: Randomize Timer?
« Respuesta #5 en: 3 Noviembre 2011, 22:47 pm »

HOLA!!!

El sub Randomize (seed) funciona con cualquier numero.

Se suele utilizar Timer.

GRACIAS POR LEER!!!

Si, en Basic se usa "Randomize Timer", literalmente.

He probado, las flotas se generan ahora de forma variada y aleatoria, ¡muchísimas gracias!

Una duda, sólo curiosidad, cómo funciona "Randomize"? Funciona de forma similar a "Randomize Timer" de basic? O funciona de otra forma?
« Última modificación: 3 Noviembre 2011, 22:52 pm por Saberuneko » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Randomize Timer?
« Respuesta #6 en: 3 Noviembre 2011, 23:02 pm »

Randomize por si solo elige una semilla aleatoria, si tu le das una semila la genera a partir de esta :P

No he usado otras vesiones de basic ademas de Visual Basic

Código:
    Select Case (dice)
        Case 1
            enemy1.exists = True
            enemy2.exists = False
            enemy3.exists = False
            enemy4.exists = False
            enemy5.exists = False
        Case 2
            enemy1.exists = True
            enemy2.exists = True
            enemy3.exists = False
            enemy4.exists = False
            enemy5.exists = False
        Case 3
            enemy1.exists = True
            enemy2.exists = True
            enemy3.exists = True
            enemy4.exists = False
            enemy5.exists = False
        Case 4
            enemy1.exists = True
            enemy2.exists = True
            enemy3.exists = True
            enemy4.exists = True
            enemy5.exists = False
        Case 5
            enemy1.exists = True
            enemy2.exists = True
            enemy3.exists = True
            enemy4.exists = True
            enemy5.exists = True
    End Select
Eso lo resumiria a esto

Código
  1. enemy1.exists = (dice <= 1)
  2. enemy2.exists = (dice <= 2)
  3. enemy3.exists = (dice <= 3)
  4. enemy4.exists = (dice <= 4)
  5. enemy5.exists = (dice <= 5)
  6.  
Si no entiendes, avisas  ;D
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Randomize Timer?
« Respuesta #7 en: 4 Noviembre 2011, 10:56 am »

Entonces en mis codigos que he creado que siempre uso:

Código
  1. Randomize Time
  2.  
  3. valor = Cint(Rnd() * 6)
  4.  

No me esta generando los numeros realmente aleatorios como deberia o que?
En línea

Saberuneko


Desconectado Desconectado

Mensajes: 2.194



Ver Perfil WWW
Re: Randomize Timer?
« Respuesta #8 en: 4 Noviembre 2011, 11:39 am »

Código
  1. enemy1.exists = (dice <= 1)
  2. enemy2.exists = (dice <= 2)
  3. enemy3.exists = (dice <= 3)
  4. enemy4.exists = (dice <= 4)
  5. enemy5.exists = (dice <= 5)
  6.  
Si no entiendes, avisas  ;D

Creo que lo pillo, al ser enemyn.exists una variable de tipo boolean y tener una condición "matemática" en la asignación, si se cumple es true y si no false, verdad?
Muchas gracias, llevaba un buen rato intentando pensar una manera de compactar mejor eso.

No me esta generando los numeros realmente aleatorios como deberia o que?
No, realmente en la programación no existe una aleatoriedad real, pero sí se puede llegar a algo bastante aproximado.
Simplemente prueba a guardar una cantidad considerable de números aleatorios en un intervalo no muy grande, y notarás que algunos patrones se repiten.
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Randomize Timer?
« Respuesta #9 en: 4 Noviembre 2011, 13:31 pm »

Creo que lo pillo, al ser enemyn.exists una variable de tipo boolean y tener una condición "matemática" en la asignación, si se cumple es true y si no false, verdad?
Exacto, ademas de matematica es logica, por lo que solo puede ser verdadero o falso (nunca sera mayor y menor que uno a la vez, etc) y que es el tipo booleano? una variable logica :D Es como la matematicas en el cole, empiezas con x = y y terminas con formulas de media hoja :xD

Entonces en mis codigos que he creado que siempre uso
No me esta generando los numeros realmente aleatorios como deberia o que?
el simple hecho de llamar a Randomize ya te cambia las proximas salidas de Rnd, lo que si, es que habrá veces que notaras que saldran ciertos patrones, como cuando sale un numero seguido 3 veces en la loteria :xD
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Randomize y Rnd « 1 2 »
Programación Visual Basic
nhaalclkiemr 16 5,555 Último mensaje 19 Septiembre 2007, 01:00 am
por cobein
Randomize
Programación Visual Basic
Frikimaster 3 1,887 Último mensaje 8 Abril 2008, 20:32 pm
por proteo1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines