The Matrix CodeFall

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

The Matrix CodeFall

Post by JATothrim »

Koodasin pääpunaisena ja sormet blurrautuen The Matrix Codefall:n löydettynäni tämän kuvan, josta poistin .jpg:n glitchit. Syystä tai toisesta en anna teille efektin lähdekoodia. :P Nauttikaa koodi putouksesta! ;)
EDIT:

Pakettiin lisätty ikkunoitu exe

Attachments
the_MatrixCodeFall.zip
(1.17 MiB) Downloaded 416 times
Last edited by JATothrim on Fri Mar 05, 2010 2:09 pm, edited 1 time in total.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: The Matrix CodeFall

Post by legend »

Unable to set...
Näyttöni koko on 1980 x 1080.
User avatar
KillBurn
Advanced Member
Posts: 339
Joined: Wed Aug 29, 2007 5:02 pm

Re: The Matrix CodeFall

Post by KillBurn »

Laitoin tuon näytön säästäjäksi ja kun näytönsäästäjä aktivoitui niiin tuli MAV.
Mutta ihan hieno. voisi olla parempi että kaikki numerot liikkuisi yhtä nopeaa.
Sumu Games: Sam, Ur eye!
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: The Matrix CodeFall

Post by esa94 »

JATothrim wrote:Syystä tai toisesta en anna teille efektin lähdekoodia.
KOOWEE, OIS HOMMIA! :D

Noei. Mut tää matrixin koodiputous on aina hieno efekti. Gj.
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: The Matrix CodeFall

Post by Sly_Jack0 »

legend wrote:Unable to set...
Näyttöni koko on 1980 x 1080.
Minulla sama reso ja toimi täydellisesti. Ja oli muuten hieno!
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: The Matrix CodeFall

Post by JATothrim »

legend wrote:Unable to set...
Näyttöni koko on 1980 x 1080.
:?: ohjelma testaa GFXModeExists() funktiolla 2000x2000 (32bbp) resoon asti mitkä resot toimivat ja asettaa sitten suurimman reportoidun... Joten legendin probleeman taidan laittaa 800x600 32bpp:n ikkunoidun version.
Näytönsäätäjää mietin, mutta säädin ohjelman vain puoliväliin näytönsäästäjäksi. Jos siis vaihdat .exe -> .scr en ota mitään vastuuta modauksestasi. :twisted:
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: The Matrix CodeFall

Post by phons »

:lol: Voi vitsi.. Tuli punainen laatikko jonka sisällä on vaaleansininen pienempi laatikko, jokta liikkuvat johonkin suuntaan, jossa lukee: "Sync out of range"

Edit: Reso: 1152*864
Image
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: The Matrix CodeFall

Post by JATothrim »

Wanha CB beta 10.4 on tunnetusti vakaa ja järkkymätön, kun Screen komennon kanssa pelleilään.. :mrgreen:
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
User avatar
Kille
Active Member
Posts: 249
Joined: Wed Aug 26, 2009 3:50 pm
Location: Juankoski

Re: The Matrix CodeFall

Post by Kille »

Onhan tämä reilusti hienompi kuin oma, pari viikkoa sitten vääntämäni vastaava.
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: The Matrix CodeFall

Post by Knoy »

Effekti on todella hieno ja kaikkea muuta, mutta miksi se on Esimerkit ja tutoriaalit alueella jos se ei edes ole koodina katsottavana...?
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: The Matrix CodeFall

Post by KilledWhale »

Knoy wrote:Effekti on todella hieno ja kaikkea muuta, mutta miksi se on Esimerkit ja tutoriaalit alueella jos se ei edes ole koodina katsottavana...?
Samaa pohdimme irkissä #toisaalla. Esimerkit ja tutoriaalit alueen kuvauskin sanoo "Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne." ja minun mielestäni koodittomasta efektistä ei ole kellekkään mitään hyötyä. IMO tämä kuuluisi projekteihin koska tämä näyttää lähinnä huonoa esimerkkiä :D
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: The Matrix CodeFall

Post by esa94 »

KilledWhale wrote:minun mielestäni koodittomasta efektistä ei ole kellekkään mitään hyötyä
Itsellesi on, niin kauan kun se on CB:llä tehty :<
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: The Matrix CodeFall

Post by JATothrim »

