Funktion beliebig oft aufrufen?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

GearTechDE

ehemals 'KillerJo96'

Betreff: Funktion beliebig oft aufrufen?

BeitragFr, Jul 22, 2011 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Bin gerade dabei eine Art Doodle Jump zu programmieren. Ich hänge schon beim erstellen der einzelnen Sprungmarken also die Dinger wo das Doodle immer draufspringen muss xD

Die Sprungmarken lasse ich per Type in einer Function namens ErstelleSprungmarke01() erstellen.
Für Jede Sprungmarke die im Spiel ist, wird ein Rect an eine mit Random generierte X + Y koordinate gesetzt.

Jetzt mein Problem.

Mit ErstelleSprungmarke01() erstelle ich zwar die Sprungmarke, aber immer nur EINE. Ich möchte, dass die Sprungmarke z.B. von 0 - 10 Mal im Zufall erstellt wird. Das also nachher per Zufall eine Zahl zwischen 0 und 10 ausgewählt wird, und so oft eine Marke erstellt wird.

Wie mach ich das am besten????


Danke im Voraus Wink
Mit freundlichen Grüßen: GearTechDE

FireballFlame

BeitragFr, Jul 22, 2011 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Rand, For?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Midimaster

BeitragFr, Jul 22, 2011 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
na das ist doch ganz einfach:

BlitzBasic: [AUSKLAPPEN]
For i%=0 To Rand(0,10)
ErstelleSprungmarke01()
Next

GearTechDE

ehemals 'KillerJo96'

BeitragFr, Jul 22, 2011 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
AHh danke... an for hatte ich garnicht gedacht...

Vielen Dank Wink
Mit freundlichen Grüßen: GearTechDE
 

BBPro2

BeitragFr, Jul 22, 2011 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du an "for" nicht gedacht hast ist doodle jump vielleicht ein etwas zu kompliziertes projekt für den anfang Wink

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Jul 22, 2011 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke es ist wichtig hier anzumerken, dass, auch wenn Midimasters Code funktioniert, er vermutlich nicht den erwünschten Effekt bietet. Das Problem ist, dass Rand() jeden Schleifen-Durchlauf wieder aufgerufen wird, und jedes mal ein neuer Zufallswert mit i vergleichen wird. Das wiederum sorgt für eine alles andere als Gleichmäßige Verteilung über den Bereich von 0 bis 11 Durchläufen mit einer (deutlichen) Neigung zu niedrigeren Zahlen.
Zu sehen ist das zum Beispiel in folgendem Code:
BlitzBasic: [AUSKLAPPEN]
Local i, n
Local count[11]

For n = 1 To 1000
For i = 0 To Rand(0, 10)
Next
count[i] = count[i] + 1
Next

For n = 1 To 11
Print count[n]
Next

WaitKey()


Wenn man eine gleichmäßige Verteilung haben möchte sollte man den zufälligen Wert vorher zwischenspeichern und dann in der For-Schleife bis dort laufen.
Zur Vollständigkeit, der gleiche Code angepasst:
BlitzBasic: [AUSKLAPPEN]
Local i, n, a
Local count[11]

For n = 1 To 1000
a = Rand(0, 10)
For i = 0 To a
Next
count[i] = count[i] + 1
Next

For n = 1 To 11
Print count[n]
Next

WaitKey()

Midimaster

BeitragFr, Jul 22, 2011 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn das stimmt, wäre es kein Feature, sondern ein Bug....

Sollte die TO-Variable nicht nur einmal eingelesen werden und dann lokal festliegen?

Moment.....

ich teste mal.....

BlitzBasic: [AUSKLAPPEN]
	For i = 0 To Rand(0, 10)


Boah! Voll Falsch!!!

Während sich unter BMax die Wahrscheinlichkeiten richtig verteilen, ergibt sich unter BB tatsächlich dieses Ungleichgewicht.

Danke für diesen Hinweis, Man lernt also nie aus...

Dann hier mein geänderter Code:

BlitzBasic: [AUSKLAPPEN]
Zufall% = Rand(0,10)
For i%=0 To Zufall
ErstelleSprungmarke01()
Next

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Jul 22, 2011 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ob Bug oder Feature lässt sich evtl. streiten. Aber es ist definitiv etwas was man wissen sollte, damit so Sachen wie folgendes nicht vorkommen. Wink
BlitzBasic: [AUSKLAPPEN]
For i = 1 To Len(s)
; Blah
Next

(aber zurück zum Thema...)
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

FireballFlame

BeitragSa, Jul 23, 2011 1:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Da man bei einer For-Schleife aber nicht will, dass sich der Endwert während des Durchlaufens verändert (wär sonst grausiger Programmierstil), würd ich das schon als Bug bezeichnen. Oder zumindest als Schwäche Wink
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group