horizontal Shoot em up in Object Oriented
BlitzMax Forums/BlitzMax Beginners Area/horizontal Shoot em up in Object Oriented| 
 | ||
| I cant seem get working for some reason and does anyone know what wrong with the code blow? 
Global SX       ' Position the Player X
Global SY       ' Position the Player Y
Global X        ' X for moving the background otherwise it wouldnt move!
Graphics 640,480,0
Global Level_1:TImage=LoadImage("Level1.png")
Global Spaceship:TImage =LoadImage("SPACESHIP.png")
Global TPlayer:Player
Global TBackground:Background_Level
SX=100
SX=100
Type Player
     Field SX,SY
     Method Move()
          ' Move Up
          If KeyDown(KEY_UP)
             SY=SY-1
          EndIf
          ' Move Down
          If KeyDown(KEY_DOWN)
             SY=SY+1
          EndIf
         ' Move Right
         If KeyDown(KEY_RIGHT)
            SX=SX+1
         EndIf
         If KeyDown(KEY_LEFT)
            SX=SX-1
         EndIf
         DrawImage Spaceship,SX,SY
     End Method
End Type
Type Background_Level
     Field X
     Method Move()
        
         DrawImage Level_1,X,0
         X=X-1
    
    End Method
End Type
While Not KeyDown(1)
      Cls
      TBackground.Move()
      Tplayer.Move()
      Flip
Wend
 | 
| 
 | ||
| Global TPlayer:Player Global TBackground:Background_Level That declares variables, but does not create anything. The Language Reference has a section on user defined types. One way to do this: Global TPlayer:Player Global TBackground:Background_Level TPlayer = New Player TBackGround = New Background_level | 
| 
 | ||
| It is work :) Thank you so much! I need to added shooter end of the spaceship. For Enemys? IF the Enemys come on screen and I do need timer Enemys waves so often? IF Enemys go off(for example passing me then off the screen) the screen then I have delete them otherwise it would slow the game. | 
| 
 | ||
| Why isnt the Bullets isnt working? 
Global SX   ' Position the Player X
Global SY   ' Position the Player Y
Global X    ' X for moving the background otherwise it wouldnt move!
Global bullet_x, bullet_y
Global bullet_Enabled
Graphics 640,480,0
Global Level_1:TImage=LoadImage("Level1.png")
Global Spaceship:TImage =LoadImage("SPACESHIP.png")
Global TPlayer:Player
Global TBackground:Background_Level
TPlayer = New Player
TBackGround = New Background_level
Type Player
     Field SX=100,SY=100
     Field Bullet_X=SX
     Field Bullet_Y=SY
     Field Bullet_Enabled=False
     Field SIZE=10
     Method Move()
          ' Move Up
          If KeyDown(KEY_UP)
             SY=SY-1
          EndIf
          ' Move Down
          If KeyDown(KEY_DOWN)
             SY=SY+1
          EndIf
         ' Move Right
         If KeyDown(KEY_RIGHT)
            SX=SX+1
         EndIf
         If KeyDown(KEY_LEFT)
            SX=SX-1
         EndIf
         DrawImage Spaceship,SX,SY
     End Method
     Method Update()
            If KeyHit(57) Then
               bullet_Enabled = True
               bullet_X = SX + 10
               bullet_Y = SY + 10
            EndIf
            If bullet_Enabled = True Then
               bullet_X = bullet_X + 15
               SetColor 255,0,0
               DrawRect bullet_X,bullet_Y,SIZE,SIZE
            EndIf
    End Method
End Type
Type Background_Level
     Field X
     Method Move()
        
         DrawImage Level_1,X,0
         X=X-1
    
    End Method
End Type
While Not KeyDown(KEY_ESCAPE)
      Cls
      ' Move the Background Scrolling
      TBackground.Move()
      ' Move the Player by using Keyboards
      Tplayer.Move()
      Tplayer.Update()
      ' Draw Everyhings!
      Flip
Wend
 | 
| 
 | ||
| I got the shooter working now :-) Next up...Time to put some Enemys in here and there | 
| 
 | ||
| Would be better if I used Link Lists for enemys and if the enemys get killed then I can remove them easily. | 
| 
 | ||
| If it works then why not? If there is an easy solution that does the job then use that one. Seems you've found it. | 
| 
 | ||
| I am trying to create link lists with bullets which make easier for me to remove them if shoot enemys or go off the screen but I got error saying Listremove not found. It is also good things to have Attacking enemys waves in link lists too if player kill some enemys then I can remove them when they been killed? 
Global Bullet:TList
 Method Update()
            If KeyHit(KEY_SPACE) Then
               bullet_Enabled = True
               bullet_X = SX + 15
               bullet_Y = SY + 10
               Bullet = CreateList() 
            EndIf
            If bullet_Enabled = True Then
               bullet_X = bullet_X + 15
               DrawRect bullet_X,bullet_Y,SIZE,SIZE
               Bullet.ListRemove()
            EndIf
 end method
 | 
| 
 | ||
| You normally don't (re)create your bullet list every time you fire a bullet. What you'd do instead is have a persistent List which you then add "bullets" to when fired, and when they are finished, remove them from the list. You can use list.AddLast(bullet object) and list.Remove(bullet object), although the Remove() method is not very efficient for large lists (not a problem if you only have a few bullets). |