:3 Ylläri. Koodi oli sen verta pikakirjoitettua, ettei minua huvittanut laitaa sitä mukaan pakettiin heti. Vaan suunnittelin koodin siistimistä + ohjelman toiminnan parantamista. Ja tuohon KW:n decompileriin pitää todellakin keksiä jokin vasta veto. :< Et voisi edes näyttää, millaista *shittiä* se sylkee ulos tuosta minun ohjelmastani. :roll: Ja tässäpä efektin pullasorsa, vain 265 riviä:

Code: Select all

Const img_char_w = 26
Const img_char_h = 21
Const img_chars = 55
Dim imgchartbl(48)

Type codefall
	Field x#
	Field y#
	Field speed#
	Field xoff#
	
	Field memsize%
	Field memque%
	
	Field rpl_counter%
	Field rpl_at%
	Field rpl_turbulence%
	Field rpl_maxjmp%
	
	Field gen_counter%
	Field gen_at%
	Field gen_turbulence%
	Field dmo_at%
EndType

Function DrawLetter(x%, y%, ind%, fade% = 0)
	imgW% = ImageWidth(imgchartbl(0))
	row% = ind / (imgW / img_char_w)
	colum% = ind - row * (imgW / img_char_w)
	If row >= 4 Then a = 1 'korjataan kuvan virhettä..
	DrawImageBox imgchartbl(fade), x, y, colum*img_char_w, a + row*img_char_h, img_char_w, img_char_h
EndFunction

Color 0,255,0
Text  ScreenWidth()/2 - TextWidth("Looking for best graphics mode..") /2, ScreenHeight()/2, "Looking for best graphics mode.."
DrawScreen

// Etsitään suurin (toivottavasti) tuettu grafiikka tila. Parametrilla /w Ohjelma käynnistyy
// 800x600 kokoisessa ikkunassa.
If Trim(CommandLine()) = "/w"
	SCREEN 800,600
Else
	modew = 0
	modeh = 0
	For y=0 To 2000 Step 2
		For x=0 To 2000 Step 2
			If GFXModeExists(x,y,32) Then
				If modew < x Then modew = x
				If modey < y Then modeh = y
			EndIf
		Next x
	Next y
	SCREEN modew,modeh,0,0
EndIf

Color 0,255,0
Text  ScreenWidth()/2 - TextWidth("Loading awesome graphics..") /2, ScreenHeight()/2, "Loading awesome graphics.."
DrawScreen


// Ladataan kuva ja 
m_imgchars% = LoadImage("matrix_code.png")
For i = 0 To 48
	imgchartbl(i) = ImageBrightness(m_imgchars, -6*i + 30)
Next i

rndposwc% = ScreenWidth() / img_char_w
rndposhc% = ScreenHeight() / img_char_h
fall_gen_counter% = 0
fall_gen_at% = 400
m_x% = MouseX()
m_y% = MouseY()
Randomize Timer()

// Näytetään demo.
ApplyDemo()

Repeat

	If fall_gen_counter > fall_gen_at
		fall_gen_counter = 0
		fall_gen_at = Rand(1, 4)

		// generoidaan uusi koodipötkö:
		nque.codefall = New(codefall)
		nque\x = Rand(rndposwc) * img_char_w + Rand(-1,1) * (img_char_w/2)
		nque\y = -img_char_h
		// kaikki pötkön generoimis parametrit riippuvat sen nopeudesta..
		nque\speed = Rand(1, img_char_h) + Rnd(-0.5, 1.0)
		
		nque\xoff = (1 - 2*Rand(1)) * Rnd(nque\speed*3)
		// Arvotaan pötkön pituus. (Min 2 merkkiä, koska muuten MemCopy ei toimi!)
		quesize% = 2 + ((Rand(3, rndposhc) / nque\speed))
		nque\memque = MakeMEMBlock(quesize) 	 
		nque\gen_at% = 1+(randposhc / quesize) +  Int(img_char_h / nque\speed)
		nque\gen_turbulence = Rand(1, nque\gen_at / 2) * (1 - 2*Rand(1))
		// jos pötkö liikuu hitaasti tapahtuu siinä paljon "virheitä"
		nque\rpl_maxjmp = Rand(0, quesize-1)
		nque\rpl_turbulence = Rand(nque\rpl_maxjmp / 6)
		nque\rpl_at = Int(nque\speed * 0.75)
	EndIf
	
	fall_gen_counter + 1
	
	TheMatrixCodefall()
	
	If KeyHit(cbkeyspace)
		ApplyDemo()
		fall_gen_at = 10
	EndIf

	If KeyDown(cbkeyf) Then Text 0,0,"FPS:"+FPS()
	
	// Suljetaan ohjelma jos hiiri liikkuu tarpeeksi.
	If Distance(MouseX(),MouseY(),m_x,m_y) > 10 Then End
	
	DrawScreen
