Code archives/Miscellaneous/Simple Test Game Vertical Shooter
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This is a Remake of an C64 game Called Asteroid Wars. It is not 100% Remake, it was made from the Memory. It is also Game which i have wrotten for the learning purpose. Screenshot: http://www.pic-upload.de/view-26857282/sshot.jpg.html You can download the source code, compiled .exe and the media from Please read the Readme included in the .7zip archive. | |||||
;Testshooter by Dan (found at www.blitzbasic.com)
ScrW=320
ScrH=240
frameTimer=CreateTimer(60)
;AppTitle "Testshooter", "Quit Game:"
Graphics ScrW*4,ScrH*4,0,2 ;<-- This sets the window to be 640,480
Graphics ScrW,ScrH,0,3 ;<-- The 3 tells it to only change the resolution, not the window size.
SeedRnd MilliSecs
SetBuffer BackBuffer()
Viewport 0,0,320,240
Title=LoadImage("Title.bmp")
DrawImage Title,0,0
Text 80,122,"Game Data is loading"
Text 80,132,"Please Wait"
Tile0=LoadImage("Tile.bmp")
Tile1=LoadImage("Tile1.bmp")
Tile2=LoadImage("Tile2.bmp")
Tile3=LoadImage("Tile3.bmp")
Tile4=LoadImage("Tile4.bmp")
Tile5=LoadImage("Tile5.bmp")
Tile6=LoadImage("Tile6.bmp")
Tile7=LoadImage("Tile7.bmp")
Tile8=LoadImage("Tile8.bmp")
Tile=Tile0
w=0
Wall1=LoadImage("Wall.bmp")
Wall2=LoadImage("Wall1.bmp")
Wall=Wall1
Ship=LoadAnimImage("MyShip.bmp",16,16,0,3)
Laser=LoadImage("MyShipLaser.bmp")
Enemy=LoadImage("Enemy.bmp")
Delay 1000
Flip
DrawImage Title,0,0
Text 80,122,"Game is Ready"
Text 80,132,"Press Fire"
Flip
Repeat
Until KeyDown(157)
Flush()
Type Bull
Field x,y
End Type
Type Eship
Field x
Field y
Field x1
Field y1
Field state
End Type
DiffTime=300 ;Bullet time to shoot
offset=-24
offwall1=-16
offwall2=-16
offwall3=-16
offwall4=-16
.start
an=1
Score=0
XPos=152
Bullet=1
BullSy=220
time=MilliSecs()
BullTime=MilliSecs()
Etime=MilliSecs()
WallChange=MilliSecs()
Ediff=1500
Enmy=0
dead=0
wave=0
MaxBull=5
Repeat
Update=MilliSecs()
Gosub Drawtile
Gosub DrawWall
Gosub DrawShip
If KeyDown(157) And ((MilliSecs()-BullTime)>DiffTime) Then
If (Bullet<=MaxBull) Then
Bullet=Bullet+1
Missile.Bull=New Bull
Missile\x=Xpos
missile\y=BullSy
BullTime=MilliSecs()
EndIf
EndIf
Gosub Shoot
Gosub DrawEnemy
esc=KeyDown(1)
Text 1,1,"Score:"+Score
Repeat
Until MilliSecs() > Update+12
WaitTimer(frameTimer)
Flip True
Until esc Or dead=1
Flush()
Repeat
Update=MilliSecs()
Gosub Drawtile
Gosub DrawWall
WaitTimer(frameTimer)
Flip 1
Repeat
Until MilliSecs() > Update+8
Until (Not KeyDown(1)) And (Not KeyDown(157))
Flush()
DHelp=MilliSecs()
DTrack=0
Help$=""
Repeat
Update=MilliSecs()
Gosub Drawtile
Gosub DrawWall
Gosub DrawHelp
Text 1,1,"Score:"+Score
Text 120,122,"Game Over"
Text 160-((Len(Help$)/2)*FontWidth()),122+FontHeight(),Help$
esc=KeyDown(1)
fire=KeyDown(157)
Repeat
Until MilliSecs() > Update+8
WaitTimer(frameTimer)
Flip 1
Until esc Or fire
Flush()
If fire Then Delete Each Eship : Delete Each Bull :Goto start
End
.DrawHelp
If MilliSecs()-Dhelp>1500
DHelp=MilliSecs()
DTrack=DTrack+1
Select DTrack
Case 4
Help$="Press fire (ctrl) to start"
Case 6
Help$="Press 1-9"
Case 8
Help$="To Change Background"
Case 10
Help$="Press 0"
Case 12
Help$="To Change the Wall"
Case 15
Help$=""
Dtrack=0
End Select
End If
Return
.Drawtile
If KeyDown(2) Then Tile=Tile0
If KeyDown(3) Then Tile=Tile1
If KeyDown(4) Then Tile=Tile2
If KeyDown(5) Then Tile=Tile3
If KeyDown(6) Then Tile=Tile4
If KeyDown(7) Then Tile=Tile5
If KeyDown(8) Then Tile=Tile6
If KeyDown(9) Then Tile=Tile7
If KeyDown(10) Then Tile=Tile8
If KeyDown(11) And (MilliSecs() - WallChange)>1000
w=w+1 : If w=2 Then w=0
Select w
Case 0: Wall=Wall1
Case 1: Wall=Wall2
End Select
WallChange=MilliSecs()
EndIf
offset=offset+1: If offset =0 Then offset=-128
For x=64 To 255 Step 128
For y=1 To 264 Step 128
DrawBlock Tile,x,offset+y
Next
Next
;Color 0,0,0
;Rect 256,0,64,240,1
;Color 255,255,255
Return
.Shoot
If Bullet>0 Then
For missile.bull = Each Bull
missile\y=missile\y-3
If missile\y<-16 Then
Delete missile.bull
bullet=bullet-1
Else
DrawImage Laser,missile\x,missile\y
EndIf
Next
EndIf
Return
.DrawWall
Offwall1=Offwall1+5:If offwall1=>0 Then offwall1=-16
Offwall2=Offwall2+4:If offwall2=>0 Then offwall2=-16
Offwall3=Offwall3+3:If offwall3=>0 Then offwall3=-16
Offwall4=Offwall4+2:If offwall4=>0 Then offwall4=-16
For x=0 To 3
For y=0 To 16
Select x
Case 0
DrawBlock Wall,x*16,Offwall1+(y*16)
DrawBlock Wall,304-(x*16),Offwall1+(y*16)
Case 1
DrawBlock Wall,x*16,Offwall2+(y*16)
DrawBlock Wall,304-(x*16),Offwall2+(y*16)
Case 2
DrawBlock Wall,x*16,Offwall3+(y*16)
DrawBlock Wall,304-(x*16),Offwall3+(y*16)
Case 3
DrawBlock Wall,x*16,Offwall4+(y*16)
DrawBlock Wall,304-(x*16),Offwall4+(y*16)
End Select
Next
Next
Return
.DrawShip
If KeyDown(203) Then Xpos=Xpos - 5
If KeyDown(205) Then Xpos=Xpos + 5
If Xpos<=64 Then Xpos=64
If Xpos=>241 Then Xpos=241
If MilliSecs()-time>70 Then time=MilliSecs(): an=an+1:If an=3 Then an=0
DrawImage Ship,XPos,220,2-an
Return
.DrawEnemy
;x,y,x1,y1,state
If (MilliSecs()-Etime)>Ediff Then
; wave=0 - Start or the enemies are hit or out of screen
If wave=0 Then
wave=Rnd(1,5)
ShipClass=Rnd(1,2)
If ShipClass=1
FreeImage Enemy
Enemy=LoadImage("Enemy.bmp")
Else
FreeImage Enemy
Enemy=LoadImage("Enemy1.bmp")
EndIf
Select wave
Case 1
Restore wav1
Read Enr,ESTx,ESTy,ESPx,ESPy
Case 2
Restore wav2
Read Enr,ESTx,ESTy,ESPx,ESPy
Case 3
Restore wav3
Read Enr,ESTx,ESTy,ESPx,ESPy
Case 4
Restore wav4
Read Enr,ESTx,ESTy,ESPx,ESPy
Case 5
Enr =Rnd(1,15)
ESTx=Rnd(70,218)
ESTy=-20
ESPx=0
ESPy=Rnd(2,4)
End Select
Else
; Move enemies
If Enmy<Enr Then
Enmy=Enmy+1
hip.Eship = New Eship
hip\State=1
hip\x=ESTx
hip\y=ESTy
hip\X1=ESPx
hip\Y1=ESPy
EndIf
EndIf
Ediff=150
Etime=MilliSecs()
EndIf
For hip.eship = Each Eship
hip\X=hip\x+hip\x1
hip\Y=hip\Y+hip\y1
If hip\X<=64 Then hip\x=65 : hip\x1=hip\x1*(-1)
If hip\X=>241 Then hip\x=240 : hip\x1=hip\x1*(-1)
If (hip\Y>280 And b<199) Then
Delete hip.eship
b=b+1 : If b=>enr Then b=200
Else
DrawImage Enemy,hip\x,hip\y
EndIf
If hip.eship <> Null Then
If ImagesCollide(Enemy,hip\x,hip\y,0,Ship,xpos,220,2-an) Then
Dead=1
EndIf
EndIf
For missile.bull=Each Bull
If hip.eship<>Null And Missile.bull<>Null Then
If ImagesOverlap(Laser,missile\x,missile\y,Enemy,hip\x,hip\y) Then
Delete hip.eship
Delete missile.bull
b=b+1 : If b=>enr Then b=200
bullet=bullet-1
Score=Score+1
EndIf
EndIf
Next
Next
If b=>200 Then
b=0
Enmy=0
Ediff=2000
Etime=MilliSecs()
wave=0
EndIf
Return
.wav1
Data 3,100,-16,1,2
.wav2
Data 5,240,-16,2,1
.wav3
Data 7,200,-16,-3,1
.wav4
Data 10,69,-16,1,1
Function Flush()
FlushKeys
FlushJoy
FlushMouse
End Function |
Comments
| ||
| Thanks for sharing. |
| ||
There is a small update/change to the code:
Enemy=LoadImage("Enemy.bmp")
should be replaced with
Enemy1=LoadImage("Enemy.bmp")
Enemy2=LoadImage("Enemy1.bmp")
and
If ShipClass=1
FreeImage Enemy
Enemy=LoadImage("Enemy.bmp")
Else
FreeImage Enemy
Enemy=LoadImage("Enemy1.bmp")
EndIf
with
If ShipClass=1
Enemy=Enemy1
Else
Enemy=Enemy2
EndIf
|
Code Archives Forum