Viikkokisa: Back from the Exile!
Re: Viikkokisa: Back from the Exile!
Eli ihan vain varmistuakseni kysyn nyt, onko kaikenlainen musiikki täysin kielletty?
Re: Viikkokisa: Back from the Exile!
On.CCE wrote:Eli ihan vain varmistuakseni kysyn nyt, onko kaikenlainen musiikki täysin kielletty?
Re: Viikkokisa: Back from the Exile!
Mitenkäs niiden pikselikomentojen kanssa?Chaosworm wrote:On.CCE wrote:Eli ihan vain varmistuakseni kysyn nyt, onko kaikenlainen musiikki täysin kielletty?
esim.
Code: Select all
img = makeimage(100,100)
putpixel 10,10,pix,image(img)
Tekeillä pikkupelejä ja ohjelmia
Re: Viikkokisa: Back from the Exile!
On sallittuja.Jonhu wrote:Mitenkäs niiden pikselikomentojen kanssa?Chaosworm wrote:On.CCE wrote:Eli ihan vain varmistuakseni kysyn nyt, onko kaikenlainen musiikki täysin kielletty?
esim.Code: Select all
img = makeimage(100,100) putpixel 10,10,pix,image(img)
-
- Advanced Member
- Posts: 281
- Joined: Sat Jun 28, 2008 5:19 pm
- Location: Hämeessä miä
Re: Viikkokisa: Back from the Exile!
menee jo pilkun viilaamiseen, mutta saako ASCII-graffoja käyttää?
200. viesti!
200. viesti!
Re: Viikkokisa: Back from the Exile!
Saa.Nassi_Setä wrote:menee jo pilkun viilaamiseen, mutta saako ASCII-graffoja käyttää?
200. viesti!
-
- Advanced Member
- Posts: 281
- Joined: Sat Jun 28, 2008 5:19 pm
- Location: Hämeessä miä
Re: Viikkokisa: Back from the Exile!
Ja viellä pitää spämmiä 1 kysymys: Saako SDK:n piirtokomentoja käyttää?
Re: Viikkokisa: Back from the Exile!
Tässä tämä nyt tuli.. Periaatteessa se on ennen luotua koodia, eli ei.. mutta emmekös me puhuneet näistä kirjastoista että ne voisi sallia näissä kisoissa, eli SDK, cbFun ja jotain muutakin taisi olla.
Re: Viikkokisa: Back from the Exile!
Chaosworm wrote:- Aikaisemmin kirjoitettua koodia ei saa käyttää grafiikoiden tekemiseen, eli jos olet unohtanut, miten typejä käytetään, mutta jossain aikaisemmassa koodissasi sinulla niitä on, saat ne copypastettaa. Mutta yhtään piirtokomentoriviä et.
Chaosworm wrote:DLL:iä ei saa käyttää.
Re: Viikkokisa: Back from the Exile!
En osallistu sittenkään kilpailuun...
Sain jotain toimivaa parallax scrolleria aikaan, mutta säännöt ovat jo hieman turhan sekavat, että jaksaisi miettiä mitä tekee...
Sain jotain toimivaa parallax scrolleria aikaan, mutta säännöt ovat jo hieman turhan sekavat, että jaksaisi miettiä mitä tekee...
Re: Viikkokisa: Back from the Exile!
Säännöissä ei ole mitään sekavaa. Yksinkertaistettuna:Knoy wrote:En osallistu sittenkään kilpailuun...
Sain jotain toimivaa parallax scrolleria aikaan, mutta säännöt ovat jo hieman turhan sekavat, että jaksaisi miettiä mitä tekee...
- Yhtään tiedostoa et joko saa käyttää tai siitä ei ole mitään hyötyä sinulle.
- Kuvamoottoria saa käyttää, mutta ei komentoja/funktioita, joita ei voi korvata sarjalla piirtokomentoja.
- Sääntöjen kiertäminen on kiellettyä, ja tiedät kyllä varsin hyvin itse jos harjoitat sitä.
Re: Viikkokisa: Back from the Exile!
Osallistun pelillä nimeltä Rollershootism
Peli on piskuinen shmup pienellä twistillä, ammuksia on ruudulla kerrallaan varsin paljon.
Kuvankaappaus pelistä.
Lataa rollershootism.zip ~1.9mt
Niin, ja hoksasin vasta viime metreillä että lisätiedostot ovat kiellettyjä Mikäli koet että pelin ääniefektit sumentavat arvostelukykysi voit aina kääntää pelistä äänettömän version
Peli on piskuinen shmup pienellä twistillä, ammuksia on ruudulla kerrallaan varsin paljon.
Kuvankaappaus pelistä.
Lataa rollershootism.zip ~1.9mt
Niin, ja hoksasin vasta viime metreillä että lisätiedostot ovat kiellettyjä Mikäli koet että pelin ääniefektit sumentavat arvostelukykysi voit aina kääntää pelistä äänettömän version
Re: Viikkokisa: Back from the Exile!
Tässä oma pelini. Laitan ihan vaan koodin.
Peli on 3d avaruusräiskintä. Nuolista ohjaa, välilyönnistä ampuu, b:stä kiihdyttää.
tavoitteesi on päästä perille eli saada se distance nollaan ja voittaa lopari.
vihreästä vihusta saa elämiä.
Peli on 3d avaruusräiskintä. Nuolista ohjaa, välilyönnistä ampuu, b:stä kiihdyttää.
tavoitteesi on päästä perille eli saada se distance nollaan ja voittaa lopari.
Code: Select all
DrawToWorld ON
If GFXModeExists(640,480,32) Then
SCREEN 640,480,32,0
Else
SCREEN 640,480,16,0
EndIf
'FrameLimit 50
z#=6
n=0
y#=-1.3
life=300
pop=0
boost=100
level=1
vastus=False
bosslf=10000
bl=1
bx#=-1
by#=-1
bv=1
Type pati
Field lx#
Field ly#
Field lz#
Field s
End Type
Type vihut
Field vx#
Field vy#
Field vz#
Field vt
End Type
Type star
Field sx#
Field sy#
Field sz#
End Type
aika=Timer()
Repeat
Color cbdark
'For i=1 To 360 Step 10
'Line 0,0, Cos(i+angle)*500,Sin(i+angle)*500
'Next i
'angle+1*-1^level
If Rand(70-level*10)=1 Then
vihu.vihut=New(vihut)
vihu\vx#=Rnd(-1.75,1.75)
vihu\vy#=Rnd(-1.3,1.3)
vihu\vz#=0
EndIf
If Rand(70-level*10)=1 Then
vihu.vihut=New(vihut)
vihu\vx#=Rnd(-1.75,1.75)
vihu\vy#=Rnd(-1.3,1.3)
vihu\vz#=0
vihu\vt=2
EndIf
If Rand(70-level*10)=1 And level>1 Then
vihu.vihut=New(vihut)
vihu\vx#=Rnd(-1.75,1.75)
vihu\vy#=Rnd(-1.3,1.3)
vihu\vz#=0
vihu\vt=4
EndIf
If Rand(200-level*10)=1 Then
vihu.vihut=New(vihut)
vihu\vx#=Rnd(-1.75,1.75)
vihu\vy#=Rnd(-1.3,1.3)
vihu\vz#=0
vihu\vt=6
EndIf
If Rand(70-level*10)=79 And level>3 Then
vihu.vihut=New(vihut)
vihu\vx#=Rnd(-1.75,1.75)
vihu\vy#=Rnd(-1.3,1.3)
vihu\vz#=0
EndIf
If Rand(70-level*10)=79 And level>5 Then
vihu.vihut=New(vihut)
vihu\vx#=Rnd(-1.75,1.75)
vihu\vy#=Rnd(-1.3,1.3)
vihu\vz#=0
vihu.vihut=New(vihut)
vihu\vx#=Rnd(-1.75,1.75)
vihu\vy#=Rnd(-1.3,1.3)
vihu\vz#=0
EndIf
If Rand(1,5)=5 Then
s.star=New(star)
Select Rand(4)
Case 1
s\sx#=1.9
s\sy#=Rand(-1.5,1.5)
Case 2
s\sx#=-1.9
s\sy#=Rand(-1.5,1.5)
Case 3
s\sy#=1.5
s\sx#=Rand(-1.9,1.9)
Case 4
s\sy#=-1.5
s\sx#=Rand(-1.9,1.9)
End Select
s\sz#=0.1
EndIf
u=u+KeyHit(cbkey1)-KeyHit(vbkey0)
x#=x#-LeftKey()*0.2+RightKey()*0.2
y#=y#-DownKey()*0.2+UpKey()*0.2
'z#=z#+KeyDown(cbkeyu)-KeyDown(cbkeyd)
If x#<-1.75 Then x#=-1.75
If x#>1.75 Then x#=1.75
If y#<-1.3 Then y#=-1.3
If y#>1.3 Then y#=1.3
viiva(2,1.4,0,2,1.4,11)
viiva(-2,1.4,0,-2,1.4,11)
viiva(2,-1.4,0,2,-1.4,11)
viiva(-2,-1.4,0,-2,-1.4,11)
If KeyDown(cbkeyspace) and reload<1 Then
Select level
Case 1
luoti.pati = New (pati)
luoti\lx#=x#
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
reload=5
Case 2
luoti.pati = New (pati)
luoti\lx#=x#
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
reload=2
Case 3
luoti.pati = New (pati)
luoti\lx#=x#+0.1
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#-0.1
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
reload=3
Case 4
luoti.pati = New (pati)
luoti\lx#=x#+0.3
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#-0.3
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
reload=3
Case 5
luoti.pati = New (pati)
luoti\lx#=x#+0.4
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#-0.4
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#+0.1
luoti\ly#=y#-0.2
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#-0.1
luoti\ly#=y#-0.2
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
reload=3
Case 6
luoti.pati = New (pati)
luoti\lx#=x#+0.4
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#-0.4
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#+0.1
luoti\ly#=y#-0.2
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#-0.1
luoti\ly#=y#-0.2
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
reload=1
Case 7
luoti.pati = New (pati)
luoti\lx#=x#+0.4
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#-0.4
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#+0.1
luoti\ly#=y#-0.2
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#+0.3
luoti\ly#=y#+0.2
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#+0.3
luoti\ly#=y#+0.2
luoti\lz#=z#-0.3
luoti\s=1
luoti.pati = New (pati)
luoti\lx#=x#
luoti\ly#=y#
luoti\lz#=z#-0.3
luoti\s=1
reload=2
End Select
EndIf
If KeyDown(48) And boost>20 Then booston=ON
If KeyDown(48)And booston=ON and boost>0 Then
booston=ON
Else
booston=0
EndIf
If boost=0 Then BOOST=-200
If boost=-1 Then boost=1
If booston=ON Then
Color 200,200,255
n=n+7
For i=1+n To 360+n Step 10
angle=i
viiva(Cos(angle),Sin(angle),0,Cos(angle),Sin(angle),11)
Next i
boost-2
dist+1
EndIf
reload-1
If boost<100 Then boost+1
Color 0,255,255
For luoti.pati=Each pati
If luoti\s=1 Then
Color 0,255,255
Else
Color 0,255,0
EndIf
viiva(luoti\lx#,luoti\ly#,luoti\lz#-0.09,luoti\lx#,luoti\ly#,luoti\lz#+0.09)
luoti\lz#=luoti\lz#-(0.1*luoti\s)
If luoti\lz#<0.2 Then Delete luoti
Next luoti
For s.star=Each star
Color 225,225,255
viiva(s\sx#,s\sy#,s\sz#-0.5,s\sx#,s\sy#,s\sz#+0.5)
s\sz#=s\sz#+0.2
If s\sz#>8 Then Delete s
Next s
For vihu.vihut=Each vihut
vihu\vz#=vihu\vz#+0.1
If vihu\vt=2 Then
Color cbdarkpurple
viiva(vihu\vx#+0.15,vihu\vy#+0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#-0.15,vihu\vy#+0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#+0.3,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#-0.3,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#+0.15,vihu\vy#+0.2,vihu\vz#)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#-0.15,vihu\vy#+0.2,vihu\vz#)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#+0.3,vihu\vy#,vihu\vz#)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#-0.3,vihu\vy#,vihu\vz#)
If Rand(60)=1 Then
luoti.pati = New (pati)
luoti\lx#=vihu\vx#
luoti\ly#=vihu\vy#
luoti\lz#=vihu\vz#+0.02
luoti\s=-1
EndIf
ElseIf vihu\vt=4 Then
Color cborange
viiva(vihu\vx#+0.15,vihu\vy#+0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#-0.15,vihu\vy#+0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#+0.3,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#-0.3,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#+0.15,vihu\vy#+0.2,vihu\vz#)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#-0.15,vihu\vy#+0.2,vihu\vz#)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#+0.3,vihu\vy#,vihu\vz#)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#-0.3,vihu\vy#,vihu\vz#)
viiva(vihu\vx#+0.15,vihu\vy#-0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#-0.15,vihu\vy#-0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#+0.15,vihu\vy#-0.2,vihu\vz#)
viiva(vihu\vx#,vihu\vy#,vihu\vz#+0.1,vihu\vx#-0.15,vihu\vy#-0.2,vihu\vz#)
If Rand(20)=1 Then
luoti.pati = New (pati)
luoti\lx#=vihu\vx#+0.1
luoti\ly#=vihu\vy#
luoti\lz#=vihu\vz#+0.02
luoti\s=-1
luoti.pati = New (pati)
luoti\lx#=vihu\vx#-0.1
luoti\ly#=vihu\vy#
luoti\lz#=vihu\vz#+0.02
luoti\s=-1
EndIf
ElseIf vihu\vt=6 Then
Color cbgreen
viiva(vihu\vx#+0.2,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#-0.2,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#+0.2,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#-0.2)
viiva(vihu\vx#-0.2,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#-0.2)
viiva(vihu\vx#,vihu\vy#+0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#,vihu\vy#-0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#,vihu\vy#+0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#-0.2)
viiva(vihu\vx#,vihu\vy#-0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#-0.2)
viiva(vihu\vx#,vihu\vy#-0.2,vihu\vz#,vihu\vx#-0.2,vihu\vy#,vihu\vz#)
viiva(vihu\vx#,vihu\vy#-0.2,vihu\vz#,vihu\vx#+0.2,vihu\vy#,vihu\vz#)
viiva(vihu\vx#,vihu\vy#+0.2,vihu\vz#,vihu\vx#+0.2,vihu\vy#,vihu\vz#)
viiva(vihu\vx#,vihu\vy#+0.2,vihu\vz#,vihu\vx#-0.2,vihu\vy#,vihu\vz#)
Else
Color cbred
viiva(vihu\vx#+0.2,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#-0.2,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#+0.2,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#-0.2)
viiva(vihu\vx#-0.2,vihu\vy#,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#-0.2)
viiva(vihu\vx#,vihu\vy#+0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#,vihu\vy#-0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#+0.2)
viiva(vihu\vx#,vihu\vy#+0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#-0.2)
viiva(vihu\vx#,vihu\vy#-0.2,vihu\vz#,vihu\vx#,vihu\vy#,vihu\vz#-0.2)
viiva(vihu\vx#,vihu\vy#-0.2,vihu\vz#,vihu\vx#-0.2,vihu\vy#,vihu\vz#)
viiva(vihu\vx#,vihu\vy#-0.2,vihu\vz#,vihu\vx#+0.2,vihu\vy#,vihu\vz#)
viiva(vihu\vx#,vihu\vy#+0.2,vihu\vz#,vihu\vx#+0.2,vihu\vy#,vihu\vz#)
viiva(vihu\vx#,vihu\vy#+0.2,vihu\vz#,vihu\vx#-0.2,vihu\vy#,vihu\vz#)
EndIf
If vihu\vz#>6 Then
If Distance(vihu\vx#,vihu\vy#,x#,y#)<0.72 Then
if vihu\vt<5 then
life-10
Else
life+40
EndIf
EndIf
Delete vihu
Exit
EndIf
For luoti.pati=Each pati
If Abs(vihu\vx#*vihu\vz#-luoti\lx#*luoti\lz#)<0.33*luoti\lz# And Abs(vihu\vy#*vihu\vz#-luoti\ly#*luoti\lz#)<0.33*luoti\lz# And luoti\s=1 Then
pop+1
If vihu\vt=6 Then life+20
Delete vihu
Exit
EndIf
Next luoti
Next vihu
For luoti.pati=Each pati
If Abs(x#*z#-luoti\lx#*luoti\lz#)<0.33*luoti\lz# And Abs(y#*z#-luoti\ly#*luoti\lz#)<0.33*luoti\lz# And luoti\s=-1 Then
life-5
Delete luoti
ElseIf luoti\lz#>10 Then
Delete luoti
EndIf
Next luoti
Color 128,128,128
//PITKÄT SIVUT
viiva(x#+0.3,y#+0.3,z#+0.2,x#+0.1,y#+0.1,z#-0.3)
viiva(x#+0.1,y#+0.1,z#+0.2,x#+0.1,y#+0.1,z#-0.3)
viiva(x#-0.1,y#+0.1,z#+0.2,x#-0.1,y#+0.1,z#-0.3)
viiva(x#-0.3,y#+0.3,z#+0.2,x#-0.1,y#+0.1,z#-0.3)
viiva(x#+0.2,y#-0.1,z#+0.2,x#+0.1,y#-0.1,z#-0.3)
viiva(x#-0.2,y#-0.1,z#+0.2,x#-0.1,y#-0.1,z#-0.3)
//Keula
viiva(x#+0.1,y#+0.1,z#-0.3,x#-0.1,y#+0.1,z#-0.3)
viiva(x#-0.1,y#-0.1,z#-0.3,x#+0.1,y#-0.1,z#-0.3)
viiva(x#+0.1,y#+0.1,z#-0.3,x#+0.1,y#-0.1,z#-0.3)
viiva(x#-0.1,y#-0.1,z#-0.3,x#-0.1,y#+0.1,z#-0.3)
//PERÄ
viiva(x#+0.3,y#+0.3,z#+0.2,x#+0.1,y#+0.1,z#+0.2)
viiva(x#-0.3,y#+0.3,z#+0.2,x#-0.1,y#+0.1,z#+0.2)
viiva(x#+0.1,y#+0.1,z#+0.2,x#-0.1,y#+0.1,z#+0.2)
viiva(x#+0.1,y#+0.1,z#+0.2,x#+0.2,y#-0.1,z#+0.2)
viiva(x#-0.1,y#+0.1,z#+0.2,x#-0.2,y#-0.1,z#+0.2)
'viiva(x#+0.2,y#-0.1,z#
//SIIVET
viiva(x#+0.1,y#+0.1,z#+0.2,x#+0.8,y#+0.08,z#+0.1)
viiva(x#+0.1,y#+0.1,z#-0.3,x#+0.8,y#+0.08,z#+0.1)
viiva(x#-0.1,y#+0.1,z#+0.2,x#-0.8,y#+0.08,z#+0.1)
viiva(x#-0.1,y#+0.1,z#-0.3,x#-0.8,y#+0.08,z#+0.1)
Text 1,1,"FPS: "+FPS()
Text 1,21,"ENERGY: "+life+"/300"
Text 1,41,"hits: "+pop
Text 1,61,"boost: "+boost
Text 1,81,"level: "+level
Text 1,101,"distance: "+(25000-dist)
If life<1 Then MakeError "Sait "+pop+" pistettä!"
If pop=70 Then level=2
If pop=140 Then level=3
If pop=200 Then level=4
If pop=400 Then level=5
If pop=700 Then level=6
If pop=1000 Then level=7
If KeyDown(cbkey5) Then level=5
If dist>25000 Then vastus=True
If KeyDown(cbkeyv) Then vastus=True
If vastus=True Then
Color 100,100,100
viiva(0.2,0.2,4,2,2,3)
viiva(-0.2,0.2,4,-2,2,3)
viiva(0.2,-0.2,4,2,-2,3)
viiva(-0.2,-0.2,4,-2,-2,3)
viiva(-0.2,0.2,4,2,2,3)
viiva(0.2,0.2,4,-2,2,3)
viiva(-0.2,-0.2,4,2,-2,3)
viiva(0.2,-0.2,4,-2,-2,3)
viiva(0.2,-0.2,4,2,2,3)
viiva(-0.2,-0.2,4,-2,2,3)
viiva(0.2,0.2,4,2,-2,3)
viiva(-0.2,0.2,4,-2,-2,3)
Color cbgreen
viiva(0.2,0.2,4,0.2,-0.2,4)
viiva(-0.2,0.2,4,-0.2,-0.2,4)
viiva(0.2,0.2,4,-0.2,0.2,4)
viiva(0.2,-0.2,4,-0.2,-0.2,4)
bx#=bx#+(0.1*bl)
If bc=1 Then
by#=by#+(0.1*bv)
Else
by#=by#+(0.1*bl)
EndIf
If bx#>2 Or bx#<-2 Then bl=bl*-1
If Rand(1,3)=1 Then
vihu.vihut=New(vihut)
vihu\vx#=bx#
vihu\vy#=by#
vihu\vz#=4
EndIf
If Rand(1,9)=1 Then
vihu.vihut=New(vihut)
vihu\vx#=Rand(-1.7,1.7)
vihu\vy#=Rand(-1.5,1.5)
vihu\vz#=4
EndIf
If booston=ON Then bosslf-1
For p.pati=Each pati
If p\s=1 Then
If p\lz#<3.5 Then bosslf-5: Delete p
EndIf
Next p
Text 1,141,"boss: "+bosslf
If bosslf<1 Then MakeError "Tehtävä suoritettu! Tuhosit yhteensä "+pop+" vihollista."
EndIf
DrawScreen
If dist < 25001 then dist+1
Forever
Function viiva(x1#,y1#,z1#,x2#,y2#,z2#)
z1#=(z1#)*(Abs(z1#)/1.5)
z2#=(z2#)*(Abs(z2#)/1.5)
Line (x1#*((Sqrt(z1#^4.2))))/5,(y1#*((Sqrt(z1#^4.2))))/5,(x2#*((Sqrt(z2#^4.2))))/5,(y2#*((Sqrt(z2#^4.2))))/5
end function
Re: Viikkokisa: Back from the Exile!
Itse päätin tehdä tetriksen, joka tosin jäi aika pahasti keskeneräiseksi, mutta pelattavissa kuitenkin Tein pääasiassa pikselikomennoilla koko pelin, mutta mitään kuvien kopiointia ei ohjelmassa ole.
Napit:
Peli alkaa New Game napista ( sama nappi pausena pelin aikana )
Oikea ja vasen nuoli liikuttaa palikkaa, ylös nuoli kääntää ja alaspäin osoittava nuoli pudottaa palan nopeasti.
Highscores nappi ei toimi
Lähdekoodi:
Pari kuvaa pelistä:
EDIT: Jaa pitää alkaa etsiä sit erroreita :S Koodissa vähän kaikkea turhaa krääsää, kun pelin efektit muuttuivat kesken koodauksen
Napit:
Peli alkaa New Game napista ( sama nappi pausena pelin aikana )
Oikea ja vasen nuoli liikuttaa palikkaa, ylös nuoli kääntää ja alaspäin osoittava nuoli pudottaa palan nopeasti.
Highscores nappi ei toimi
Lähdekoodi:
Code: Select all
/////////////////////////////////////////////////////////////
// //
// Tetris Versio 0.01 beta //
// //
// Tehnyt: Jonhu 20.03.2010 - 28.03.2010 //
// //
/////////////////////////////////////////////////////////////
SCREEN 640, 480
//FrameLimit 60
Type EFECT
Field img
Field x1 As Float
Field y1 As Float
Field x2 As Float
Field y2 As Float
Field spd As Float
EndType
Type Palikka
Field img
Field x As Float
Field y As Float
Field ang As Float
Field aspd As Float
Field yspd As Float
EndType
Const GRAVITY# = 0.2
Const kenttax = 100
Const kenttay = 70
Const Pala_max_width = 3 // 0,1,2,3
Const Pala_max_height = 3
Const paloja_max = 4
Const Game_Frame_size = 10
Const Score_Flash_Len = 400 // ms
Const Level_time = 15000 //ms
Global Scores, GameOnline
Pala_size = 30
kentta_width = 8
kentta_height = 12
move_speed# = 1.5
Dim Box_img( Paloja_max*2+10 ) // taulukko boksien kuville...
Dim alue( ScreenWidth(), ScreenHeight(), 3) // efektejä varten taulukko taustasta
Dim Pala( Pala_max_height, Pala_max_width ) // ruudukko yksittäisestä palasta
Dim Kentta( kentta_height, kentta_width ) // kenttä ruudukkona
InitCollisionTable(kentta_width, kentta_height) // kentän alustus ihan vamuuden vuoksi
Print "Generating Images..."
GenerateBoxes( 1, paloja_max, pala_size ) // tekee pala koolla 1-paloja_max paikkoihin palat
GenerateBoxes( 10, paloja_max+10, 20 ) // efektiboksit
// Kuvien luonti...
ScoreBox_Frame = MakeImage( 220, 160 )
BackGround_img = MakeImage( ScreenWidth(), ScreenHeight() )
Kentta_img = MakeImage( kentta_width*Pala_size, kentta_height*Pala_size )
Game_Frame_img = MakeImage( kentta_width*Pala_size+Game_Frame_size*4, kentta_height*Pala_size+Game_Frame_size*4 )
Game_Frame_img = DrawFraktBox( Game_Frame_img, Game_Frame_size,100, 40,70,30, 1 )
ScoreBox_Frame = DrawFraktBox( ScoreBox_Frame, 10,50, 40,70,30 )
MaskImage ScoreBox_Frame, 255,0,255
//MaskImage Game_Frame_img, 255,0,255
// Seuraavan palan tiedot
Next_Pala_id = Rand(1,paloja_max)
GetPala( Next_Pala_id )
Next_pala_img = DrawPala( 20, Next_Pala_id )
// uusi pala käyttöön
pala_id = Rand(1,paloja_max)
GetPala( pala_id )
// mitat talteen, ettei tarvitse tutkia monesti
pala_w = GetWidth()
pala_h = GetHeight()
pala_img = DrawPala( pala_size, pala_id )
pala_x# = kenttax + RoundDown( kentta_width * pala_size / 2 )
pala_y# = kenttay-( pala_h ) * Pala_size
Kentta_height_ = kenttay + ( kentta_height - pala_h ) * Pala_size
// fontit
//Print "Loading Fonts..."
Title_font = LoadFont("arial",28,OFF,OFF,ON)
Small_font = LoadFont("arial",14)
Score_font = LoadFont("arial",20,ON)
SetFont Title_font
Otsikko_font = Btext( " Classic Tetris ", 4, 20,150,200 )
MakeLAATIKKOT()
SetFont Score_font
Map_Moving# = 0
ScoreBox_x = 400
ScoreBox_y = 60
Level = 1
// nappien lataus..
New_Game_Button = MakeFraktButton( "New Game", 430,300,160,40, 5, 50, 30,30,100, 20,20,120)
HighScores_button = MakeFraktButton( "HighScores", 430,350,160,40, 5, 50, 80,20,20, 100,20,20)
Exit_Button = MakeFraktButton( "Exit", 570,440,60,30, 3, 50, 80,20,20, 100,20,20)
// Efekteihin liittyvät muuttujat
Efect_mode = False
Efect_stop = False
Efect_timer = Timer()
Level_timer = Timer()
// alkaa peli näkymällä
ShowHighScores = 0
taustax = 200
Repeat
// tausta efectejä
Select Efect_mode
Case 0 // boksit
Box_Left = UpdateBoxes( Efect_stop, kentta_width*pala_size, kentta_height*pala_size )
// siirtyminen moodista toiseen
If Efect_timer + Level_time*2 <= Timer()
NewLine( 25 )
Efect_mode = 1
Efect_timer = Timer()
Efect_stop = False
EndIf
Case 1 // viivat vari blue
BackGround_img = UpdateLines( BackGround_img, kentta_width*pala_size, kentta_height*pala_size, Efect_stop )
If Box_Left > 0 Then Box_Left = UpdateBoxes( 1, kentta_width*pala_size, kentta_height*pala_size )
If Efect_timer + Level_time < Timer() Then Efect_stop = 1 : Efect_mode = 2
// DrawImage BackGround_img, 0, 0
Case 2
Default
EndSelect
angl# = WrapAngle(angl# + 0.5)
// taustax = taustax + Suuntakerroin
// tautay = tautay + Suuntakerroin
taustax = taustax +Cos(angl#)*1
// tautay = tautay + Sin(angl#)*1
// If taustax >= ScreenWidth() Or taustay >= ScreenHeight() Then Suuntakerroin = -1
// If taustax <= 0 Or taustay <=0 Then Suuntakerroin = 1
MoveBackGround( BackGround_img, Taustax, 0 )
// taustan ja kentan taustan piirto
// DrawImage BackGround_img, 0, 0
// MoveBackGround( BackGround_img, Taustax, Taustay )
// Napit
HighScores_button = DrawFraktButton( HighScores_button )
New_Game_Button = DrawFraktButton( New_Game_Button )
Exit_Button = DrawFraktButton( Exit_Button )
If PeekByte( Exit_Button, 24 ) = 2 Then Exit
// If PeekByte( HighScores_button, 24 ) = 2 Then ShowHighScores = Not ShowHighScores
If PeekByte( New_Game_Button,24 ) = 2 Then GameOnline = Not GameOnline
// palan liikutus..
If GameOnline=1 Then pala_y = pala_y + move_speed#
// piirretään pelin kehys
DrawImage Game_Frame_img, kenttax-Game_Frame_size*2, kenttay-Game_Frame_size*2
// palan kääntäminen
If KeyHit( cbkeyUP ) And GameOnline=1 Then
RotatePala( pala_x, Max(pala_y,kenttay), Pala_size, pala_h, pala_w )
// tyhjätään vanha kuva
DrawToImage pala_img
Color cbblack
Box 0,0,ImageWidth(pala_img), ImageHeight(pala_img)
DrawToScreen
DeleteImage pala_img
pala_w = GetWidth()
pala_h = GetHeight()
pala_x = Max( Min( pala_x, kenttax + ( kentta_width - pala_w ) * pala_size ), kenttax )
pala_img = DrawPala( pala_size, pala_id )
Kentta_height_ = kenttay + ( kentta_height - pala_h ) * Pala_size
EndIf
// liikuttaminen sivusuunnassa
nappi = KeyHit( cbkeyRIGHT ) - KeyHit( cbkeyLEFT )
If nappi <> 0 And GameOnline=1 Then
// liikutus ja seinään törmäys
pala_nx = Max( Min( pala_x + pala_size * nappi, kenttax + ( kentta_width - pala_w ) * pala_size ), kenttax)
// muihin paloihin törmäystarkistus
If CheckCollision( pala_x, Max(pala_y,kenttay), Pala_size, pala_w, pala_h ) = False Then pala_x = pala_nx
EndIf
// nopea pudotus
If Max( KeyHit( cbkeyDOWN ), KeyHit( cbkeyspace ) ) > 0 And GameOnline=1 Then
x = RoundDown((pala_x - kenttax) / pala_size)
For y = 0 To kentta_height-pala_h
collision = 0
For py = 0 To pala_h
For px = 0 To pala_w
If Kentta( y + py, x + px ) > 0 And pala( py, px ) = 1 Then collision + 1
Next px
Next py
// paikka löytynyt, jossa tilaa
If collision = 0 Then pala_y = kenttay + y * pala_size Else Exit
Next y
save_pala = True
EndIf
// palan asetus paikoilleen ja uuden luonti
If save_pala = True Or Kentta_height_ <= pala_y Or CheckCollision( pala_x, Max(pala_y,kenttay), Pala_size, pala_w, pala_h ) Then
DrawToImage kentta_img
DrawImage pala_img, pala_x - kenttax , pala_y - kenttay
DrawToScreen
DeleteImage pala_img
// päivitetään kentän törmäys taulukko
kentta_img = UpdateMap( kentta_img, pala_x, pala_y, Pala_size, kentta_width, kentta_height, pala_w, pala_h, pala_id )
pala_id = Next_Pala_id // Rand(1,4)
Next_Pala_id = Rand(1,paloja_max)
DeleteImage Next_pala_img
GetPala( Next_Pala_id )
Next_pala_img = DrawPala( 20, Next_Pala_id )
GetPala( pala_id ) // luodaan pala taulukkoon
// mitat talteen, ettei tarvitse tutkia monesti
pala_w = GetWidth()
pala_h = GetHeight()
Scores = Scores + 10*level
pala_img = DrawPala( pala_size, pala_id )
pala_x# = kenttax + RoundDown(kentta_width*pala_size/2)
pala_y# = kenttay - pala_h * pala_size
Kentta_height_ = kenttay + ( kentta_height - pala_h ) * Pala_size
save_pala = False
EndIf
If Timer() >= Level_timer + Level_time And GameOnline=1 Then
Level_timer = Timer()
move_speed# + 0.2
level + 1
EndIf
// piirretään kentta
DrawImage Kentta_img, kenttax, kenttay
DrawImage ScoreBox_Frame,ScoreBox_x, ScoreBox_y
// piirretään poksautetut palikat
DrawPalikat()
// h = pala_y+pala_h*pala_size-kenttay
// liikkuvan palikan piirto.-..
If pala_y < kenttay Then
Pala_h1 = pala_y + pala_h * pala_size - kenttay // paljonko palaa näkyvissä kenttä alueella
If Pala_h1 > 0 Then
DrawImageBox pala_img, pala_x,kenttay, 0, pala_h * pala_size - Pala_h1, pala_w*pala_size, Pala_h1
EndIf
Else
DrawImage pala_img, pala_x, pala_y
EndIf
DrawGame
Color cbblack
// Box kenttax,0, kentta_width*pala_size, kenttay
DrawImage otsikko_font, kenttax + 25, kenttay-60
Color cbwhite
// luodaan lukujen muuttumiseen vähän vaihtelua...
If Scores > Scores_Shown Then
If Scores - Scores_Shown > 200 Then
Color_WTimer = 0
Color_Timer = Timer()
ScoreS_Shown = Scores
Score_Flashes = 4
ElseIf Scores - Scores_Shown > 100
Scores_Shown + 5
ElseIf Scores - Scores_Shown > 50
Scores_Shown + 2
Else
Scores_Shown + 1
EndIf
EndIf
// ScoreBoksin päivitys
Text 425,100,"Next part: "
If Color_WTimer + Score_Flash_Len < Timer() And Timer() < Color_timer + Score_Flash_Len Then
Color 255,0,0
If Score_Flashes > 0 And Color_WTimer = 0 Then
Score_Flashes - 1
Color_WTimer = Timer()
Color_timer = Timer() + Score_Flash_Len
EndIf
EndIf
Text 450,150,"Scores: " + Scores_Shown
Color cbwhite
Text 450,180,"Level: " + level
DrawImage Next_pala_img, 515, 90
//DrawCollisionTable(400,20, kentta_width, kentta_height)
//drawPalaTable(400,400)
// kentän piirto
// Box kenttax,kenttay, kentta_width*pala_size, kentta_height*pala_size, 0
Text 10,10,FPS()
// häviö
If GameOnline = -1 Then
Text kenttax+kentta_width*pala_size/2, ScreenHeight()/2,"..The End.."
wwtime = Timer()
Repeat
DrawScreen OFF
Until ( GetKey()<> 0 Or MouseDown(1) ) And wwtime+1000 < Timer()
GameOnline = 0
Scores_Shown = 0
Scores = 0
level = 1
Level_timer = Timer()
InitCollisionTable(kentta_width, kentta_height)
kentta_img = DrawMap( kentta_img, pala_size, kentta_width, kentta_height )
EndIf
DrawScreen
Forever
DeleteImage Game_Frame_img
DeleteImage Next_pala_img
DeleteImage kentta_img
DeleteImage BackGround_img
DeleteImage ScoreBox_Frame
End
Function drawPalaTable(x1,y1)
For ky = 0 To 3
For kx = 0 To 3
Text x1+kx*12,y1+ky*12,pala( ky, kx )
Next kx
Next ky
EndFunction
Function Btext( rivi$, bold = 3, r=255,g=255,b=255)
img = MakeImage( TextWidth(rivi$)+b*5, TextHeight(rivi$)+b*5 )
DrawToImage img
For a=0 To bold
Color a*r/bold, a*g/bold, a*b/bold
For c=1 To Len(rivi$)
Text a+TextWidth( Left(rivi$,c-1) ),a, Mid(rivi$,c,1)
Next c
Next a
DrawToScreen
Return img
EndFunction
Function DrawMap( img, size, kentta_width, kentta_height )
DrawToImage img
Color cbblack
Box 0,0, ImageWidth(img), ImageHeight(img)
Color cbwhite
For ky = 0 To kentta_height-1
For kx = 0 To kentta_width-1
If kentta( ky, kx ) > 0 Then
// Color cbgreen
// Box kx*size,ky*size, size,size
GetColor( kentta( ky, kx ) )
ColorBox( img, kx*size,ky*size, size )
EndIf
Next kx
Next ky
DrawToScreen
Return img
EndFunction
Function InitCollisionTable(kentta_width, kentta_height)
For ky = 0 To kentta_height
For kx = 0 To kentta_width
kentta( ky, kx ) = 0
Next kx
Next ky
EndFunction
Function DrawCollisionTable(x1,y1, kentta_width, kentta_height)
For ky = 0 To kentta_height-1
For kx = 0 To kentta_width-1
Text x1+kx*12, y1+ky*12, Kentta( ky, kx )
Next kx
Next ky
EndFunction
Function CheckCollision( pala_x, pala_y, Pala_size, pala_w, pala_h )
pala_x = RoundDown((pala_x - kenttax) / pala_size)
pala_y = Max( RoundDown((pala_y - kenttay) / pala_size), 0 )
For py = 0 To pala_h
For px = 0 To pala_w
If Kentta( pala_y+py+1, pala_x+px) > 0 And pala( py, px ) = True Then Return 1
Next px
Next py
Return False
EndFunction
Function UpdateMap( kentta_img, pala_x, pala_y, Pala_size, kentta_width, kentta_height, pala_w, pala_h, pala_id )
pala_x = RoundDown((pala_x - kenttax) / pala_size)
pala_y = Max( RoundDown((pala_y - kenttay) / pala_size), 0 ) // varmuuden vuoksi ei "alikirjoiteta" taulukkoa
For py = 0 To pala_h
For px = 0 To pala_w
If Pala( py, px ) = 1 Then Kentta( pala_y+py, pala_x +px ) = pala_id
Next px
Next py
// Poistetaan rivit kun täysiä..
score = 0
For y = 0 To kentta_height-1
nx = 0
For x = 0 To kentta_width-1
If kentta(y,x) > 0 Then nx = nx + 1
Next x
If nx = kentta_width Then
// kaikki ylemmät rivit yhtä alemmaksi
For x = 0 To kentta_width-1
pudotusmatka = 1
For ky = y To 1 Step -1
kentta(ky,x) = kentta(ky-pudotusmatka,x)
Next ky
Next x
score + 1
// irralliset palat...
pala_img = MakeImage( kentta_width * pala_size, pala_size )
MaskImage pala_img, 255, 0 ,255
CopyBox 0, pala_size * y, pala_size * kentta_width, pala_size, 0,0, Image( kentta_img ), Image(pala_img)
MakePalikat( Pala_img, kenttax, y*pala_size+kenttay, pala_size )
DeleteImage pala_img
Scores = Scores + 1000
EndIf
Next y
// häviön tarkistus...
For x=0 To kentta_width-1
If kentta(0,x) > 0 Then GameOnline = -1
Next x
// kuvan päivitys
kentta_img = DrawMap( kentta_img, pala_size, kentta_width, kentta_height )
Return kentta_img
EndFunction
// tekee palikka rivistä irralliset palikat...
Function MakePalikat( img1, x1, y1, pala_size )
For a = 0 To (ImageWidth(img1) / pala_size) - 1
aa.PALIKKA = New( PALIKKA )
aa\x = x1 + a * pala_size
aa\y = y1
aa\aspd = Rnd(2,1)
aa\ang = Rand(0,180)
aa\yspd = 0
aa\img = MakeImage( pala_size, pala_size )
//DrawToImage aa\img
// DrawImageBox img1, 0,0, a * pala_size, 0, pala_size, pala_size
// DrawToScreen
CopyBox a*pala_size,0, pala_size, pala_size, 0,0, Image(img1), Image(aa\img)
Next a
EndFunction
Function DrawPalikat()
For aa.PALIKKA = Each PALIKKA
// liikutus
aa\yspd = aa\yspd + GRAVITY
aa\x = aa\x + Cos( aa\ang ) * aa\aspd
aa\y = aa\y + Sin( aa\ang ) * aa\aspd + aa\yspd
If aa\x < 0 Or aa\y < 0 Or aa\x >=ScreenWidth() Or aa\y >= ScreenHeight() Then
DeleteImage aa\img
Delete aa
Else
DrawImage aa\img, aa\x, aa\y
EndIf
Next aa
EndFunction
// piirtää palan
Function DrawPala( size, pala_id )
GetColor( pala_id )
img = MakeImage( 4*size, 4*size )
DrawToImage img
For y = 0 To 3
For x = 0 To 3
If pala(y,x) = 1 Then //ColorBox( img, x*size,y*size ,size, 2 )
CopyBox 0,0,size,size, x*size, y*size, Image(Box_img( pala_id )), Image(img)
EndIf
Next x
Next y
DrawToScreen
Return img
EndFunction
Function GetColor( pala_id )
If pala_id > 10 Then pala_id - 10
Select pala_id
Case 1 : Color 120, 10, 20
Case 2 : Color 20, 10, 200
Case 3 : Color 20, 110, 20
Case 4 : Color 20, 90, 120
EndSelect
EndFunction
// Matriisin kääntäminen
// http://en.wikipedia.org/wiki/In-place_matrix_transposition
// http://geekswithblogs.net/cwilliams/archive/2008/06/16/122906.aspx
Function RotatePala( pala_x, pala_y, Pala_size, pala_w, pala_h ) // pala_w = kääntämättön pala_h
Dim temp(3,3)
// turn left
For i=0 To 3
For j=0 To 3
temp(i,3-j) = pala(j,i)
Next j
Next i
// lasketaan paljonko arvoja tarvitsee siirtää tasamiseksi vasempaan nurkkaan
nx = 0
For i = 0 To 3
n = 0
For j=0 To 3
If temp(j,i) > 0 Then n + 1
Next j
If n=0 Then nx + 1
Next i
// palan sijainti
pala_x = RoundDown((pala_x - kenttax) / pala_size)
pala_y = RoundDown((pala_y - kenttay) / pala_size)
// törmäystunnistus
For py = 0 To pala_h
For px = 0 To pala_w
If Kentta( pala_y+py+1, pala_x+px) > 0 And temp( py, px ) = True Then Return False
Next px
Next py
// putsataan pala-taulukko
GetPala( -1 )
// kopiodaan arvot pala-muttujaan
For i = 0 To 3
For j=0 To 3
If temp(j,i) > 0 Then pala(j,i-nx) = temp(j,i)
Next j
Next i
EndFunction
Function GetPala( pala_id )
For x=0 To 3
For y=0 To 3
pala( y, x ) = 0
Next y
Next x
Select pala_id
Case 1 // 4 suora
For x=0 To 3
pala( 0, x ) = 1
Next x
Case 2 // L muoto 3 suora
For x=0 To 2
pala( x, 0 ) = 1
Next x
pala( 0, 1 ) = 1
Case 3 // T muotoinen 3 suora
For x=0 To 2
pala( 0, x ) = 1
Next x
pala( 1, 1 ) = 1
Case 4 // kulma pala
pala( 0, 1 ) = 1
pala( 1, 0 ) = 1
pala( 1, 1 ) = 1
Default // jos haluaa vain tyhjätä ruudun
Return 1
EndSelect
EndFunction
Function GetHeight()
n1=0
For y=0 To Pala_max_height
n = 0
For x=0 To Pala_max_width
If pala( x, y ) = 1 Then n + 1
Next x
If n > n1 Then n1 = n
Next y
Return n1
EndFunction
Function GetWidth()
n1=0
For y=0 To Pala_max_height
n = 0
For x=0 To Pala_max_width
If pala( y, x ) = 1 Then n + 1
Next x
If n > n1 Then n1 = n
Next y
Return n1
EndFunction
Function ColorBox( img, x1,y1,size, paksuus = 2)
r = getRGB(RED)
g = getRGB(GREEN)
b = getRGB(BLUE)
r1# = r : g1# = g : b1# = b
kx = x1 + size/2
ky = y1 + size/2
old_dist# = 0
DrawToImage img
Lock Image(img)
For y=y1 To size+y1
For x=x1 To size+x1
dist# = Distance( x,y, kx, ky )*2
If old_dist# < dist# Then k = 1 Else k = -1
r1 = r1 + (dist#/size*2.0) * k
g1 = g1 + (dist#/size*2.0) * k
b1 = b1 + (dist#/size*2.0) * k
old_dist# = dist#
If x < ImageWidth(img) And y < ImageHeight(img) Then
pixel = (( 255 Shl 24 ) + ( Min( Max(r1,0), 255) Shl 16 ) + ( Min( Max(g1,0), 255) Shl 8 ) + Min( Max(b1,0), 255))
PutPixel2 x,y, pixel
EndIf
Next x
Next y
Unlock Image(img)
Color r,g,b
Box x1,y1,size,paksuus
Box x1,y1,paksuus,size
Box x1+size-paksuus+1,y1,paksuus,size
Box x1,y1+size-paksuus+1,size,paksuus
DrawToScreen
Return img
EndFunction
Function UpdateBoxes( stop, kentta_w,kentta_h,sivu=20, palojamax=4 )
maara = 0
For aa.EFECT = Each EFECT
If aa\y2 = 0 Then // muuten ei ole laatikko
aa\y1 = aa\y1 + aa\spd
piirra = True
If aa\x1 >= kenttax-sivu And aa\x1 <=kenttax+kentta_w+sivu Then
If aa\y1 >= kenttay-sivu And aa\y1 <= kenttay+kentta_h+sivu Then
piirra = False
EndIf
EndIf
If piirra = True Then
// DrawGhostImage aa\img, aa\x, aa\y, 0 , Int(100.0 - (aa\y / ScreenHeight())*90)
DrawImage aa\img, aa\x1, aa\y1
If aa\y1 > ScreenHeight() Then
If stop = 0 Then
aa\x1 = Rand(ScreenWidth())
aa\y1 = 0
aa\spd = Rnd( 0.9, 3 )
aa\img = box_img( 10+Rand(1, palojamax ) )
Else
Delete aa
EndIf
Else
maara + 1
EndIf
EndIf
EndIf
Next aa
Return maara
EndFunction
Function MakeLAATIKKOT( palojamax=4, maara = 100 )
For a=1 To maara
aa.EFECT = New(EFECT)
aa\x1 = Rand(ScreenWidth())
aa\y1 = Rand(ScreenHeight())
aa\spd = Rnd( 0.8, 3 )
aa\img = box_img( 10 + Rand(1, palojamax ) )
aa\y2 = 0
Next a
EndFunction
Function DrawLAATIKKO( size, palojamax=4 )
GetColor( Rand(1,4) )
img = MakeImage( size, size )
img = box_img( 10 + Rand(1,palojamax) )
Return img
EndFunction
Function MakeFraktButton( txt$, x,y, width, height, sivu, iter, r1,g1,b1, r2,g2,b2 )
mem = MakeMEMBlock( 25 )
img1 = MakeImage( width, height )
img2 = MakeImage( width, height )
DrawToImage img1
Color 0,0,1
For y1=sivu To height-sivu
For x1=sivu To width-sivu
If y1 Mod 2 = 0 Then
If ( x1 Mod 2 ) = 0 Then Dot x1,y1
Else
If ( x1 Mod 2 ) <> 0 Then Dot x1,y1
EndIf
Next x1
Next y1
DrawToScreen
img1 = DrawFraktBox( img1, sivu, iter, r1,g1,b1 )
img2 = DrawFraktBox( img2, sivu, iter, r2,g2,b2 )
// MaskImage img1, 255,0,255
MaskImage img2, 255,0,255
DrawToImage img1
Color cbwhite
CenterText width/2,-height/2,txt$,2
DrawToImage img2
Color cbRed
CenterText width/2,-height/2,txt$,2
DrawToScreen
PokeFloat mem, 0, img1
PokeFloat mem, 4, img2
// Napin sijnainti yms..
PokeInt mem, 8, x
PokeInt mem, 12, y
PokeInt mem, 16, width
PokeInt mem, 20, height
PokeByte mem, 24, 0 // on / off
Return mem
EndFunction
Function GenerateBoxes( start_pala, end_pala, size )
For a=start_pala To end_pala
GetColor( a )
Box_img(a) = MakeImage( size, size )
Box_img(a) = ColorBox( Box_img(a), 0,0 ,size )
Next a
EndFunction
Function DrawFraktButton( mem )
If mem = 0 Then Return 0
If BoxOverlap( MouseX(), MouseY(), 1,1, PeekInt(mem,8), PeekInt(mem,12), PeekInt(mem,16), PeekInt(mem,20) ) Then
If MouseHit(1) Then PokeByte mem, 24, 2 Else PokeByte mem, 24, 1
Else
PokeByte mem, 24, 0
EndIf
If PeekByte( mem, 24 ) = 0 Then img = PeekFloat(mem,0) Else img = PeekFloat(mem,4)
DrawImage img, PeekInt(mem,8), PeekInt(mem,12)
Return mem
EndFunction
Function DrawFraktBox( img, sivu,iter, r,g,b, mode = 0 )
w = ImageWidth(img)
h = ImageHeight(img)
img1 = MakeImage(sivu*2,h)
img2 = MakeImage(w,sivu*2)
// tehdään kahden viivan fraktaalit ja kopioidaan niistä loput --> nopeampaa
DrawToImage img2
For x = sivu To w-sivu
RndFrakt2( img2, x, sivu, r,g,b,iter )
Next x
DrawToImage img1
For y = sivu To h-sivu
RndFrakt2( img1, sivu, y, r,g,b,iter )
Next y
DrawToImage img
MaskImage img, 255,0,255
Color 255,0,255 : Box 0,0,ImageWidth(img),ImageHeight(img)
Color 0,0,0 : Box sivu,sivu,ImageWidth(img)-sivu*2,ImageHeight(img)-sivu*2
If mode = 1 Then Color 255,0,255 : Box sivu*2,sivu*2,ImageWidth(img)-sivu*4,ImageHeight(img)-sivu*4
DrawImage img2, 0,0
DrawImage img1, 0,0
DrawImage img2, 0,h-2*sivu
DrawImage img1, w-2*sivu,0
DrawToScreen
DeleteImage img1
DeleteImage img2
Return img
EndFunction
Function RndFrakt2( img, kx,ky, r,g,b,iter=50)
px = kx : py = ky
width = ImageWidth(img ) : height = ImageHeight(img)
Dim area(width, height, 3)
Lock Image(img)
For a=0 To iter
px = px + Rand(-1,1)
py = py + Rand(-1,1)
If px>=0 And py>= 0 And px<width And py<height Then
area( px, py, 0 ) = Min( area( px, py, 0 ) + Rand(r),255)
area( px, py, 1 ) = Min( area( px, py, 1 ) + Rand(g),255)
area( px, py, 2 ) = Min( area( px, py, 2 ) + Rand(b),255)
PutPixel2 px, py, ( 255 Shl 24 ) + (area( px, py, 0 ) Shl 16) + (area( px, py, 1 ) Shl 8) + area( px, py, 2 )
Else
px = kx
py = ky
EndIf
Next a
Unlock Image(img)
EndFunction
Function UpdateLines( img1, kentta_w,kentta_h, stop=0 )
DrawToImage img1
For dd.EFECT = Each EFECT
If dd\y2 <> 0 Then // muuten ei ole viiva vaan laatikko
ang# = -GetAngle( dd\x1, dd\y1, dd\x2, dd\y2 )
dd\x1 = dd\x1 + Cos(ang) * dd\spd
dd\y1 = dd\y1 + Sin(ang) * dd\spd
RndFrakt( img1, dd\x1, dd\y1, 0,0, ImageWidth(img1), ImageHeight(img1), kentta_w,kentta_h)
If dd\y1 >= dd\y2 Then
If stop = 0 Then
dd\x1 = Rand(ScreenWidth())
dd\y1 = 0
dd\x2 = dd\x1
dd\y2 = ScreenHeight()
Else
Delete dd
EndIf
EndIf
EndIf
Next dd
DrawToScreen
Return img1
EndFunction
Function NewLine( maara = 25 )
For a=1 To maara
aa.EFECT = New(EFECT)
aa\x1 = Rand(ScreenWidth())
aa\y1 = Rand(-ScreenHeight())
aa\x2 = aa\x1
aa\y2 = ScreenHeight()
aa\spd = Rnd( 0.5, 2 )
Next a
EndFunction
Function RndFrakt( img, kx,ky, x1,y1, width, height, kentta_w,kentta_h , iter=70)
px = kx : py = ky
Lock Image(img)
For a=0 To iter
px = px + Rand(-1,1)
py = py + Rand(-1,1)
If px>=0 And py>= 0 And px<width And py<height Then
// tutkitaan pimennys vai ei..
Darken# = 1.0
If px >= kenttax And px <=kenttax+kentta_w Then
If py >= kenttay And py <= kenttay+kentta_h Then
// darken# = 0.3 // tummennus 50%
EndIf
EndIf
alue(px,py,0) = Min( alue(px,py,0) + Int(Rnd(1,15)*darken#) , 255 )
alue(px,py,1) = Min( alue(px,py,1) + Int(Rnd(1,15)*darken#) , 255 )
alue(px,py,2) = Min( alue(px,py,2) + Int(Rnd(10,15)*darken#) , 255 )
PutPixel2 px, py, ( 255 Shl 24 ) + (alue( px, py, 0 ) Shl 16) + (alue( px, py, 1 ) Shl 8) + alue( px, py, 2 )
Else
px = kx
py = ky
EndIf
Next a
Unlock Image(img)
EndFunction
Function MoveBackGround( img, x,y, px=0,py=0 )
img2 = MakeImage( ImageWidth(img), ImageHeight(img) )
If x >= ImageWidth(img) Then x = ( x Mod ImageWidth(img) )
If y >= ImageHeight(img) Then y = ( y Mod ImageHeight(img) )
ax = ImageWidth(img) - Max(x,0)
ay = ImageHeight(img) - Max(y,0)
CopyBox x,y, ax, ay, 0,0, Image(img), Image(img2) // yläänurkka
If x > 0 Then
CopyBox ax,y, x,ay, ax,0, Image(img), Image(img2)// oikea yläsivu
img2=FlipImageBoxX( img2, ax,0, x,ay )
EndIf
If y > 0 Then
CopyBox x,ay, ax,y, 0,ay, Image(img), Image(img2) // vasen ala
img2 = FlipImageBoxY( img2, 0,ay, ax,y )
CopyBox 0,0, x,y, ax,ay, Image(img), Image(img2) // oikea ala
img2 = FlipImageBoxY( img2, ax,ay, x,y )
img2 = FlipImageBoxX( img2, ax,ay, x,y )
EndIf
DrawImage img2, px,py
DeleteImage img2
EndFunction
remstart
Function MoveBackGround( img, x,y, px=0,py=0 )
img2 = MakeImage( ImageWidth(img), ImageHeight(img) )
x1 = x
x = x Mod ImageWidth(img)
ax = ImageWidth(img) - x
// "ruudun nro" % 2 = 0 niin...
If ( RoundDown(x1 /ImageWidth(img)) Mod 2 ) = 0 Then
// x = x + ImageWidth(img)
EndIf
CopyBox x,y, ax, ay, 0,0, Image(img), Image(img2) // yläänurkka
If x > 0 Then
CopyBox ax,y, x,ay, ax,0, Image(img), Image(img2)// oikea yläsivu
img2 = FlipImageBoxX( img2, ax,0, x,ay )
EndIf
DrawImage img2, px,py
DeleteImage img2
EndFunction
remend
// kääntää kuvan alueen x-akselin suhteen ympäri
Function FlipImageBoxX( img, sx, sy, w, h )
tmp = MakeImage(w,h)
For x=0 To w
CopyBox x+sx-1, sy,1,h, w-x, 0, Image(img), Image(tmp)
Next x
CopyBox 0,0,w,h, sx,sy, Image(tmp), Image(img)
DeleteImage tmp
Return img
EndFunction
Function FlipImageBoxY( img, sx, sy, w, h )
tmp = MakeImage(w,h)
For y=0 To h
CopyBox sx,sy+y-1,w,1, 0, h-y, Image(img), Image(tmp)
Next y
CopyBox 0,0,w,h, sx,sy, Image(tmp), Image(img)
DeleteImage tmp
Return img
EndFunction
Pari kuvaa pelistä:
EDIT: Jaa pitää alkaa etsiä sit erroreita :S Koodissa vähän kaikkea turhaa krääsää, kun pelin efektit muuttuivat kesken koodauksen
- Attachments
-
- tetris01.rar
- Tetris exenä
- (590.54 KiB) Downloaded 354 times
Last edited by Jonhu on Sun Mar 28, 2010 8:31 pm, edited 2 times in total.
Re: Viikkokisa: Back from the Exile!
Vaikuttaa kuvien perusteella hienolta, mutta saan MAV:in kun vien hiiren kumman tahansa napin päälle päävalikossa. Pääsin pelaamaan kun kommentoin napit ja laitoin pelin aloituksen näppäinnapsautuksen taakse.Jonhu wrote:Itse päätin tehdä tetriksen, joka tosin jäi aika pahasti keskeneräiseksi, mutta pelattavissa kuitenkin