Forever
End

Function TheMatrixCodefall()
	
	For cf.codefall = Each codefall
		cf\y = cf\y + cf\speed
		cf\gen_counter = cf\gen_counter + 1
		cf\rpl_counter = cf\rpl_counter + 1
		
		If cf\memsize = 0
			PokeByte cf\memque, 0, Rand(img_chars)  
			cf\memsize = 1
		EndIf
		
		If cf\gen_counter > cf\gen_at + cf\gen_turbulence + cf\dmo_at
			cf\dmo_at = 0
			cf\gen_counter = 0
			cf\gen_turbulence = Rand(1, cf\gen_at / 2) * (1 - 2*Rand(1))
			// siirrä merkki pötköä muistipalassa..
			If MEMBlockSize(cf\memque)-1 < cf\memsize Then cf\memsize = cf\memsize - 1  
			MemCopy cf\memque, 0, cf\memque, 1, cf\memsize  
			cf\memsize = cf\memsize + 1
			// arvo keulaan uusi merkki
			PokeByte cf\memque, 0, Rand(img_chars)  
			cf\y = cf\y + img_char_h / 2
		EndIf
		
		If cf\rpl_counter > cf\rpl_at + cf\dmo_at
			// Koravataan jokin merkki, pötkön 'hännässä' on epätodennäköisepää
			// että merkki korvautuu.
			cf\rpl_counter = 0
			pos% = cf\rpl_maxjmp
			Repeat
				If Rand(pos) = 0
					PokeByte cf\memque, Int(Min(MEMBlockSize(cf\memque)-1, pos + Rand(cf\rpl_turbulence))), Rand(img_chars)
					Exit
				EndIf
				pos = pos - 1
			Until pos < 0
		EndIf
		
		// Piirretään koodipötkö.
		For i = 0 To cf\memsize-1
			y# = cf\y - i * img_char_h
			If y < ScreenHeight()
				x# = cf\x+(Float(cf\y)/Float(ScreenHeight()))*cf\xoff
				fade% = Max(0, (i / Max(1, Float(cf\memsize-1))) * 48)
				DrawLetter(x, y, PeekByte(cf\memque, i), fade)
			EndIf
		Next i

		// jos koko pötkö tipahti ulos ruudusta, se poistetaan.
		If (cf\y - cf\memsize * img_char_h) > ScreenHeight()
			DeleteMEMBlock cf\memque
			Delete cf
		EndIf
	Next cf
	
EndFunction

// CBSDK:n Vastaavan nimiminen, nopeampi funktio.
Function ImageBrightness(pic%, bright%)
	iw = ImageWidth(pic)
	ih = ImageHeight(pic)
	modified = MakeImage(iw,ih)
	MaskImage modified, Int(Max(0, bright)),int(Max(0, bright)),int(Max(0, bright))
	Lock Image(pic)
	Lock Image(modified)
	For j = 0 To ih-1
		For i = 0 To iw-1
			pixel% = GetPixel2(i,j,Image(pic))
			r = Max(Min((pixel Shl 8) Shr 24 + bright, 255),0)   
			g = Max(Min((pixel Shl 16) Shr 24 + bright, 255),0)
			b = Max(Min((pixel Shl 24) Shr 24 + bright, 255),0)
			PutPixel2 i,j,b + (g Shl 8) + (r Shl 16), Image(modified)
		Next i
	Next j
	Unlock Image(modified)
	Unlock Image(pic)
	Return modified
EndFunction

