Huvittava peli tuo MAV sain 12 pistettä vaan sitten rupesi tulemaan niin nopeasti niitä maveja, että ei pysynyt perässä.
Code: Select all
Type Ammukset
Field AmX
Field AmY
Field AmMX
Field AmMY
Field VasTaiPel
EndType
Type Vastustajat
Field VasAmpuu
Field VasX
Field VasY
Field VasVauhti
Field VasTeho
Field VasAngle As Float
EndType
NextSpawn=Rand(60,180)
Armori=1000
Angle=0 As Float
Vauhti=0 As Float
SpAngle=0 As Float
Const ScreenW=500
Const ScreenH=500
SCREEN ScreenW,ScreenH
FrameLimit 60
Dim Tähti(75,75,75)
For i = 1 To 75
Tähti(i,0,0)=Rand(0,ScreenW)
Tähti(0,i,0)=Rand(0,ScreenH)
Tähti(0,0,i)=Rand(1,2)
Next i
Repeat
SetWindow "Armori:"+Armori+" - Pisteet:"+Pisteet
Aika+1: Pisteet+1
If (Aika Mod 20)=0 Then Armori+1
If Armori>1000 Then Armori = 1000
If Tähtiä=0 Then Gosub Tähdet
Alus(angle,X,Y): Gosub Liikkuminen: Gosub AmmustenLiike: Gosub vastukset
If (Aika Mod NextSpawn)=0 Then Gosub VastustenLuonti: Aika=0
If KeyHit(CbKeySpace) Then
If Tähtiä=0 Then Tähtiä=1 Else Tähtiä=0
EndIf
If LeftKey() Then Angle+3
If RightKey() Then Angle-3
If UpKey() Then Vauhti+30: SpAngle=Angle
If DownKey() Then Vauhti-25: SpAngle=Angle
If KeyDown(CbKeyLControl) And Reload=0 Then Kumpi=0: Gosub AmmustenLuonti
If Reload>0 Then Reload-1
If Armori<1 Then MakeError "Sait "+Pisteet+" pistettä!"
DrawScreen
Forever
VastustenLuonti:
NextSpawn=Rand(150-Lol,270-LoL)
If NextSpawn<30 Then NextSpawn=30
Lol+1
Vas.Vastustajat=New(Vastustajat)
AloitusKulma=Rand(0,3)
If AloitusKulma=0 Then
vas\vasX=Rand(-ScreenW/2+10,ScreenW/2-10)
vas\vasY=-ScreenH/2-10
vas\vasangle=Rand(225,315)
EndIf
If AloitusKulma=1 Then
vas\vasX=Rand(-ScreenW/2+10,ScreenW/2-10)
vas\vasY=ScreenH/2-10
vas\vasangle=Rand(45,135)
EndIf
If AloitusKulma=2 Then
vas\vasX=-ScreenH/2-10
vas\vasY=Rand(-ScreenH/2+10,ScreenH/2-10)
vas\vasangle=Rand(-45,45)
EndIf
If AloitusKulma=3 Then
vas\vasX=ScreenH/2-10
vas\vasY=Rand(-ScreenH/2+10,ScreenH/2-10)
vas\vasangle=Rand(135,225)
EndIf
vas\VasVauhti=Rand(4,8)
vas\VasTeho=Rand(25,75)
Return
Vastukset:
For vas.vastustajat=Each vastustajat
AlusRikki=0
If Vas\Vasampuu<120 Then Vas\VasAmpuu+Vas\VasVauhti Else Vas\VasAmpuu=0: Kumpi=1: Äks=Vas\VasX: Yy=Vas\VasY: Gosub AmmustenLuonti
Vas\VasX=Vas\VasX+Cos(Vas\VasAngle)*Vas\VasVauhti
Vas\VasY=Vas\VasY-Sin(Vas\VasAngle)*Vas\VasVauhti
VusAngle=Vas\VasAngle: VusX=Vas\VasX: VusY=Vas\VasY
If Vas\VasX>(ScreenW/2)+10 Or Vas\VasX<-(ScreenW/2)-10 Or Vas\VasY>(ScreenH/2)+10 Or Vas\VasY<-(ScreenH/2)-10 Then AlusRikki=1
For Panokset.Ammukset=Each Ammukset
If panokset\VasTaiPel=0 Then
If Distance(Panokset\AmX-(ScreenW/2),Panokset\AmY-(ScreenH/2),Vas\VasX,Vas\VasY)<20 Then AlusRikki=1: Pisteet+250
EndIf
Next Panokset
If Distance(X,Y,Vas\VasX,Vas\VasY)<35 Then AlusRikki=1: Armori-120
If AlusRikki=1 Then Delete vas
VastusAlus(VusAngle,VusX,VusY)
Next vas
Return
AmmustenLuonti:
If Kumpi=0 Then
Reload=9
Panokset.Ammukset=New(Ammukset)
Panokset\AmX=(ScreenW/2)+X+Cos(WrapAngle(Angle))*20
Panokset\AmY=(ScreenH/2)+Y-Sin(WrapAngle(Angle))*20
Panokset\AmMX=Cos(WrapAngle(Angle))*11
Panokset\AmMY=-Sin(WrapAngle(Angle))*11
Panokset\VasTaiPel=0
EndIf
If Kumpi=1 Then
Panokset.Ammukset=New(Ammukset)
Panokset\AmX=(ScreenW/2)+Äks+Cos(WrapAngle(GetAngle(Äks,Yy,X,Y)))*17
Panokset\AmY=(ScreenH/2)+Yy-Sin(WrapAngle(GetAngle(Äks,Yy,X,Y)))*17
Panokset\AmMX=Cos(GetAngle(Äks,Yy,X,Y))*5
Panokset\AmMY=-Sin(GetAngle(Äks,Yy,X,Y))*5
Panokset\VasTaiPel=1
EndIf
Return
AmmustenLiike:
For Panokset.Ammukset=Each Ammukset
PanosTuhoutuu=0
Panokset\AmX+Panokset\AmMX
Panokset\AmY+Panokset\AmMY
If Panokset\VasTaiPel=0 Then Color CbDarkRed: Circle Panokset\AmX-2,Panokset\AmY-2,5,0 Else Color CbDarkGreen: Circle Panokset\AmX-2,Panokset\AmY-2,5,0
If Panokset\AmX>ScreenW Or Panokset\AmX<0 Or Panokset\AmY>ScreenH Or Panokset\AmY<0 Then PanosTuhoutuu=1
If Panokset\VasTaiPel=1 Then
For vas.vastustajat=Each Vastustajat
If Distance(Panokset\AmX-(ScreenW/2),Panokset\AmY-(ScreenH/2),X,Y)<35 Then PanosTuhoutuu=1: Armori=Armori-vas\VasTeho
Next vas
EndIf
If PanosTuhoutuu=1 Then Delete Panokset
Next Panokset
Return
Liikkuminen:
If Vauhti>=3 Then
Vauhti-10
X=X+Cos(SpAngle)*(Vauhti/200): Y=Y-Sin(SpAngle)*(Vauhti/200)
EndIf
If Vauhti>1000 Then Vauhti=1000
If Vauhti<=3 Then Vauhti=4
If X>(ScreenW/2)-10 Then X= (ScreenW/2)-11: Vauhti-50
If X<-(ScreenW/2)+10 Then X=-(ScreenW/2)+11:Vauhti-50
If Y>(ScreenH/2)-10 Then Y=(ScreenH/2)-11: Vauhti-50
If Y<-(ScreenH/2)+10 Then Y=-(ScreenH/2)+11: Vauhti-50
Return
Tähdet:
For i = 1 To 25
Color 255,255,255: Circle Tähti(i,0,0)-1,Tähti(0,i,0)-1,3
If (Aika Mod 2)=0 Then
Tähti(i,0,0)=Tähti(i,0,0)+Tähti(0,0,i): Tähti(0,i,0)=Tähti(0,i,0)+Tähti(0,0,i)
If Tähti(i,0,0)>ScreenW Then Tähti(i,0,0)=0: Tähti(0,0,i)=Rand(1,2)
If Tähti(0,i,0)>ScreenH Then Tähti(0,i,0)=0: Tähti(0,0,i)=Rand(1,2)
EndIf
Next i
For i = 26 To 50
Color 205,205,205: Dot Tähti(i,0,0),Tähti(0,i,0): Dot Tähti(i,0,0)+1,Tähti(0,i,0): Dot Tähti(i,0,0)-1,Tähti(0,i,0): Dot Tähti(i,0,0),Tähti(0,i,0)+1: Dot Tähti(i,0,0),Tähti(0,i,0)-1
If (Aika Mod 3)=0 Then
Tähti(0,i,0)=Tähti(0,i,0)+Tähti(0,0,i)
If Tähti(0,i,0)>ScreenH Then Tähti(0,i,0)=0: Tähti(0,0,i)=Rand(1,2)
EndIf
Next i
For i = 51 To 75
Color 105,105,105: Dot Tähti(i,0,0),Tähti(0,i,0)
If (Aika Mod 4)=0 Then
Tähti(i,0,0)=Tähti(i,0,0)-1: Tähti(0,i,0)=Tähti(0,i,0)-1
If Tähti(i,0,0)<0 Then Tähti(i,0,0)=ScreenW
If Tähti(0,i,0)<0 Then Tähti(0,i,0)=ScreenH
EndIf
Next i
Return
Function Alus(angle,X,Y)
Color CbRed
Line (ScreenW/2)+X+Cos(WrapAngle(angle))*20,(ScreenH/2)+Y-Sin(WrapAngle(angle))*20,(ScreenW/2)+X+Cos(WrapAngle(angle-135))*20,(ScreenH/2)+Y-Sin(WrapAngle(angle-135))*20
Line (ScreenW/2)+X+Cos(WrapAngle(angle+135))*20,(ScreenH/2)+Y-Sin(WrapAngle(angle+135))*20,(ScreenW/2)+X+Cos(WrapAngle(angle))*20,(ScreenH/2)+Y-Sin(WrapAngle(angle))*20
Line (ScreenW/2)+X+Cos(WrapAngle(angle))*20-1,(ScreenH/2)+Y-Sin(WrapAngle(angle))*20,(ScreenW/2)+X+Cos(WrapAngle(angle-135))*20-1,(ScreenH/2)+Y-Sin(WrapAngle(angle-135))*20
Line (ScreenW/2)+X+Cos(WrapAngle(angle+135))*20-1,(ScreenH/2)+Y-Sin(WrapAngle(angle+135))*20,(ScreenW/2)+X+Cos(WrapAngle(angle))*20-1,(ScreenH/2)+Y-Sin(WrapAngle(angle))*20
Return Angle: Return X: Return Y
EndFunction
Function VastusAlus(VusAngle,VusX,VusY)
Color CbGreen
Line (ScreenW/2)+VusX+Cos(WrapAngle(VusAngle))*17,(ScreenH/2)+VusY-Sin(WrapAngle(VusAngle))*17,(ScreenW/2)+VusX+Cos(WrapAngle(VusAngle-135))*17,(ScreenH/2)+VusY-Sin(WrapAngle(VusAngle-135))*17
Line (ScreenW/2)+VusX+Cos(WrapAngle(VusAngle+135))*17,(ScreenH/2)+VusY-Sin(WrapAngle(VusAngle+135))*17,(ScreenW/2)+VusX+Cos(WrapAngle(VusAngle))*17,(ScreenH/2)+VusY-Sin(WrapAngle(VusAngle))*17
Line (ScreenW/2)+VusX+Cos(WrapAngle(VusAngle))*17-1,(ScreenH/2)+VusY-Sin(WrapAngle(VusAngle))*17,(ScreenW/2)+VusX+Cos(WrapAngle(VusAngle-135))*17-1,(ScreenH/2)+VusY-Sin(WrapAngle(VusAngle-135))*17
Line (ScreenW/2)+VusX+Cos(WrapAngle(VusAngle+135))*17-1,(ScreenH/2)+VusY-Sin(WrapAngle(VusAngle+135))*17,(ScreenW/2)+VusX+Cos(WrapAngle(VusAngle))*17-1,(ScreenH/2)+VusY-Sin(WrapAngle(VusAngle))*17
Return VusAngle: Return VusX: Return VusY: Return VusVäri
EndFunction
Pelin ideana olisi selvitä mahdollisimman kauan hengissä.
Joka frame saa 1 pisteen (Framelimit=60 eli 60 pistettä sekunnissa) ja jokaisen vasustajat tappamisesta saa 250 lisäpistettä.
Pelin ruudun kokoa on helppo muokata. Heitä vaan Consteihin ScreenW ja ScreenH Uudetarvot.
Ps. Älä kysy miksi koodi on outo... Tein tämän hieman sekavassa... olotilassa.
@Viltzu: Siis fps pisteistä; Jos tehot eivät riitä 60 fps niin voi laskea framelimittiä suoraan. Framelimitin laskusta pisteiden tuleminen laskee, mutta on enempi aikaa miettiä mitä tekee, koska vasustajat ja muukin liikku silloin hitaammin. Ja mitä epäilyttävää avatarissani on...? Ja avaruudessa pysähtymisestä: entä jos alukset ovatkin maan ilmakehässä ja "taistelu kuvataan alhaaltapäin". No tosiaan ei sen aluksen pitäisi noi pysähtyä, mutta peli olisi aika omituinen jos se ei pysähtyisi... Sovitaan, että alukseen on rakennettu sellainen järjestelmä joka pysäyttää sen vähitellen...