HUOM! Päivityksiä saattaa olla tulossa!
Tämä ohjelma hajottaa näytölle piirretyn kuvan. Kaikki on ohjattavissa, voit päättää sotkettavan alueen, miten paljon sotketaan ja vähän muutakin. Efektiä voi käyttää mm. esineiden hajottamiseen tietokonepeleissä, kuvan epäselventämiseen, fontin muokkaamiseen tekstissä, jne.
Miinuspuolena mainittakoon, ohjelma toimii melko hitaasti, sitä ei siis kannata sijoittaa mihinkään nopeaan looppiin, paitsi jos käytössäsi on melko nopea prosessori.
Käyttöohjeet
Toimintaperiaate on se, että ohjelma käy jokaisen pikselin valitulta alueelta läpi ja kopioi haluttuun kohtaan.
xadd ja yadd
Muuttujat xadd ja yadd määrittävät, mihin kohtaan piste kopioidaan. Uuden pisteen koordinaatti saadaan kaavoista:
uusix = vanhax + xadd ja uusiy = vanhay + yadd
HUOM! Jos super = 0, siirto ei ehkä tapahdu oikeaan suuntaan.
xstep ja ystep
Jokaisen pisteen läpikäyminen toimii tällä tavalla:
FOR xdo = xstart TO xstop STEP xstep FOR ydo = ystart TO ystop STEP ystep 'nyt käsiteltävä piste löytyy kohdasta xdo,ydo NEXT ydo NEXT xdo
xstep ja ystep siis määräävät, miten monen pisteen yli kullakin akselilla hypätään.
xstart, ystart, xstop ja ystop
Nämä muuttujat määräävät sotkettavan alueen. Sotkettava alue on suorakulmio koordinaateissa (xstart,ystart)-(xstop,ystop)
always, super, movenc ja movebg
Nämä ovat muuttujat, joilla määritetään sotkemisen kylläisyys, teho ja sotkemistapa. Jos always = 1, jokainen läpikäyty piste siirretään, muuten siirrettävät pisteet arvotaan. superia taas voidaan käyttää "tehosekoittamiseen", jolloin saman pisteen siirtoa kahta kertaa ei estetä (super = 1). Jos super = 0, tämä estäminen tapahtuu. Seuraava muuttuja, movenc, määrittää, kopioidaanko vai siirretäänkö piste. Jos movenc = 1, piste siirretään, ja vanhaan kohtaan piirretään piste halutulla värillä. Periaatteena on, että uusi piste on pohjan väri, jolloin katsoja saa vaikutelman, että piste todella on siirretty, eikä kopioitu. Pohjan väri määritetään muuttujassa bgcolor. Viimeinen muuttuja, movebg määrää, siirretäänkö pohjan väriset pisteet. Jos movebg = 1, pisteet siirretään, jos 0, ei siirretä.
ps. SAAT KÄYTTÄÄ JA MUOKATA EFEKTIÄ VAPAASTI, EIKÄ TEKIJÄÄ TARVITSE MAINITA. ET KUITENKAAN SAA VÄITTÄÄ MISSÄÄN, ETTÄ ITSE EFEKTI OLISI SINUN TEKEMÄSI. SAAT KUITENKIN PITÄÄ KAIKKI OIKEUDET ITSELLÄSI OHJELMAKOKONAISUUDESSA, JOSSA KÄYTÄT TÄTÄ EFEKTIÄ.
SCREEN 13 'näyttötila RANDOMIZE TIMER 'satunnaislukuja 'sotkemisen asetukset xadd = 1 'kuinka paljon pisteitä siirretään yadd = 1 xstep = 1 'kuinka monen pisteen yli hypätään ystep = 1 xstart = 1 'sotkettava alue, ei kovin tarkka ystart = 1 xstop = 320 ystop = 200 always = 0 'siirretäänkö jokaista läpikäytyä pistettä super = 0 'supersotkeminen, ei estetä saman pisteen siirtoa kahta kertaa movenc = 1 'kopioidaanko vai siirretäänkö piste bgcolor = 1 'pohjan väri movebg = 0 'siirretäänkö pohjan väriset pisteet 'nyt piirrellään jotain... LINE (0, 0)-(320, 200), bgcolor, BF PRINT "Ohjelmointiputka" LINE (INT(RND * 320), INT(RND * 200))-(INT(RND * 320), INT(RND * 200)), INT(RND*200), INT(RND * 12) + 2 LINE (INT(RND * 320), INT(RND * 200))-(INT(RND * 320), INT(RND * 200)), INT(RND*200), INT(RND * 12) + 2, B LINE (INT(RND * 320), INT(RND * 200))-(INT(RND * 320), INT(RND * 200)), INT(RND*200), INT(RND * 12) + 2, BF CIRCLE (INT(RND * 320), INT(RND * 200)), INT(RND * 100) + 2, INT(RND * 12) + 2 CIRCLE (INT(RND * 320), INT(RND * 200)), INT(RND * 100) + 2, INT(RND * 12) + 2 CIRCLE (INT(RND * 320), INT(RND * 200)), INT(RND * 100) + 2, INT(RND * 12) + 2 'tästä alkaa kaikki sotkemiseen liittyvät jutskat IF xstart > xstop AND xstep > 0 THEN xstep = 0 - xstep 'ettei for ala sekoilla IF xstart < xstop AND xstep < 0 THEN xstep = 0 - xstep IF ystart > ystop AND ystep > 0 THEN ystep = 0 - ystep IF ystart < ystop AND ystep < 0 THEN ystep = 0 - ystep IF super = 0 THEN 'jos super = 0 'estetäään saman pisteen siirto kahta kertaa siirtämällä pisteitä 'eri suuntaan kuin mutä kuvaa käydään läpi IF xadd > 0 AND xstep > 0 THEN SWAP xstart, xstop: xstep = 0 - xstep IF yadd > 0 AND xstep > 0 THEN SWAP ystart, ystop: ystep = 0 - ystep IF xadd < 0 AND xstep < 0 THEN SWAP xstart, xstop: xstep = 0 - xstep IF yadd < 0 AND xstep < 0 THEN SWAP ystart, ystop: ystep = 0 - ystep END IF FOR xdo = xstart TO xstop STEP xstep 'käydään valitulta alueelta kaikki halutut pisteet läpi FOR ydo = ystart TO ystop STEP ystep di = CINT(RND) 'di:n arvoksi joko 0 tai 1 IF always = 1 THEN di = 1 'jos always =1, di joka tapauksessa 1:ksi IF di = 1 THEN 'jos di = 1 movepoint = 1 IF movebg = 0 THEN IF POINT(xdo, ydo) = bgcolor THEN movepoint = 0 END IF IF movepoint = 1 THEN clr = POINT(xdo, ydo) 'clr:n arvoksi väri kohdasta xdo,ydo PSET (xdo + xadd, ydo + yadd), clr IF movenc = 1 THEN PSET (xdom ydo), bgcolor 'jos movenc = 1, piirretään pohjan värinen piste vanhan pisteen tilalle END IF END IF NEXT ydo NEXT xdo 'tähän loppuu kaikki sotkemiseen liittyvät jutskat
Kuinka nopia prossun pitäisi olla? Osaatko arvioida?
EDIT: Siis siihen, että viitsisi laittaa looppiin.
Koko näytön sotkemiseen loopissa saisi olla n. 2GHz -prossu, mutta pienempään alueeseen riittäisi kai pienempikin. Itse testasin tätä < 166 MHz -prossulla, joten not sure... Pokettamalla varmaan saisi nopeutusta, mutta jostakin vanhasta keskustelusta saamani pokepsettausohje bugasi. :(
EDIT: Jos laitat xstepin ja ystepin suuriksi, ohjelma nopeutuu huomattavasti, mutta sekoitus ei ole kovin tiheää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.