Function ApplyDemo()
	// Luodaan kuvan merkeistä nipin napin  tunnistettava "The Matrix codefall"
	// Merkit ON valittu luovasti vapaalla silmällä. ;)
	q.codefall = NULL
	// ensin 19 pötköä..
	For i = 1 To 19
		nque.codefall = New(codefall)
		// Keskitetään merkit n. ruudun keskelle.
		nque\x = ((ScreenWidth() / img_char_w)/2 - 9 + i) * img_char_w
		nque\y = -img_char_h
		nque\speed = 1
		nque\xoff = (1 - 2*Rand(1)) * Rnd(nque\speed*2)
		quesize% = 2 + ((Rand(3, rndposhc) / nque\speed))
		nque\memque = MakeMEMBlock(quesize) 	 
		nque\gen_at% = 2+(randposhc / quesize) +  Int(img_char_h / nque\speed)
		nque\dmo_at% = 400 'demo jono ..
		nque\gen_turbulence = Rand(1, nque\gen_at / 2) * (1 - 2*Rand(1))
		nque\rpl_maxjmp = rand(0, quesize-1)
		nque\rpl_turbulence = Rand(1, nque\rpl_maxjmp / 6)
		nque\rpl_at = Int(nque\speed * 0.75)
		
		// lisäämme jokaiseen ainakin yhden merkin!
		nque\memsize = 1
		If i = 1 Then q = nque
	Next i
	// kirjoitetaan viesti.. : P
	PokeByte q\memque, 0, 13't
	q = After(q)
	PokeByte q\memque, 0, 49'h
	q = After(q)
	PokeByte q\memque, 0, 31'e
	q = After(q)
	PokeByte q\memque, 0, 19'space
	q = After(q)
	PokeByte q\memque, 0, 11'M
	q = After(q)
	PokeByte q\memque, 0, 20'a
	q = After(q)
	PokeByte q\memque, 0, 13't
	q = After(q)
	PokeByte q\memque, 0, 49'r
	q = After(q)
	PokeByte q\memque, 0, 16'i
	q = After(q)
	PokeByte q\memque, 0, 54'x
	q = After(q)
	PokeByte q\memque, 0, 19'space
	q = After(q)
	PokeByte q\memque, 0, 10'c
	q = After(q)
	PokeByte q\memque, 0, 8'o
	q = After(q)
	PokeByte q\memque, 0, 4'd
	q = After(q)
	PokeByte q\memque, 0, 31'e
	q = After(q)
	PokeByte q\memque, 0, 50'f
	q = After(q)
	PokeByte q\memque, 0, 20'a
	q = After(q)
	PokeByte q\memque, 0, 32'l
	q = After(q)
	PokeByte q\memque, 0, 32'l
EndFunction
	
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: The Matrix CodeFall

Post by CCE »

Tässä oma käsitykseni asiasta, Hutaisten Tehty Matrix-koodi. Pituutta tahi suorituskykyä en viitsinyt juuri optimoida, pahoittelen.

Code: Select all

Repeat
	For i=0 To 1200	// 40*30
		Color 0, (((i*10) (Timer()/1000) ) Mod 255), 0
		if i< 1200 then Text (i*10) Mod 400, Int(i/40)*10, Chr( (i*1337+(Timer()/1000) Mod 94)+35 ) Else DrawScreen
	Next i
Forever
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: The Matrix CodeFall

Post by koodaaja »

Rivien pituus vähän kasvaa mutta niiden määrä karsiutuu tuosta vielä ainakin kahdella.

Code: Select all

For i = 0 To i+1
    If i = 0 then SCREEN 800, 600 Else Color 0, 255-15*(i Mod 16), 0
    If i Mod 1280 Then Text (RoundDown(i/16.0) Mod 80)*10, (Sin(200*Float(((RoundDown(i/16.0) Mod 80)*887.0/619.0)-RoundDown(((RoundDown(i/16.0) Mod 80)*887.0/619.0))))*1800-10*(i Mod 16)+2*Max(0.2,Abs(Sin(2405*(((RoundDown(i/16.0) Mod 80)*887.0/619.0)-RoundDown((((RoundDown(i/16.0) Mod 80)*887.0/619.0)))))))(i/640.0)) Mod 610-10, Chr(int(79.5+46.5*Cos((RoundDown(i/16.0) Mod 80)*4647+(i/2560)-40((RoundDown(i/2560.0))-(i Mod 16) Mod 80)))) Else DrawScreen
Next i
EDIT: Lisättäköön vielä (ettei ihan offtopiciksi luisu :>) että Jaton efekti on varsin komea, muttei jotenkin tunnu samalta kuin elokuvien. Pitääpä joskus tutkia sitä oikein tarkasti ja jäljitellä.
Last edited by koodaaja on Sat Mar 06, 2010 9:39 pm, edited 1 time in total.
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: The Matrix CodeFall

