Moorhuhn Clone Gegner Problem

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

BigPingu

Betreff: Moorhuhn Clone Gegner Problem

BeitragDi, Jul 11, 2006 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallöle,

Also ich bastel gerade an einem MoorhuhnClone. Jetzt hab ich da aber ein Problemundzwar habe ich Select Case benutzt um zu entscheiden ob ein Gegner von Links oder von rechts kommt jedoch kommt jetzt gar keiner Shocked

Was hab ich falsch gemacht ?

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,1
SetBuffer BackBuffer()

Global background = LoadImage ("gfx\back.png")

Global gegnergfx = LoadImage ("gfx\bird.bmp")
MaskImage gegnergfx, 255,0,255
Global gegnergfx_switch = CopyImage(gegnergfx)
ScaleImage gegnergfx_switch, -1, 1
HandleImage gegnergfx_switch, 0, 0

Global fahdenkreuz = LoadImage ("gfx\fahdenkreuz.png")
MaskImage fahdenkreuz, 255,0,255
MidHandle fahdenkreuz
HidePointer

Global LastGegner = MilliSecs()


Global gner.gegner

Type gegner
Field x
Field y
End Type


NewGegner()

Repeat
Cls
mx = MouseX()
my = MouseY()
seite = Rnd (1,2)

TileBlock background
DrawGegner()

If MilliSecs()-LastGegner > 2000 Then
NewGegner()
LastGegner = MilliSecs()
EndIf


DrawImage fahdenkreuz, mx,my

Flip
Until KeyHit (1)
End


Function NewGegner()



Select seite
Case 1
For i = 0 To 1
gner = New gegner
gner\x = -150
gner\y = Rnd (50,500)
Next
Case 2
For i = 0 To 1
gner = New gegner
gner\x = 950
gner\y = Rnd (50,500)
Next
End Select


End Function


Function DrawGegner()

Select seite
Case 1
For gner.gegner = Each gegner
gner\x = gner\x + 3
gner\y = gner\y + 0
DrawImage gegnergfx, gner\x, gner\y
Next
Case 2
For gner.gegner = Each gegner
gner\x = gner\x - 3
gner\y = gner\y + 0
DrawImage gegnergfx_switch, gner\x, gner\y
Next
End Select

End Function

BladeRunner

Moderator

BeitragDi, Jul 11, 2006 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
seite ist nicht global und daher ist seite in der Funktion 0.
Übergib seite an die funktion als Parameter oder machs global.

Ach ja: beim Erstellen brauchst du keine for next zu machen, da Du es eh nur einmal durchlaufen lässt.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Rone

BeitragDi, Jul 11, 2006 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

dein "Seite" ist local und deshalb bei deiner abfrage 0.

Außerdem würde ich den gegnerTyp um das Attribut "Seite" erweitern...

Code: [AUSKLAPPEN]

Type gegner
        Field x
        Field y
        Field Seite
End Type

Function Move()
   For gner.gegner = Each gegner
      Select gner\seite
         Case 1
            gner\x = gner\x + 3
            gner\y = gner\y + 0
         Case 2
            gner\x = gner\x - 3
            gner\y = gner\y + 0
      End Select     
   Next
End Function
 


mfg
Rone

Edit: Mist, zu spät... Smile

BigPingu

BeitragDi, Jul 11, 2006 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
seite ist nicht global und daher ist seite in der Funktion 0.
Übergib seite an die funktion als Parameter oder machs global.

Ach ja: beim Erstellen brauchst du keine for next zu machen, da Du es eh nur einmal durchlaufen lässt.


Alles klar klappt super, allerdings kehren die Gegner jetzt bei der nächsten Gegner Erstellung um, weil eine 2 kommt und dann wieder um, wenn eine 1 kommt. Eigentlich soll er nur für die entscheiden die neu erstellt werden und nicht die bereits existierenden ändern.

Cardonic

BeitragDi, Jul 11, 2006 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Ich würde es etwa so machen : Code: [AUSKLAPPEN]
score = 0

Const screen_w = 800
Const screen_h = 600

Type enemy
   Field x  ; x-position
   Field y  ; y-position
   Field xs ; x-geschw.
   Field ys ; y-geschw.
End Type

Local a.enemy

Graphics screen_w,screen_h,32,2

SetBuffer BackBuffer()

HidePointer()

While Not KeyHit(1)

   mx = MouseX()
   my = MouseY()
   mh = MouseHit(1)

   If Rand(1,50) = 1 Then
      a.enemy = New enemy
      If Rand(0,1) = 0 Then
         a\x = 0
         a\xs = Rand(1,2)
      Else                 
         a\x = screen_w
         a\xs = Rand(-2,-1)
      EndIf
      a\y = Rand(screen_h)
      a\ys = 0
   EndIf

   Cls

   For a.enemy = Each enemy
      a\x = a\x + a\xs
      draw_enemy(a\x,a\y)
      If a\x < 0 Or a\x > screen_w Then
         Delete a
      ElseIf mx >= a\x-15 And mx <= a\x+15 And my >= a\y-15 And my <= a\y+15 And mh Then
         Delete a
         score = score + 1
      EndIf
   Next

   draw_crosshairs(mx,my)
   
   Text 10,10,"Score = "+score

   Flip

Wend

Function draw_crosshairs(x,y)
   Color(255,0,0)
   Line x-5,y,x+5,y
   Line x,y-5,x,y+5
End Function

Function draw_enemy(x,y)
   Color(0,255,0)
   Rect x-15,y-15,31,31
End Function


mfg Cardonic
If you should go skating on the thin ice of modern life, dragging behind you the silent reproach of a million tear-stained eyes, don't be surprised when a crack in the ice appears under your feet.

BigPingu

BeitragDi, Jul 11, 2006 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
@Cardonic
na doll is ja schon fast fertig das spiel ^^. So einfach wollt ichs nun auch nicht. Aber trozdem THX ich guck mal inwiefern ich mein code damit "berichtigen" kann

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group