Kirjoittaja: Antti Laaksonen
Kirjoitettu: 23.08.2002 – 23.08.2002
Tagit: grafiikka, koodi näytille, vinkki
Tämä koodinpätkä luo samantapaisen efektin kuin taannoisen Aware-intron alussa: pisteet muodostavat animaation kirjaimet ja ne liukuvat aina uusille paikoille. Aware-introssa tekstiä ei pystynyt vaihtamaan, mutta tässä versiossa pystyy: kaikki kirjaimet väliltä A-Z on mahdollista ottaa mukaan missä järjestyksessä tahansa.
'Animoidut kirjaimet '------------------------------ ' 'Tämä ohjelma luo halutusta tekstistä animaation, 'jossa pisteet muodostavat animaation kirjaimet 'ja liikkuvat aina uusille paikoille. ' 'Fontti on hieman muunneltu Windowsin Courier. ' 'Copyright Antti Laaksonen 2002 'www.ohjelmointiputka.net DECLARE SUB PiirraPisteet (pisteet() AS ANY) DECLARE FUNCTION DecBin$ (L AS INTEGER) TYPE TYPEXY x AS SINGLE y AS SINGLE END TYPE 'animoitava teksti teksti$ = "OHJELMOINTIPUTKA" 'tekstin väri tvari% = 15 'yhden kirjainanimaation vaiheet 'mitä suurempi, sen hitaampi animaatio vaiheet% = 10 'taulukot DIM kirjaimet(25, 60) AS TYPEXY DIM pituudet(25) AS INTEGER DIM mkirjaimet(LEN(teksti$), 60) AS TYPEXY DIM pisteet(60) AS TYPEXY 'näyttötila 13, 60x60-ikkuna SCREEN 13 WINDOW SCREEN (0, 0)-(60, 60) PRINT "Ladataan..." 'ladataan kirjaimet taulukkoon FOR s = 0 TO 25 x = 0 kirji = 0 FOR i = 1 TO 8 bin$ = "" FOR j = 1 TO 2 READ t$ t$ = "&H" + t$ bin$ = bin$ + RIGHT$("0000000" + DecBin(VAL(t$)), 8) NEXT x = x + 1 FOR j = 1 TO 14 vari% = VAL(MID$(bin$, j, 1)) IF vari% = 1 THEN kirji = kirji + 1 kirjaimet(s, kirji).x = x kirjaimet(s, kirji).y = j END IF NEXT NEXT READ pituudet(s) pituudet(s) = pituudet(s) - 16 NEXT 'kaikki pisteet keskelle FOR i = 1 TO 60 pisteet(i).x = 4 pisteet(i).y = 8 NEXT 'teksti isoksi teksti$ = UCASE$(teksti$) 'lasketaan pisteiden liikeradat animaatiossa FOR h = 1 TO LEN(teksti$) me% = ASC(MID$(teksti$, h, 1)) - 65 FOR i = 1 TO 60 pvx! = pisteet(i).x pvy! = pisteet(i).y IF i <= pituudet(me%) THEN pisteet(i).x = kirjaimet(me%, i).x pisteet(i).y = kirjaimet(me%, i).y ELSE k% = INT(RND * pituudet(me%)) + 1 pisteet(i).x = kirjaimet(me%, k%).x pisteet(i).y = kirjaimet(me%, k%).y END IF mkirjaimet(h, i).x = (pisteet(i).x - pvx!) / vaiheet% mkirjaimet(h, i).y = (pisteet(i).y - pvy!) / vaiheet% NEXT NEXT 'tyhjennetään näyttö ja määritetään pisteiden väri CLS COLOR tvari% 'kaikki pisteet keskelle: animaatio alkaa FOR i = 1 TO 60 pisteet(i).x = 4 pisteet(i).y = 8 NEXT PiirraPisteet pisteet() 'käydään jokainen merkki läpi FOR h = 1 TO LEN(teksti$) 'käydään jokainen vaihe läpi FOR j = 1 TO vaiheet% 'käydään jokainen piste läpi FOR i = 1 TO 60 pisteet(i).x = pisteet(i).x + mkirjaimet(h, i).x pisteet(i).y = pisteet(i).y + mkirjaimet(h, i).y PiirraPisteet pisteet() NEXT 'pieni viive WAIT &H3DA, 8 NEXT '1/2-sekunnin tauko kirjainten välille a! = TIMER DO WHILE a! + .5 > TIMER: LOOP NEXT 'dataa, joka sisältää kirjainten A-Z pisteet DATA 00, 73, 23, F3, 2F, 93, 3C, 83, 3C, 83, 0F, 93, 03, F3, 00, 73, 58 DATA 20, 13, 3F, F3, 3F, F3, 22, 13, 22, 13, 22, 13, 3F, F3, 1D, E3, 64 DATA 0F, C3, 1F, E3, 30, 33, 20, 13, 20, 13, 30, 13, 3C, 33, 3C, 23, 52 DATA 20, 13, 3F, F3, 3F, F3, 20, 13, 20, 13, 30, 33, 1F, E3, 0F, C3, 60 DATA 20, 13, 3F, F3, 3F, F3, 22, 13, 27, 13, 27, 13, 30, 33, 30, 33, 59 DATA 20, 13, 3F, F3, 3F, F3, 22, 13, 27, 13, 27, 03, 30, 03, 30, 03, 54 DATA 0F, C3, 1F, E3, 30, 33, 20, 13, 21, 13, 31, 13, 3D, F3, 3D, E3, 60 DATA 3F, F3, 3F, F3, 22, 13, 02, 03, 02, 03, 22, 13, 3F, F3, 3F, F3, 64 DATA 00, 03, 20, 13, 20, 13, 3F, F3, 3F, F3, 20, 13, 20, 13, 00, 03, 44 DATA 00, 63, 00, 73, 00, 13, 20, 13, 20, 13, 3F, F3, 3F, E3, 20, 03, 46 DATA 20, 13, 3F, F3, 3F, F3, 23, 13, 2F, 83, 3C, C3, 30, 73, 20, 33, 62 DATA 20, 13, 3F, F3, 3F, F3, 20, 13, 20, 13, 00, 13, 00, 33, 00, 33, 47 DATA 3F, F3, 3F, F3, 0F, 13, 03, C3, 03, C3, 0F, 13, 3F, F3, 3F, F3, 74 DATA 3F, F3, 3F, F3, 0E, 13, 07, 13, 21, C3, 20, E3, 3F, F3, 3F, F3, 72 DATA 0F, C3, 1F, E3, 30, 33, 20, 13, 20, 13, 30, 33, 1F, E3, 0F, C3, 56 DATA 20, 13, 3F, F3, 3F, F3, 21, 13, 21, 13, 21, 03, 3F, 03, 1E, 03, 56 DATA 0F, C3, 1F, E7, 30, 37, 20, 1F, 20, 1B, 30, 3F, 1F, E7, 0F, C7, 65 DATA 20, 13, 3F, F3, 3F, F3, 21, 13, 21, 83, 21, C3, 3F, 73, 1E, 33, 63 DATA 1C, 73, 3E, 73, 22, 33, 22, 13, 23, 13, 31, 13, 39, F3, 38, E3, 59 DATA 30, 03, 20, 13, 20, 13, 3F, F3, 3F, F3, 20, 13, 20, 13, 30, 03, 48 DATA 3F, E3, 3F, E3, 20, 33, 00, 13, 00, 13, 20, 33, 3F, E3, 3F, E3, 60 DATA 38, 03, 3F, 03, 27, C3, 00, F3, 00, F3, 27, C3, 3F, 03, 38, 03, 54 DATA 3F, 83, 23, F3, 03, F3, 0F, 83, 0F, 83, 03, F3, 23, F3, 3F, 83, 66 DATA 30, 33, 38, 73, 2C, D3, 07, 83, 07, 83, 2C, D3, 38, 73, 30, 33, 56 DATA 30, 03, 3C, 13, 2E, 13, 03, F3, 03, F3, 2E, 13, 3C, 13, 30, 03, 52 DATA 30, 33, 30, 73, 20, D3, 23, 93, 27, 13, 2C, 13, 38, 33, 30, 33, 52 'Funktio, joka muuttaa desimaaliluvun binääriluvuksi. 'Otettu vanhasta arkistosta: sekava ja kommentoimaton. FUNCTION DecBin$ (L AS INTEGER) uusi$ = "" u = L DO ul = u \ 2 jj = u MOD 2 u = ul uusi$ = MID$(STR$(jj), 2) + uusi$ IF u = 0 THEN EXIT DO LOOP DecBin$ = uusi$ END FUNCTION 'Aliohjelma, joka piirtää kaikki 60 'pistettä oikeille paikoilleen SUB PiirraPisteet (pisteet() AS TYPEXY) 'tyhjennetään piirtokohta LINE (0, 0)-(8, 16), 0, BF 'käydään jokainen piste läpi FOR i = 1 TO 60 PSET (pisteet(i).x, pisteet(i).y) NEXT END SUB
Hieno! =)
Todellakin :)
Saakos tuota käyttää omissa ohjelmissa, jos mainitsen esim. lopputeksteissä alkup. tekijän?
Todella hieno!
erittäin hieno!
Upea!
Hieno!
Tosi hieno, mutta siinä voisi olla myös kirjaimet Å, Ä ja Ö.
Dj Wolf, saa toki käyttää omissa ohjelmissa, kunhan tekijän nimi löytyy jostain kohtaa ohjelmaa.
eikö näitä kaikkia koodivinkkejä vois käyttää "veloituksetta"?
Hieno!
Efektistä saa muuten n kertaa nopeamman, kun viimeisessä osiossa PiirraPisteet-aliohjelmaa kutsuu vasta NEXT:in jälkeen ;)
Copyright... Aaaaahhhhhhh...... EI!!!
Ihan hieno toi on. Ei valittamista!
kun vaihdoin sanan, ei toiminut! Mistä voisi johtua?
Hieno koodinpätkä