Viikkokisa: Back from the Exile!

User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: Viikkokisa: Back from the Exile!

Post by CCE »

Eli ihan vain varmistuakseni kysyn nyt, onko kaikenlainen musiikki täysin kielletty?
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Viikkokisa: Back from the Exile!

Post by Awaclus »

CCE wrote:Eli ihan vain varmistuakseni kysyn nyt, onko kaikenlainen musiikki täysin kielletty?
On.
Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Viikkokisa: Back from the Exile!

Post by Jonhu »

Chaosworm wrote:
CCE wrote:Eli ihan vain varmistuakseni kysyn nyt, onko kaikenlainen musiikki täysin kielletty?
On.
Mitenkäs niiden pikselikomentojen kanssa?

esim.

Code: Select all

img = makeimage(100,100)
putpixel 10,10,pix,image(img)
Tekeillä pikkupelejä ja ohjelmia :)
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Viikkokisa: Back from the Exile!

Post by Awaclus »

Jonhu wrote:
Chaosworm wrote:
CCE wrote:Eli ihan vain varmistuakseni kysyn nyt, onko kaikenlainen musiikki täysin kielletty?
On.
Mitenkäs niiden pikselikomentojen kanssa?

esim.

Code: Select all

img = makeimage(100,100)
putpixel 10,10,pix,image(img)
On sallittuja.
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Viikkokisa: Back from the Exile!

Post by Nassi_Setä »

menee jo pilkun viilaamiseen, mutta saako ASCII-graffoja käyttää?

200. viesti!
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Viikkokisa: Back from the Exile!

Post by Awaclus »

Nassi_Setä wrote:menee jo pilkun viilaamiseen, mutta saako ASCII-graffoja käyttää?

200. viesti!
Saa.
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Viikkokisa: Back from the Exile!

Post by Nassi_Setä »

Ja viellä pitää spämmiä 1 kysymys: Saako SDK:n piirtokomentoja käyttää?
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Viikkokisa: Back from the Exile!

Post by phons »

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.
Image
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Viikkokisa: Back from the Exile!

Post by Awaclus »

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ää.
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: Viikkokisa: Back from the Exile!

Post by Knoy »

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...
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Viikkokisa: Back from the Exile!

Post by Awaclus »

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...
Säännöissä ei ole mitään sekavaa. Yksinkertaistettuna:
- 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ä.
User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: Viikkokisa: Back from the Exile!

Post by CCE »

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 :)
User avatar
Kille
Active Member
Posts: 249
Joined: Wed Aug 26, 2009 3:50 pm
Location: Juankoski

Re: Viikkokisa: Back from the Exile!

Post by Kille »

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.

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 





vihreästä vihusta saa elämiä.
ZEPPELIN
Jatkoa tulossa... tällä kertaa lataus ei kestä viikkoa
Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Viikkokisa: Back from the Exile!

Post by Jonhu »

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:

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ä:
Image
Image

EDIT: Jaa pitää alkaa etsiä sit erroreita :S Koodissa vähän kaikkea turhaa krääsää, kun pelin efektit muuttuivat kesken koodauksen :D
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.
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Viikkokisa: Back from the Exile!

Post by MetalRain »

Jonhu wrote:Itse päätin tehdä tetriksen, joka tosin jäi aika pahasti keskeneräiseksi, mutta pelattavissa kuitenkin :)
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. :)
Post Reply