Code: Select all
SCREEN 800,600
Type alus
Field suunta
Field x
Field y
Field kuva$
Field aseet$
Field hp
Field leveys
Field reload
Field xsuunta
End Type
Type ammus
Field x
Field y
Field suunta
End Type
Type bonus
Field x
Field y
Field malli
End Type
Type partikkeli
Field x#
Field y#
Field vauhtix#
Field vauhtiy#
Field txt$
Field kesto
Field väri$
End Type
Global SW,SH
Sw=ScreenWidth()
sh=ScreenHeight()
Global aluksia, taso
Const kentänpituus = 1000
Const Tasokatto = 50
Const Maksimivihollismäärä = 130
DrawToWorld OFF,OFF,ON
TASO=1
AddAlus(0,0,1,"0|4|A|64|64|64 -6|0|/|96|96|96 6|0|\|96|96|96 10|0|/|128|128|128 -10|0|\|128|128|128", "13|0|1 -13|0|1")
While Not Taso>Tasokatto
For i=1 To 10+TASO*((Maksimivihollismäärä-10)/Tasokatto)
AddAlus(Rand(-sw/2,sw/2),CameraY()+sh/2+Rand(kentänpituus*2),-1,"0|0|V|128|128|128 6|0|/|96|96|96 -6|0|\|96|96|96","0|0|1")
Next i
Paikka=CameraY()+200
While Not aluksia=1
UpdateAlukset()
UpdateAmmukset()
UpdatePartikkelit()
If CameraY()-300<paikka Then
If Not Taso Mod 5 Then Color 0,255,0 Else Color cbwhite
Text -50,Paikka,"LEVEL "+TASO
EndIf
'
DrawToWorld OFF,OFF,OFF
Color cbwhite
Text 0,0,aluksia+" "+FPS()
DrawToWorld OFF,OFF,ON
DrawScreen
Wend
TASO+1
Wend
Function UpdateAlukset()
For a.alus=Each alus
For i=1 To CountWords(a\kuva)
x=GetWord(GetWord(a\kuva,i),1,"|")
y=GetWord(GetWord(a\kuva,i),2,"|")
txt$=GetWord(GetWord(a\kuva,i),3,"|")
r=GetWord(GetWord(a\kuva,i),4,"|")
g=GetWord(GetWord(a\kuva,i),5,"|")
b=GetWord(GetWord(a\kuva,i),6,"|")
Color r,g,b
Text Int(a\x+x),Int(a\y+y),txt
Next i
If a\suunta=1 Then
a\x=a\x+(RightKey()-LeftKey())*3
a\y=a\y+a\suunta+((UpKey()-DownKey()))
If Rand(3)=1 Then AddPartikkeli(a\x,a\y+3,".",100+Rand(200),Rnd(-0.5,0.5),0,"255,"+Str(Rand(200,128))+",0")
If KeyDown(157) And a\reload=0 Then
a\reload=Shoot(a\x,a\y,a\suunta,a\reload,a\aseet)
EndIf
PositionCamera 0,a\y+200
Else
If a\xsuunta=0 Then a\xsuunta=Rand(1,-1)
a\x=a\x+a\xsuunta
If Rand(200)=1 And a\xsuunta Then a\xsuunta=a\xsuunta*-1
If Rand(3)=1 Then AddPartikkeli(a\x,a\y+8,".",100+Rand(200),Rnd(-0.5,0.5),0,"255,"+Str(Rand(200,128))+",0")
a\y=a\y+a\suunta
If a\reload=0 And Rand(10)=1 And a\y<CameraY()+sh/2+50 Then
a\reload=Shoot(a\x,a\y,a\suunta,a\reload,a\aseet)
EndIf
EndIf
If a\reload>0 Then a\reload=a\reload-1
If a\hp<=0 Then
For y=1 To 50
AddPartikkeli(a\x+Rand(-2,2),a\y+Rand(-2,2),".",300+Rand(300),Rnd(-1.5,1.5),Rnd(-1.5,1.5),"255,"+Str(Rand(200,128))+",0")
Next y
Delete a
aluksia-1
ElseIf a\y<CameraY()-sh/2-50
Delete a
aluksia-1
EndIf
Next a
End Function
Function Shoot(_x,_y,_suunta,reload,_aseet$)
For f=1 To Int(CountWords(_aseet$," "))
txt$=GetWord(_aseet$,f)
x=GetWord(txt$,1,"|")
y=GetWord(txt$,2,"|")
tyyppi=GetWord(txt$,3,"|")
Select tyyppi
Case 1
AddAmmus(_x+x,_y+y,_suunta)
reload=25
End Select
Next f
Return reload
End Function
Function AddAlus(_x,_y,_suunta,_kuva$,_aseet$)
a.alus=New(alus)
a\x=_x
a\y=_y
a\suunta=_suunta
a\kuva=_kuva$
a\aseet=_aseet$
minx=0
maxx=0
For i=1 To CountWords(a\kuva)
x=GetWord(GetWord(a\kuva,i),1,"|")
If x>maxx Then maxx=x
If x<minx Then minx=x
Next i
a\leveys=(maxx-minx)
a\hp=3
aluksia+1
End Function
Function AddPartikkeli(_x#,_y#,_txt$,_aika,_vx#,_vy#,_väri$)
a.partikkeli=New(partikkeli)
a\x=_x#
a\y=_y#
a\txt=_txt$
a\vauhtix=_vx#
a\vauhtiy=_vy#
a\kesto=Timer()+_aika
a\väri=_väri$
End Function
Function UpdatePartikkelit()
For p.partikkeli = Each partikkeli
p\x=p\x+p\vauhtix
p\y=p\y+p\vauhtiy
Color int(GetWord(p\väri,1,",")),int(GetWord(p\väri,2,",")),int(GetWord(p\väri,3,","))
Text p\x,p\y,p\txt
If p\kesto<Timer() Then Delete p
Next p
End Function
Function AddAmmus(_x,_y,_suunta)
a.ammus=New(ammus)
a\x=_x
a\y=_y
a\suunta=_suunta
End Function
Function UpdateAmmukset()
poisto=0
For a.ammus=Each ammus
If a\suunta=1 Then Color 0,255,0 Else Color 255,0,0
Text a\x,a\y,"|"
a\y=a\y+a\suunta*5
For b.alus=Each alus
If b\suunta=1 Then
If Distance(a\x,a\y,b\x,b\y)>800 Then poisto=1
EndIf
If b\suunta<>a\suunta Then
If Distance(a\x,a\y,b\x,b\y)<10 Then
b\hp-1
If b\x<a\x Then
kerroin=1
Else
kerroin=-1
EndIf
For y=1 To 3
AddPartikkeli(b\x+Rand(-2,2),b\y+Rand(-2,2),".",500,Rnd(1,2)*kerroin,a\suunta,"255,196,0")
Next y
poisto=1
EndIf
EndIf
If poisto Then Goto poistetaan
Next b
If poisto Then
poistetaan:
Delete a
poisto=0
EndIf
Next a
End Function