Space Invader vereinfachen

Anfängerfragen zum Programmieren mit PureBasic.
Darkvision
Beiträge: 1
Registriert: 28.02.2011 16:38

Space Invader vereinfachen

Beitrag von Darkvision »

Einen Schönen guten Tag,
da ich relativ neu in der PB Szene bin aber schon einige Erfahrung aus anderen Programmiersprachen mitgebracht habe, wollte ich einmal um evtl. verbesserungsvorschläge meines Klassikerremakes space invader bitten.
Des weiteren hab ich noch keine Idee wie ich das mit den eigenen häusern(oder auch Schutzschilden) welche sich ja von beiden Seiten "zerschießen lassen" anfangen soll.
und eine Idee für einen kontinuierlichen Gegner spawn loop ohne das sich gegner überschneiden wäre auch gut :)

wäre nett wenn der ein oder andere mal drüber gucken könnte.
Dank im vorraus

die Initsystem.Pb voraus:

Code: Alles auswählen

width = 800
height = 600

If Not OpenWindow(0,0,0,width,height,"Invasion", #PB_Window_ScreenCentered)
  End
EndIf
If Not InitKeyboard()
  End
EndIf 
If Not InitSprite()
  End
EndIf
If Not OpenWindowedScreen(WindowID(0),0,0,width,height,0,0,0)
  End
EndIf
If Not LoadFont(0, "OCR A Std", 80) 
  End 
EndIf

und die invasion hinterher
dazu noch gesagt die bilder sind alles mit paint gemacht also 30sek arbeit...
ship ist 50x25 px und der rest ist 50x50 px...

Code: Alles auswählen

IncludeFile "Initsystem.pb"

LoadSprite (0, "ship.bmp")
LoadSprite (2, "enemy.bmp")
LoadSprite (3, "explode.bmp")

If Not CreateSprite (1, 2, 10)
  End
EndIf
If StartDrawing(SpriteOutput(1))    ;Mal mir einen hübschen Schuss
  Box (0,0,2,10,$FFFFFF)
  StopDrawing()
EndIf

Define x = 375        ;Spieler Position
Define  shot = 0      ;Ist geschossen oder nicht?
Define tx = 20        ;targetx also X Position des Gegners
Define ty = 20        ;targety also Y Position des Gegners
Define zrichtung = 0  ;Richtung des Gegners 0 = rechts  1 = links
Define Speed = 1      ;Geschwindigkeit des Gegners 1px pro frame
Define hit = 0        ;Ist getroffen oder nicht?
Define sx = -10       ;shotx also X Position des Schusses
Define sy = -10       ;shoty also Y Position des Schusses

Repeat
  ExamineKeyboard()
  ClearScreen(RGB(0,0,0))
  
  DisplaySprite(0,x,575)
  DisplaySprite(2,tx,ty)
  DisplaySprite (1,sx,sy)
  
  
  If KeyboardPushed(#PB_Key_Right)  ;Wenn Rechts gedrückt wird Player nach rechts
    If x => 750                     ;bis zum Ende, dann stehenbleiben
      x = 750
    Else
      x + 3
    EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Left)   ;Wenn links gedrückt wird Player nach links
    If x =< 0                       ;bis zum Ende, dann stehenbleiben
      x = 0
    Else
      x - 3
    EndIf
  EndIf
  
  If shot = 1                       ;Man darf nur einmal schließen bis der schuss
    If sy =< -10                    ;außerhalb des Bildes ist
      shot = 0
    Else
      sy - 5
    EndIf
  EndIf
  
  If KeyboardPushed(#PB_Key_Space) And shot = 0  ;Wenn ich schießen darf
    sx = x + 25                                   ; Dann die Koordinaten des Schusses
    sy = 565                                      ; Auf die des Spielers
    shot = 1
  EndIf

  If sx => tx And sx =< tx + 50 And sy => ty And sy =< ty + 50  ;Wenn Schusskoordinaten = Gegnerkoordinaten
    hit = 1                                                       ;Dann getroffen
  EndIf
  If hit = 0                 ;Wenn nicht getroffen fliege in Richtung bis zum Rand
    If zrichtung = 0        
      If tx => 750 
       tx = 750               ;Dann 20px nach unten und Richtung umkehren
       ty + 20
       zrichtung = 1
     Else
       tx + speed
     EndIf  
   Else
      If tx =< 0              ;Das gleiche in der anderen Richtung
       tx = 0
        ty + 20
        zrichtung = 0
     Else
        tx - speed
     EndIf
   EndIf
 Else                       ;Wenn getroffen
   DisplaySprite(3,tx,ty)   ; Zeige explosion
   hit = 0                  ;setze auf nicht getroffen
   tx = 900                 ;setze Gegner unter den Spieler
   ty = 900
   shot = 0                 ;und setze auf Schussfreigabe
 EndIf
 
 If shot = 0                ;damit der Schuss nicht im Gegner hängen bleibt
   sx = -10                 ;setze ihn außerhalb
   sy = -10
 EndIf
   
  FlipBuffers()
    
  While WindowEvent()
  Wend 
Until KeyboardReleased(#PB_Key_Escape)