Ja ok, aber ich hab da einige Probleme mit den Bossen, vll findet ihr ja den Fehler^^. Ich muss noch ein bisschen an den Gegnern Arbeiten, aber sonst...
If InitSprite() = 0 Or InitPalette(10) = 0 Or InitKeyboard() = 0
MessageRequester("Error", "Can't open DirectX 7 or later", 0)
End
EndIf
Global Level.w
Global Leben.w
Global Punkte.w
Level = 1
Leben = 3
Structure Bullet
x.w
y.w
Width.w
Height.w
Image.w
SpeedX.w
SpeedY.w
EndStructure
NewList Bullet.Bullet()
Structure Bullet2
x.w
y.w
Width.w
Height.w
Image.w
SpeedX.w
SpeedY.w
EndStructure
NewList Bullet2.Bullet2()
Structure Explosion
x.w
y.w
State.w
Delay.w
EndStructure
NewList Explosion.Explosion()
Structure Alien
x.w
y.w
Width.w
Height.w
Speed.w
StartImage.w
EndImage.w
ImageDelay.w
NextImageDelay.w
ActualImage.w
Armor.w
EndStructure
NewList Aliens.Alien()
Structure Boss
x.w
y.w
Width.w
Height.w
Speed.w
StartImage.w
EndImage.w
ImageDelay.w
NextImageDelay.w
ActualImage.w
Armor.w
EndStructure
NewList Boss.Boss()
Procedure AddBullet(Sprite, x, y, SpeedX, SpeedY)
AddElement(Bullet())
Bullet()\x = x
Bullet()\y = y
Bullet()\Width = SpriteWidth(Sprite)
Bullet()\Height = SpriteHeight(Sprite)
Bullet()\Image = Sprite
Bullet()\SpeedX = SpeedX
Bullet()\SpeedY = SpeedY
EndProcedure
MessageRequester("Sers!", "Das ist mein erstes ´Spiel´!"+Chr(10)+"Benutz die Pfeiltasten zum Bewegen und die Leertaste um alle Gegner zu zerstören!!"+Chr(10)+Chr(10)+"Viel Spaß

!", 0)
Path$ = "Data\"
If OpenScreen(1024, 768, 8, "Panzers2d;), BETA")
PlayerSpeedX = 20
PlayerSpeedY = 20
BulletSpeed = 30
LoadSprite(3, Path$+"Player_1.bmp", 0)
LoadSprite(0, Path$+"Player_2.bmp", 0)
LoadSprite(2, Path$+"Player_3.bmp", 0)
LoadSprite( 4, Path$+"Bullet_1.bmp", 0)
LoadSprite(9, Path$+"Boss.bmp", 0)
For k=0 To 5
LoadSprite(k+10, Path$+"Ennemy_3_"+Str(k+1)+".bmp", 0)
Next
For k=0 To 7
LoadSprite(k+20, Path$+"Explosion_"+Str(k+1)+".bmp", 0)
Next
LoadSprite(20, Path$+"Back_3.bmp", 0)
LoadPalette(1, Path$+"Back_3.bmp")
DisplayPalette(1)
SetPriorityClass_(GetCurrentProcess_(), 13);
PlayerWidth = SpriteWidth(3)
PlayerHeight = SpriteHeight(3)
PlayerX = 300
PlayerY = 400
Repeat
FlipBuffers()
If IsScreenActive()
db = 1-db
For BackX=0 To 1024 Step 32
For BackY=-32 To 768 Step 32
DisplaySprite(20, BackX, BackY+ScrollY)
Next
Next
Gosub CheckCollisions
Gosub MovePlayers
Gosub DisplayBullets
Gosub NewAlienWave
Gosub DisplayAliens
Gosub NewBossWave
Gosub DisplayBoss
Gosub DisplayExplosions
If BulletDelay > 0
BulletDelay-1
EndIf
If ScrollDelay = 0
ScrollY+1
ScrollDelay = 0
Else
ScrollDelay-1
EndIf
If ScrollY>31
ScrollY = 0
EndIf
Else
StopSound(-1)
Delay(10)
EndIf
Until KeyboardPushed(#PB_Key_Escape)
Else
MessageRequester("Waponez II", "Can't open a 640*480 8 bit screen !", 0)
EndIf
End
MovePlayers:
Fire = 0
PlayerImage = 3
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
PlayerX-PlayerSpeedX
PlayerImage = 2
EndIf
If KeyboardPushed(#PB_Key_Right)
PlayerX+PlayerSpeedX
PlayerImage = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
PlayerY-PlayerSpeedY
EndIf
If KeyboardPushed(#PB_Key_Down)
PlayerY+PlayerSpeedY
EndIf
If PlayerX < 0 : PlayerX = 0 : EndIf
If PlayerY < 0 : PlayerY = 0 : EndIf
If PlayerX > 1024-PlayerWidth : PlayerX = 1024-PlayerWidth : EndIf
If PlayerY > 768-PlayerHeight : PlayerY = 768-PlayerHeight : EndIf
If Dead = 1
Punkte = Punkte - 2
AddElement(Explosion())
Explosion()\x = PlayerX
Explosion()\y = PlayerY
Dead = 0
Else
If DeadDelay>0
DeadDelay-1
If db=1
If DeadDelay < 200
DisplayTransparentSprite(PlayerImage, PlayerX, PlayerY)
EndIf
EndIf
Else
DisplayTransparentSprite(PlayerImage, PlayerX, PlayerY)
EndIf
EndIf
If KeyboardPushed(#PB_Key_Space) Or KeyboardPushed(#pb_key_return)
If BulletDelay = 0
If DeadDelay < 100
BulletDelay = 3
AddBullet(4, PlayerX+5 , PlayerY-10, 0 , -BulletSpeed) ; Front bullet (Double bullet sprite)
EndIf
EndIf
EndIf
Return
Repeat
DisplayBullets:
ResetList(Bullet())
While NextElement(Bullet())
If Bullet()\y < 0
DeleteElement(Bullet())
Else
If Bullet()\x < 0
DeleteElement(Bullet())
Else
If Bullet()\x > 1024-Bullet()\Width
DeleteElement(Bullet())
Else
If Bullet()\y > 768
DeleteElement(Bullet())
Else
DisplayTransparentSprite(Bullet()\Image, Bullet()\x, Bullet()\y) ; Display the bullet..
Bullet()\y + Bullet()\SpeedY
Bullet()\x + Bullet()\SpeedX
EndIf
EndIf
EndIf
EndIf
Wend
Return
NewAlienWave:
If AlienDelay = 0
AddElement(Aliens())
If Boss = 1
Aliens()\x = 100
Aliens()\y = -16
Aliens()\Width = SpriteWidth(50)
Aliens()\Height = SpriteHeight(50)
Aliens()\Speed = 3
Aliens()\StartImage = 50
Aliens()\EndImage = 50
Aliens()\ImageDelay = 1
Aliens()\NextImageDelay = 1
Aliens()\ActualImage = 50
Aliens()\Armor = 20
AlienDelay = 1
Else
Aliens()\x = Random(768)
Aliens()\y = -32
Aliens()\Width = SpriteWidth(10)
Aliens()\Height = SpriteHeight(10)
Aliens()\Speed = 3
Aliens()\StartImage = 10
Aliens()\EndImage = 15
Aliens()\ImageDelay = 4
Aliens()\NextImageDelay = Aliens()\ImageDelay
Aliens()\ActualImage = 10
Aliens()\Armor = 5
AlienDelay = Random(30)
EndIf
Else
AlienDelay-1
EndIf
NewBossWave:
If Level = 10 Or Level = 20
AddElement(Boss())
If Boss = 1
Boss()\x = 100
Boss()\y = -16
Boss()\Width = SpriteWidth(50)
Boss()\Height = SpriteHeight(50)
Boss()\Speed = 7
Boss()\StartImage = 50
Boss()\EndImage = 50
Boss()\ImageDelay = 1
Boss()\NextImageDelay = 1
Boss()\ActualImage = 50
Boss()\Armor = 10
BossDelay = 1
BossDelay = 1
Boss()\x = Random(768)
Boss()\y = -32
Boss()\Width = SpriteWidth(10)
Boss()\Height = SpriteHeight(10)
Boss()\Speed = 7
Boss()\StartImage = 10
Boss()\EndImage = 15
Boss()\ImageDelay = 4
Boss()\NextImageDelay = Boss()\ImageDelay
Boss()\ActualImage = 10
Boss()\Armor = 10
BossDelay = Random(Level = Level + 10)
EndIf
Else
BossDelay-1
EndIf
Return
DisplayAliens:
ResetList(Aliens())
While NextElement(Aliens())
DisplayTransparentSprite(Aliens()\ActualImage, Aliens()\x, Aliens()\y)
Aliens()\y + Aliens()\Speed
If Aliens()\NextImageDelay = 0
Aliens()\ActualImage+1
If Aliens()\ActualImage > Aliens()\EndImage
Aliens()\ActualImage = Aliens()\StartImage
EndIf
Aliens()\NextImageDelay = Aliens()\ImageDelay
Else
Aliens()\NextImageDelay-1
EndIf
If Aliens()\Armor <= 0
Punkte = Punkte + 1
AddElement(Explosion())
Explosion()\x = Aliens()\x
Explosion()\y = Aliens()\y
DeleteElement(Aliens())
Else
If Aliens()\y > 768
DeleteElement(Aliens())
Leben = Leben - 1
EndIf
EndIf
Wend
Return
CheckCollisions:
ResetList(Aliens())
While NextElement(Aliens())
ResetList(Bullet())
While NextElement(Bullet())
If SpriteCollision(Bullet()\Image, Bullet()\x, Bullet()\y, Aliens()\ActualImage, Aliens()\x, Aliens()\y)
Aliens()\Armor - 1
DeleteElement(Bullet())
EndIf
Wend
If DeadDelay = 0
If SpriteCollision(PlayerImage, PlayerX, PlayerY, Aliens()\ActualImage, Aliens()\x, Aliens()\y)
Dead = 1
DeadDelay = 200
Leben = Leben - 1
AddElement(Explosion())
Explosion()\x = Aliens()\x
Explosion()\y = Aliens()\y
DeleteElement(Aliens())
EndIf
EndIf
Wend
Return
DisplayBoss:
ResetList(Boss())
While NextElement(Boss())
DisplayTransparentSprite(Boss()\ActualImage, Boss()\x, Boss()\y)
Boss()\y + Boss()\Speed
If Boss()\NextImageDelay = 0
Boss()\ActualImage+1
If Boss()\ActualImage > Boss()\EndImage
Boss()\ActualImage = Boss()\StartImage
EndIf
Boss()\NextImageDelay = Boss()\ImageDelay
Else
Boss()\NextImageDelay-1
EndIf
If Boss()\Armor <= 0
Leben = Leben + 1
Punkte = Punkte + 5
AddElement(Explosion())
Explosion()\x = Boss()\x
Explosion()\y = Boss()\y
DeleteElement(Boss())
Else
If Boss()\y > 768
DeleteElement(Boss())
Leben = Leben - 3
EndIf
EndIf
Wend
Return
ResetList(Boss())
While NextElement(Boss())
ResetList(Bullet())
While NextElement(Bullet())
If SpriteCollision(Bullet()\Image, Bullet()\x, Bullet()\y, Boss()\ActualImage, Boss()\x, Boss()\y)
Boss()\Armor - 1
DeleteElement(Bullet())
EndIf
Wend
If DeadDelay = 0
If SpriteCollision(PlayerImage, PlayerX, PlayerY, Boss()\ActualImage, Boss()\x, Boss()\y)
Dead = 1
DeadDelay = 200
Leben = Leben - 1
AddElement(Explosion())
Explosion()\x = Boss()\x
Explosion()\y = Boss()\y
DeleteElement(Boss())
EndIf
EndIf
Wend
Return
DisplayExplosions:
ResetList(Explosion())
While NextElement(Explosion())
DisplayTransparentSprite(Explosion()\State+20, Explosion()\x, Explosion()\y)
If Explosion()\Delay = 0
If Explosion()\State = 0
EndIf
If Explosion()\State < 7
Explosion()\State+1
Explosion()\Delay = 1
Else
DeleteElement(Explosion())
EndIf
Else
Explosion()\Delay-1
EndIf
Wend
StartDrawing(ScreenOutput())
DrawingMode(1)
Locate(512,1)
FrontColor(0,0,255)
DrawText("Punkte:" + Str(Punkte))
Locate(512,10)
FrontColor(255,0,0)
DrawText("Leben:" + Str(Leben))
Locate(512,20)
FrontColor(0,255,0)
DrawText("Level:" + Str(Level))
StopDrawing()
If (Punkte / 7) + 1 > Level
Level = Level + 1
EndIf
Until KeyboardPushed(1) Or Leben < 1 Or Punkte < 0
Delay(1000)
CloseScreen()
MessageRequester("Game Over", "Du hast " + Str(Punkte) + " Punkte erreicht",0)