endweder die random-funktion spinnt oder ich

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Floridarolf

Betreff: endweder die random-funktion spinnt oder ich

BeitragDo, Apr 03, 2008 3:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,
ich habe vor kurzem mit BlitzPlus angefangen. Ich bin gerade dabei eine Wirtschaftsimulation mit eingebauten Minigames zu basteln. Es ist vielleicht etwas happig fürnen Anfänger, aber ich hatte keinen Bock den 12345sten Tetris- bzw. den 3587sten PacmanClone zu produzieren. Zudem kann ich ein wenig C.
Und nun zu meinem Problem:
Es handelt sich um ein Minigame in dem man auf einer 3-spurigen Straße entgegenkommenden Autos ausweichen muss.
Ich habe vor, die Gegner in zufälligen Abständen, aber niemals mehr als 2 Gegner gleichzeitig fahren zu lassen. Mit meinem derzeitigen Quelltext kommen die entgegenkommenden Fahrer aber leider trotz Random-Funktion nicht zufällig, sondern immer gleich. Aber warum?

Code: [AUSKLAPPEN]
Function stau()
hinterg = LoadImage ("stauhin.png")
player  = LoadImage ("stautruck.png")
gegner  = LoadImage ("staugeg.png")
streifen= LoadImage ("staustreif.png")

SetBuffer BackBuffer()
frameTimer=CreateTimer(60)
WaitTimer (frameTimer)


DrawImage hinterg,0,0
status=2
Repeat
Cls
DrawImage hinterg,0,0
aktstrei=aktstrei+3
DrawImage streifen,250,aktstrei
DrawImage streifen,350,aktstrei
DrawImage streifen,250,aktstrei+150
DrawImage streifen,350,aktstrei+150
DrawImage streifen,250,aktstrei+300
DrawImage streifen,350,aktstrei+300
DrawImage streifen,250,aktstrei+450
DrawImage streifen,350,aktstrei+450

If aktstrei+450>530  Then
  aktstrei=0
EndIf
;Gegner

aktiv=Rnd(0,1000)
bahndom=Rnd(1,3)

Select bahndom
Case 1
  bahn=185
Case 2
  bahn=285
Case 3
  bahn=385
End Select

If geganz<2
If aktiv<20 Then
   geg1=1
   geganz=geganz+1
   spur1=bahn
   ElseIf aktiv>980 Then
     geg2=1
     geganz=geganz+1
     spur2=bahn
  EndIf
EndIf

If geg1=1 Then
   DrawImage gegner,spur1,aktho
   aktho=aktho+4
EndIf

If geg2=1 Then
   DrawImage gegner,spur2,akthob
   akthob=akthob+4
EndIf   

If aktho>480 Then
geganz=geganz-1
geg1=0
aktho=0
EndIf

If akthob>480 Then
   geganz=geganz-1
   geg2=0
   akthob=0
EndIf

;Trucksteuerung 
;status1=links, status3=rechts

If KeyHit (203) =1 And status>1 Then
    status=status-1
ElseIf KeyHit(205)=1 And status<3 Then
    status=status+1
EndIf

Select status
Case 1
  DrawImage player,185,420
Case 2
  DrawImage player,285,420
Case 3
  DrawImage player,385,420
End Select


Flip
Until KeyHit(1)=1

FreeTimer frameTimer
End Function

Dreiser

BeitragDo, Apr 03, 2008 6:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst am Anfang deines Codes noch "Seedrnd Millisecs()" verwenden.

Schau dir mal http://www.blitzbase.de/befehle2d/seedrnd.htm an.
 

Floridarolf

BeitragDo, Apr 03, 2008 10:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank !

ProfJake

ehemals "DTC" / "Fabian Niemann"

BeitragDo, Apr 03, 2008 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
BTW, du benutzt zur Zufallszahlenerzeugung Rnd()

Code: [AUSKLAPPEN]
aktiv=Rnd(0,1000)
bahndom=Rnd(1,3)


Für diesen Code reicht aber auch Rand(), welches gleich arbeitet,
nur dass es einen Integer zurückgibt.

Code: [AUSKLAPPEN]

aktiv = Rand(0, 1000)
bahndom = Rand(1, 3)


Desweiteren muss WaitTimer() in die Hauptschleife und KeyHit()
muss nicht mit KeyHit(x) = 1 geprüft werden.
Und die Sache mit bahndom und dem Zeichnen des Spielers kann man auch eleganter lösen.

Code: [AUSKLAPPEN]
Repeat
Cls

bahn = Rand(1,3) * 100 + 85

...
If KeyHit (203) And status > 1 Then
    status = status - 1
Else If KeyHit(205) And status < 3 Then
    status = status + 1
EndIf
...

DrawImage(player, status * 100 + 85, 420)

WaitTimer(frameTimer)
Flip
Until KeyHit(1)


Nur so .. und viel Spaß noch mit Blitz!

D2006

Administrator

Betreff: Re: endweder die random-funktion spinnt oder ich

BeitragDo, Apr 03, 2008 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Wollte noch fix etwas anmerken:

Floridarolf hat Folgendes geschrieben:
Ich bin gerade dabei eine Wirtschaftsimulation mit eingebauten Minigames zu basteln. Es ist vielleicht etwas happig fürnen Anfänger, aber ich hatte keinen Bock den 12345sten Tetris- bzw. den 3587sten PacmanClone zu produzieren.


Relevant ist doch gar nicht, dass es schon tausende einfache Spiele gibt. Relevant ist nur, dass es bedeutend besser ist, dass du mit etwas anfängst, was deinem Lernfortschritt entspricht, da du sonst an Probleme geraten wirst, die für den Anfang ne Nummer zu groß sind, was sehr demotivierend sein kann und eigentlich keinen Spaß macht.

Deswegen empfehlen wir Space-Shooter, Snake und Co. Die übelst tolle WiSim, das Mega-Rollenspiel oder den nächsten Top-Ego-Shooter würden wir alle gern programmieren. Daraus wird aber bei den wenigsten was.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

BigMaexle

BeitragDo, Apr 03, 2008 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich würde einfach die WiSim aus der "Wisim mit Minigames" rausnehmen
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber
 

Floridarolf

Betreff: Re: endweder die random-funktion spinnt oder ich

BeitragDo, Apr 03, 2008 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:

Relevant ist doch gar nicht, dass es schon tausende einfache Spiele gibt. Relevant ist nur, dass es bedeutend besser ist, dass du mit etwas anfängst, was deinem Lernfortschritt entspricht, da du sonst an Probleme geraten wirst, die für den Anfang ne Nummer zu groß sind, was sehr demotivierend sein kann und eigentlich keinen Spaß macht.

Natürlich habe ich in meiner ersten Blitz-Session diverse Tutorials durchgeackert und einen kleinen Space-Shooter mit Sound und gespeichertem Highscore als Textdatei programmiert.

Ich denke,dass ich mich mit der WiSim nicht übernommen habe. Die Hauptmenu-Schleife mit den einzelnen Menupunkten ist schon halb fertig. Strukturell habe ich viele Dinge in Funktionen oder sogar anderen bb-Dateien ausgelagert, so dass ich einzelne Dinge, wie z.B. dieses Minigame auch einzeln ausführen kann.
Durch mein Studium bin ich bereits mit C vertraut, so dass ich beim strukturellen Aufbau weniger Probleme habe. Leider habe ich noch großen Nachholbedarf in Sachen Grafik, das wird schon irgendwie werden.

Vielen Dank nochmal für den Support!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group