Post by phons »

Löysin koneeltani tällasen umpi vanhan koodin:

Code: Select all


SCREEN 1280,1024

//Rajoitetaan pyörimisnopeutta,ettei nykimistä tapahdu
//Tekstin putoamisnopeus ei ole suoraan verrannollinen tämän arvon kanssa

//VAKIOITA
Const ScrWidth=1024//Efektiruudun leveys
Const ScrHeight=1024//Efektiruudun korkeus
Const ScrPosX=100//Efektiruudun vasemman yläkulman x-koordinaatti
Const ScrPosY=100//Efektiruudun vasemman yläkulman y-koordinaatti

Const RowWidth=10//Tekstirivin leveys
Const CharHeight=14//Kirjaimen korkeus

Const UpdSpeed=33//Monenko millisekunnin välein tekstiriviä siirretään alas pykälällä
Const DropProb1=0.02////Millä todennäköisyydellä tekstirivi pudotetaan,JOS KAKSI VIEREISTÄ RIVIÄ KUMMALLAKAAN PUOLELLAA EIVÄT TIPU
Const DropProb2=0.01//Millä todennäköisyydellä tekstirivi pudotetaan,JOS VIEREISET RIVIT EIVÄT TIPU
Const DropProb3=0.005//Millä todennäköisyydellä tekstirivi pudotetaan,JOS VIEREINEN RIVI TIPPUU

//MUITA TARVITTAVIA MUUTTUJIA YMS.
Rows=RoundDown(ScrWidth/RowWidth)
CharsInRow=RoundDown(ScrHeight/CharHeight)

//Taulukko tekstirivien tietoja varten
Dim CharRow(Rows+1,3) As Integer

//Vakioita osoittimiksi taulukon sarakkeille
Const IsRowFalling=1//Tippuuko tekstirivi
Const RowFallPosition=2//Tekstirivin sijainti ruuudussa; YKSIKKÖ=CharsInRow*Pikseli
Const LastFallUpd=3//Koska tekstirivin putoaminen viimeksi päivitettiin

//Arvotaan tippuvat rivit, ettei alussa tule "tekstisumaa", joka näyttää huonolta
For i=1 To Rows
    If Rand(1,8)=1 Then
        CharRow(x,IsRowFalling)=True
    EndIf
Next i

//Aputekstit oletuksellisesti päällä
InfoOn=True

//LUUPPI
Repeat
    counter=Timer()
    For x=1 To Rows
        //Ettei lueta taulukon ulkopuolelta arpomisissa (MIKSI TAULUKON PARAMETRIKSI TÄYTYY ANTAA VAKIO TAI MUUTTUJA?!?!?!?!)
        tmp1=Max(x-2,0)
        tmp2=Min(x+2,Rows+1)
        //Jos tekstirivi ei putoa
        If CharRow(x,IsRowFalling)=False Then
            //Sijainti ruudun yläreunassa
            CharRow(x,RowFallPosition)=-1
            //Jos kaksi viereistä riviä kummallakaan puolella ei putoa
            If CharRow(x-1,IsRowFalling)=False And CharRow(x+1,IsRowFalling)=False And CharRow(tmp1,IsRowFalling)=False And CharRow(tmp2,IsRowFalling)=False Then
                //Arvotaan pudotetaanko tekstirivi
                If Rand(1,1/DropProb1)=1 Then
                    CharRow(x,IsRowFalling)=True
                EndIf
                //Jos viereiset rivit eivät putoa
            ElseIf CharRow(x-1,IsRowFalling)=False And CharRow(x+1,IsRowFalling)=False Then
                //Arvotaan pudotetaanko tekstirivi
                If Rand(1,1/DropProb2)=1 Then
                    CharRow(x,IsRowFalling)=True
                EndIf
                //Jos viereiset rivit putoavat
            Else
                //Arvotaan pudotetaanko tekstirivi
                If Rand(1,1/DropProb3)=1 Then
                    CharRow(x,IsRowFalling)=True
                EndIf
            EndIf
            //Jos tekstirivi putoaa
        ElseIf CharRow(x,IsRowFalling)=True Then
            //Sijainnin päivitys ajan mukaan
            If Timer()>CharRow(x,LastFallUpd)+UpdSpeed Then
                //Siirretään
                CharRow(x,RowFallPosition)=CharRow(x,RowFallPosition)+1
                //Päivitetään viimeisimmän päivityksen tapahtumaajankohta biggrin.gif
                CharRow(x,LastFallUpd)=Timer()
            EndIf
            //Jos koko jono on ulkona ruudusta, siirretään se ylös; kts. luupin alkupuoli
            If CharRow(x,RowFallPosition)>2*CharsInRow Then
                CharRow(x,IsRowFalling)=False
            EndIf
        EndIf
        //Yksittäisten merkkien käsittely ylhäältä alas
        //Jonon ylin merkki on siis järjestysluvultaan 1
        For y=1 To CharsInRow
            //Jos Tulostettava merkki on efektiruudun sisällä tulostetaan se
            If CharRow(x,RowFallPosition)-(CharsInRow+1-y)>=0 And CharRow(x,RowFallPosition)-(CharsInRow+1-y)=<CharsInRow Then
                //Merkin sijainti jonossa määrää merkin värin
                Color 0,RoundDown(255/CharsInRow)*y,0
                Text ScrPosX+x*RowWidth-RowWidth,ScrPosY+(CharRow(x,RowFallPosition)-(CharsInRow+1-y))*CharHeight,Chr(Rand(0,256))
            EndIf
        Next y
    Next x
    
    
    
    DrawScreen
