[VB6] Random is niet Random

Pagina: 1
Acties:
  • 199 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Anoniem: 35853

Topicstarter
Voor school heb ik de opdracht gehad om een fruitmachine te maken.
Deze heb ik bijna af, maar wat me opvalt is dat de random functie eigenlijk niet random is...

Ik gebruik hiervoor tellers zodat de cijfers eerst een aantal seconden lopen voordat ze stoppen met het beslissende getal.

ik heb een timer die om de 100 miliseconden dit doet en dit herhaalt hij dan 5000 seconden lang:
code:
1
lbl1.Caption = Int(9 * Rnd)


ik weet niet echt hoe ik het moet uitleggen, maar hier is een voorbeeld:

http://jimleliveld.digitalrice.com/fruit.exe

bij mij is 9 van de 10 keer dat ik het programma start:
1e keer: 700
2e keer: 352 (dees varieerd nog wel is, maar is altijd in de 300)

ik hoop dat iemand me kan helpen.. want een voorspelbare fruitmachine is ook niet alles..

Acties:
  • 0 Henk 'm!

Verwijderd

Je moet eerst Randomize() aanroepen. Anders zit je idd steeds in dezelfde range te kijken :).

Acties:
  • 0 Henk 'm!

Verwijderd

Hier lijkt ie toch best wle willekeurig, en ik heb mijn eerste 100 euro al verdiend. :)

Acties:
  • 0 Henk 'm!

Anoniem: 35853

Topicstarter
hmm oke, dankje, maar kan je mischien kort uitleggen hoe ik dan randmize van 0 tot de 10 moet doen??

Acties:
  • 0 Henk 'm!

  • Twee Dee
  • Registratie: Juli 2002
  • Laatst online: 20:14

Twee Dee

Morgen weer een ondertitel.

Ik heb het geprobeerd maar bij mij lijkt het gewoon goed te werken hoor!

Aan mij heb je ook niks!

[ Voor 0% gewijzigd door Twee Dee op 16-09-2002 19:41 . Reden: onzin wordt niet beloond! ]

Luister nou gewoon naar me, dat voorkomt dat ik later "zie je wel" moet zeggen.


Acties:
  • 0 Henk 'm!

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 20-07 22:11

Sponge

Serious Game Developer

1x Randomize bij opstarten
desnoods: randomize timer
oid

dan gewoon

random 0 tot10 waarde (integer) = cint((10 * rnd))

en dan moet het goed komen :)

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 21-07 15:20

Dido

heforshe

Dat is idd een hele ouwe BASIC truuc: de random functie gebruikt een zogeheten "seed".
Als je dezelfde seed gebruikt krijg je dezelfde serie getallen.

Standaard truukje is (en dat gaat voor mij al terug naar m'n XT :) ) om timer te gebruiken: zoals gezegd randomize timer.
Timer was het aantal seconden sinds het opstarten van de PC/BASIC (afhankelijk van de versie) en dat is vrijwel nooit gelijk :)

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 20-07 22:11

Sponge

Serious Game Developer

krijg volgens mij alleen de zelfde opeen volgende getallen als de seed negatief is

(dus randomize -10 geeft altijd 1,2,4,5,6,7 bijv. zelfs op andere pc's heb ik dit geconstanteerd, met m'n fractal planeet generator :Y))

Acties:
  • 0 Henk 'm!

Anoniem: 35853

Topicstarter
aah, ik snap et een beetje
ik heb nu dit:

code:
1
2
3
4
Private Sub Timer1b_Timer()
Randomize Timer1b
lbl1.Caption = Int(9 * Rnd)
End Sub


maar moet ik nu bij elke timer randomize neerzetten? want de andere getallen lijken ook randomized, tewijl ik alleen bij deze randomize heb neergezet..

Acties:
  • 0 Henk 'm!

Verwijderd

Nee die randomize zet je 1malig in je form load ofzo, vaker aanroepen is zinloos of evt zelfs nadelig..

Acties:
  • 0 Henk 'm!

Anoniem: 35853

Topicstarter
huh, nu snap ik er helemaal nix van..

nu beginnen (9 van de 10 x) de getallen met 4 4 0... lekker vaag..

ik zal de fruitautomaat ff updaten zodat juli et kunnen proberen, en ik heb echt randomize ingevoegt.. :S

Acties:
  • 0 Henk 'm!

Anoniem: 35853

Topicstarter
Verwijderd schreef op 16 september 2002 @ 22:46:
Nee die randomize zet je 1malig in je form load ofzo, vaker aanroepen is zinloos of evt zelfs nadelig..
maar ik heb 3 timers, hoe moet et dan zo?:

code:
1
2
3
4
5
private sub form_load()
randomize timer1
randomize timer2
randomize timer3
end sub

Acties:
  • 0 Henk 'm!

  • Hertog
  • Registratie: Juni 2002
  • Laatst online: 23:40

Hertog

Aut bibat, aut abeat

Bovendien moet je niet per se een Timer hebben om de Randomize timer aan te roepen.
De timer uit randomize timer is iets HEEL anders als de timer-control
Gewoon Randomize (zonder timer) werkt overigens ook, en het is inderdaad voldoende dit een keer te doen.
(Voor alle duidelijkheid: het stukje Randomize Timer1b in de vorige code doet precies hetzelfde als alleen Randomize, omdat VB de combinatie 'Randomize Timer1b' niet kent)

"Pray, v. To ask that the laws of the universe be annulled in behalf of a single petitioner, confessedly unworthy." --Ambrose Bierce, The Devil's Dictionary


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-07 03:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dido schreef op 16 september 2002 @ 21:42:
Dat is idd een hele ouwe BASIC truuc: de random functie gebruikt een zogeheten "seed".
Als je dezelfde seed gebruikt krijg je dezelfde serie getallen.

Standaard truukje is (en dat gaat voor mij al terug naar m'n XT :) ) om timer te gebruiken: zoals gezegd randomize timer.
Timer was het aantal seconden sinds het opstarten van de PC/BASIC (afhankelijk van de versie) en dat is vrijwel nooit gelijk :)


Dat heeft niets met basic te maken, vrijwel alle pseudo-random generators maken gebruik van een seed. Het probleem is dat je die seed ook random moet bepalen. De huidige tijd gebruiken geeft een goede oplossing, maar wat als je geen klokje tot je beschikking hebt? :)

Dat is altijd weer een probleem bij machinetjes als oudere spelcomputers en handhelds. Dan moet je dingen als ongeinitialiseerd geheugen gebruiken om een seed te bepalen, of iets doen met user input (hoe lang het duurt voordat de gebruiken een toets indrukt ofzo). Ik vind dat altijd wel grappig omdat je altijd met van die creative oplossingen kan komen die verder nergens op slaan in de computer industrie

Want wie doet bijvoorbeeld nou de berekening 2 * userinput_time () + 5 * readmemory (28346) + sum_of_all_key_presses () ofzoiets, slaat werkelijk nergens op :D

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Anoniem: 35853

Topicstarter
okeej dan!

hartstikke bedankt allemaal, hij is nu echt random :D

http://jimleliveld.digitalrice.com/fruit.exe

Acties:
  • 0 Henk 'm!

Anoniem: 48774

heb ook een fruitmachine gemaakt, reageer te laat maar je moet idd een Randomize aanroepen,..

Fruitmachine van mij staat op www.planet-source-code.com.. zoek naar weedmachine
Pagina: 1