Forever
Ei ole oma..
Image
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: The Matrix CodeFall

Post by JATothrim »

phons, koodaaja: hienoja. :) Paitsi että fps ei ole lähellekään siedettavä, toisin kuin omassa efektissäni. 8-) Koodaajalle vinkki, mikäli aijot tehdä samankaltaisen, (kuvan merkeillä siis) niin kokeile käyttää jokaisen putoavaan koodipötköön vain _yhtä_ kuvaa. Tämän pitäisi parantaa suoritus kykyä varsin paljon. :> The Matrix Input ohjelma olisi myös siisti: näpytät asdf ja kirjaimet putoavat nätisti koodipötkön saattelemana keskelle ruutua. Vielä kun äänet saisi. :mrgreen:
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: The Matrix CodeFall

Post by atomimalli »

Minun versioni:

Code: Select all

For i=i To i+1
  If i Mod (40*30) = 40*30-1 Then SetWindow "fps: "+FPS() Else Color 200-Max(0,Min(200,Abs((((-(i Mod (40*30))/30.0/40-(Sin(i Mod 40*7)*Sin(i Mod 40*13)*Sin(i Mod 40*5)*8+2)^2+Timer()/1500.0)Mod 3) )*1500))),255-Max(0,Min(255,Abs((((-(i Mod (40*30))/30.0/40-(Sin(i Mod 40*7)*Sin(i Mod 40*13)*Sin(i Mod 40*5)*8+2)^2+Timer()/1500.0)Mod 3) )*800))),200-Max(0,Min(200,Abs((((-(i Mod (40*30))/30.0/40-(Sin(i Mod 40*7)*Sin(i Mod 40*13)*Sin(i Mod 40*5)*8+2)^2+Timer()/1500.0)Mod 3) )*1500)))
  If i Mod (40*30) = 40*30-1 Then DrawScreen Else Text i Mod 40*10,(i Mod (40*30))/40*10,Chr((i Mod (40*30)) Mod 93 +33)
Next i

Tarkistin leffasta niin ne noudattavat ihan ruudukkoa :)
User avatar
TheDuck
Devoted Member
Posts: 632
Joined: Sun Aug 26, 2007 3:51 pm
Location: C:\Program Files\Tuusula\

Re: The Matrix CodeFall

Post by TheDuck »

Voisin viimeisten viestien perusteella sanoa että JATohrim on failannut rivimäärien perusteella aika pahasti....
^^
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: The Matrix CodeFall

Post by JATothrim »

TheDuck wrote:Voisin viimeisten viestien perusteella sanoa että JATohrim on failannut rivimäärien perusteella aika pahasti....
Noup, en ole, sillä yksikään tähän ketjuun lähetetyistä vastineista ei ole vielä hyödyntänyt tuota kuvaa, joka on siis fonttina oikeassa matrixin efekteissä. Ja tuo oma tekeleeni on nimen omaan minun näkemys koodiputouksesta. Se on nätti ja hieman vauhdikaampi kuin leffassa. :)
Last edited by JATothrim on Sun Mar 07, 2010 2:31 pm, edited 1 time in total.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
Post Reply