RETRO KUTAK – tehnologija prošlih decenijaSIMON'S BASIC

SIMON’S BASIC C64 – lekcija sedma

SIMON’S BASIC C64 lekcija sedma na sajtu TechFokus.rs pruža praktičan vodič za rad sa tekstualnim i grafičkim elementima na Commodore 64. U ovoj lekciji korisnici uče kako da ispisuju karaktere i tekst u visokoj i multikolor rezoluciji, kako da redefinišu izgled karaktera i kreiraju svoje sprajtove, uključujući njihove pokrete i interakcije. Kroz upotrebu naredbi poput CHAR, TEXT, DESIGN, MOB SET i MMOB, lekcija pokriva napredne tehnike rada sa grafikom i animacijama, uz poseban fokus na praktične primere i simulaciju sudara sprajtova. Idealno za hobi programere i retro entuzijaste u Srbiji i regionu koji žele da savladaju grafiku i animaciju na C64. Lekcija je deo serijala „RETRO KUTAK – SIMON’S BASIC C64“ koji obuhvata ceo niz od uvodnih do naprednih funkcionalnosti u ovom proširenju za BASIC.

RETRO KUTAK

SIMON’S BASIC C64 –  lekcija prva
SIMON’S BASIC C64 – lekcija druga
SIMON’S BASIC C64 – lekcija treća
SIMON’S BASIC C64 – lekcija čevrta
SIMON’S BASIC C64 – lekcija peta
SIMON’S BASIC C64 –  lekcija šesta
SIMON’S BASIC C64 – lekcija sedma 

SIMON’S BASIC C64 – lekcija osma

SIMON’S BASIC C64 – lekcija sedma

Došli smo do sedme lekcije. Danas ćemo videti kako možemo ispisati tekst na ekranima visoke i multikolor rezolucije, definisati nove karaktere, kao i naučiti kako definisati i koristiti sprajtove

 

Napomene, saveti i objašnjenja

Pošto su naredbe za rad sa visokom i multikolor rezolucijama ponavljajuće nećemo ih stalno objašnjavati u svim primerima već samo one naredbe koje su nove ili ukoliko dođe do situacija u kojima postoje nejasnoće.

Da bismo videli sve ekranske kodove karaktera od 0 do 255 (trebaće nam kasnije) kucamo sledeći program:

5 PRINT „(SHIFT+CLR/HOME)“

10 FOR I=0 TO 255

20 PRINT „(SHIFT+KURSOR GORE)KOD „;I;“ ZA KARAKTER“

30 POKE 1047,I

40 GET A$:IF A$=““ THEN 40

50 NEXT I

 

Naredbe Simon’s basic-a

 

CHAR – Prikaz karaktera u visokoj i multikolor rezoluciji

Ovom naredbom vršimo ispisivanje karaktera u visokoj i multikolor rezoluciji. Kordinacija i način ispisa su identični PLOT naredbi

Format naredbe:

CHAR x,y,k,n,p – Ispisivanje kartaktera u višim modovime grafičke rezolucije

Argumenti „x“ i „y“ su X i Y kordinata leve ivice karaktera koji se ispisuje, „k“ je ekranski kod karaktera (0-255), „n“- način ispisa, „p“ – povećanje karaktera po vertikali (0 i 1 ispisivanje bez povećanja)

 

Primer 1 za visoku rezoluciju

10 HIRES 2,7

20 FOR I=0 TO 50

30 CHAR 12*I,10,I,1,I/2

Ispisuje se karakter sa X kordinatama promenljive I uvećane za 12 dok je Y kordinata uvek 10 (tako da kada menjamo boju karaktera i pozadine istog neće doći do preklapanja). „Kod“ svakog karaktera je određen vrednošću promenljive I, a za vertikalnu veličinu istog uzima se pola vrednosti promenljive I, tako da će se po dva karaktera ispisivati istom veličinom

40 LOW COL RND(1)*16,RND(1)*16,0

50 COLOUR RND(1)*16,RND(1)*16

60 NEXT I

70 GOTO 70

Startovanjem primera ispisaće se karakteri na ekranu visoke rezolucije svaki sledeći par duple vertikalne veličine od prethodnog (osim kod prva dva para jer parametar uvećanja za vrednosti 0 i 1 ne daje uvećanje karaktera). Prilikom ispisivanja menjaće se boje okvira, karaktera i pozadine karaktera. Naredba COLOUR menja boju okvira ali nema uticaja na boju pozadine celog ekrana. (To je definisano za svaku kolor matricu (8×8) posebno LOW COL naredbom,a početna pozadinska boja celog ekrana se određuje naredbom HIRES koja ujedno i briše ekran). Imajte u vidu da iako svi karakteri neće moći da se ispišu na ekranu zbog nedovoljnog mesta, program nastavlja sa radom (što možete videti i iz treperenja okvira koji će se nastaviti sve dok se i poslednji karakter ne ispiše izvan vidljivog dela ekrana)

 

Primer 2 za multikolor rezoluciju

10 HIRES 2,7

20 MULTI 3,4,9

30 M=1

40 FOR I=0 TO 50

50 CHAR 8*I,10,I,M,I

Ispisuje se karakter sa X kordinatom vrednosti promenljive I uvećane za 8 puta, Y kordinata je uvek 10 (ovde imamo multikolor sa tačkama ispisanim u svim trim kobinacijama tako da neće doći do preklapanja boja sem u poslednjim ispisivanjima zbog velike vertikalne veličine karaktera). Kod svakog karaktera je određen vrednošću promenljive I kao i vertikalna veličina istog

60 IF M=3 THEN M=1:ELSE:M=M+1

70 LOW COL RND(1)*16,RND(1)*16,RND(1)*16

80 COLOUR RND(1)*16,RND(1)*16

90 NEXT I

100 GOTO 100

Startovanjem ovog primera ispisaće se karakteri na ekranu multikolor rezolucije (svaki sledeći  karakter biće duple veličine od prethodnog osim kod prva dva jer, kako smo to rekli u prethodnom primeru, parametar uvećanja za vrednosti 0 i 1 ne daje uvećanje karaktera). Obratite pažnju na treperenje okvira i cele pozadine (naredba COLOUR ovde ima ulogu kako promene boje okvira tako i promene boje pozadine celog ekrana). Takođe ispisivanje karaktera ide i izvan vidljivog dela ekrana (program ne staje sa radom kako bi prijavio grešku)

TEXT – Ispisivanje niza karaktera na ekranima viših rezolujcija

Ovom naredbom ispisujemo više karaktera (maksimalno 8) u visokoj i multikolor rezoluciji u odnosu na prethodnu koja je ispisivala samo jedan. Kordinacija i način ispisa su identični PLOT naredbi

Oblik naredbe:

TEXT x,y,“tekst“,n,p,r – Ispisivanje teksta datog pod navodnicima na ekranima visoke i multikolor rezolucije. Argumenti „x“ i „y“ su kordinate leve gornje ivice prvog karaktera u tekstu, „tekst“ je tekst koji se ispisuje, „n“ način crtanja, „p“ vertikalno povećanje karaktera (0 i 1 vrednost bez povećanja), „r“ rastojanje između levih ivica karaktera.

Imajte u vidu da tekst koji unosite treba da ima uvek 8 karaktera tako da vašem tekstu dodate koliko treba blanko razmaka da se ispuni ovaj uslov (primer:“PROBA(razmak)(razmak)(razmak)“) inače prilikom ispisavanja prikazaće se znak navoda i ostalo do osmog karaktera. U slučaju da tekst ima više od 8 karaktera višak se odbacuje. Ako želimo da nam ispis bude u prvom setu (velika slova i simboli) posle otvaranje navodnika kod unosa teksta stiskamo control+A (dobija se inverzno slovo A. Ova radnja je potrebna samo ako prethodno aktiviramo drugi set jer je prvi set osnovni), a ako želimo da bude drugi set (mala i velika slova) posle otvaranje navodnika kod unosa teksta stiskamo control+B (dobija se inverzno slovo B)

Primer 1 za visoku rezoluciju

10 HIRES 2,7

20 FOR I=1 TO 10

30 TEXT I*10,I*10,“(CONTROL+B)PROBA   „,1,I,20

Ispsuje se tekst malim slovima „proba“ 10 puta sa razmakom između leve ivice slova 20 tačaka. Svaki ispisani tekst se pomera za 10 tačaka po X i Y kordinati u odnosu na prethodni sa duplim vetikalnim povećanjem

40 NEXT I

50 GOTO 50

Startovanjem primera ispisuje se tekst malim slovima „proba“ deset puta. Svaki sledeći ispisani tekst se pomera desno i dole u odnosu na prethodni i njegova vertikalna veličina se duplira

 

Primer 2 za multikolor rezoluciju

10 HIRES 2,7

20 MULTI 3,4,9

30 M=1

40 FOR I=0 TO 9

50 TEXT I*10,I*15,“CONTROL+B)PROBA  „,M,I,20

Ispisuje se tekst malim slovima „proba“ 10 puta sa razmakom između leve ivice slova 20 tačaka. Svaki ispisani tekst se pomera za 10 po X i za 15 po Y kordinati u odnosu na prethodni sa duplim vertikalnim povećanjem (promenljiva I) i svim kombinacijama ispisa (promenljiva M)

60 IF M=3 THEN M=1:ELSE:M=M+1

70 LOW COL RND(1)*16,RND(1)*16,RND(1)*16

80 COLOUR RND(1)*16,RND(1)*16

90 NEXT I

100 GOTO 100

Startovanjem ovog primera takođe imamo ispisivanje teksta malim slovima „proba“ deset puta sa datim razmakom. Svaki ispisani tekst se pomera desno i dole u odnosu na prethodni i njegova vertikalna veličina se duplira. Istovremeno se menjaju kombinacije ispisa tako da ne dolazi do preklapanja boja (osim kod zadnjih ispisa zbog velike vertikalne veličine karaktera). Takođe se menjaju boje okvira i pozadine čime se vide svi ispisani karakteri (ne bi se videli da je boja karaktera i pozadine ista)

Rad sa formiranjem novih izgleda karaktera u tekstualnom modu

Zahvaljujući ovim naredbama imamo mogućnosti da redefinišemo izgled karaktera koje koristimo u tekstualnom modu.

MEM – preslikavanje karaktera seta u memoriju koja će nam služiti za definisanje novih karaktera kod tekstualnog načina rada

Ovom naredbom karakter set iz ROM (memorije koja se samo čita i koju ne možemo menjati) preslikava u RAM (memoriju koju možemo čitati i menjati) i aktivira ovu memoriju za memoriju aktivnog karakter seta. Daje se bez argumenata

DESIGN 2 – određivanje koji karakter ćemo uzeti za redefinisanje u novi karakter

Ova naredba nam služi da izaberemo karakter koji ćemo da redefinišemo. Preslikana memorija naredbom MEM koja sadrži izglede karaktera  kreće se počev od memorijske adrese 57344 za svaki ekranski kod karaktera koji su definisani sa 8 bajtova.

Oblik naredbe

DESIGN 2,57344+8*k – Biranje karaktera koji ćemo redefinisati. Argument „k“ je broj ekranskog koda karaktera koji ćemo da redefinišemo

 

@ – Defenisanje novog izgleda redefinisanog karaktera

E da, oznaka „et“ iliti „majmunsko a“ se koristila mnogo pre nego što je postala nezamenjivi deo kod raznih e-mail-ova i društvenih mreža. U ovom slučaju kod Sajmons bejzika se koristila za definisanje izgleda novog karaktera, a kasnije ćemo videti da služi i za definisanje sprajtova

Oblik naredbe

@..BB..BB.. – gde argument „.“ predstavlja prazninu,a „B“ tačku u definisanju izgleda novog karaktera (ukupno 8). Unosi se 8 reda (matrica 8×8 za jedan karakter)

Primer:

5 MEM

10 DESIGN 2,57344+8*1

Definišemo novi izgled za slovo „A“ (ekranski kod 1)

20 @ . . . . . BB .

30 @ . . . . . BB .

40 @ . . . . BBB .

50 @ . .BBBB . .

60 @ BB . .BB. .

70 @ BB . .BB. .

80 @ BB .BBB. .

90 @ . BBB .BB.

 

Posle startovanja programa svako slovo A na ekranu imaće novi izgled grčkog slova ALFA (možda nije ispalo najbolje ali to su krajnji dometi mojih umetničkih mogućnosti). Naravno obratite pažnju da između et-a,tačaka i slova „B“ nema razmaka, ovde su dati da bi bilo preglednije. Ovaj ispis redefinisanih karaktera će biti aktivan sve dok računar radi (možete izaći pritiskom na run/stop+restore – sofverski reset). Kao što vidite ovakav način redefinisanja karaktera je veoma dobro osmišljen i ako želite možete definisati celu našu azbuku ili dodati kvačice kod slova naše abecede

 

Rad sa sprajtovima visoke i multikolor rezolucije

Ovim naredbama definišemo izglede sprajtova i vršimo sve potrebne manipulacije sa istim

 

DESIGN 0 – određivanje memorije za definisanje sprajta visoke rezolucije

DESIGN 1 – određivanje memorije za definisanje sprajta multikor rezolucije

Ova naredba sa argumentima 0 i 1 nam služi da odredimo u kom delu memorije ćemo smestiti sprajtove visoke i multikolor rezolucije koje definišemo. Kada smo radili sa sprajtovima u standardnom bejziku imali smo memorijsku adresu koja je određivala u kom bloku ćemo smestiti definisani sprajt. Sada za ovo imamo gore date naredbe

Formati naredbi:

DESIGN 0,a – Definisani visokorezolucijski sprajt će biti smešten u bloku računarske memorije datom u argumentu „a“ (blok x 64). Sprajtovi su veličine 24×21 tačaka u dve boje (boja tačke (1) i boja pozadine(0))

DESIGN 1,a – Definisani multikolor sprajt će biti smešten u bloku računarske memorije datom u argumentu „a“ (blok x 64). Sprajtovi su veličine 12×21 tačaka u četri boje (boje tačake kombinacije (01),(10),(11) i boja pozadine(00))

Kada se radi o blokovima u tekstualnom načinu rada koriste se blokovi od 13 do 15 i 64 do 255 (blok x 64), a kod visoke i multikolor rezolucije koriste se blokovi od 16 do 63 počev od memorijske adrese 49152 (49152 + blok x 64)

 

@ – Definisanje izgleda sprajtova

Kod definisanja izgleda sprajtova se koristi znak „@“

Format naredbe:

@ . . . . . . . . B B B B . . . . . . . . . . . .  – za visokorezolucijski sprajt 24 kombinacije tačaka i slova B

@ . BBBCCCDDD .   – za multikolor sprajt 12 kombinacija tačaka i slova B,C,D

Za obe rezolucije prilikom definisanja imamo 21 red (24×21-visokarezolucija,12×21-multikolor). Imajte u vidu da nema razmaka između et-a, tačaka i slova

 

Primer 1 za definisanje visoko rezolucijskog sprajta

10 DESIGN 0,64*13

Visokorezolucijski sprajt se smešta u blok 13 (64×13=832). Kod Sajmons bejzika smeštanje definicije sprajta u memoriju se radi automatski (nema potrebe za proračunom po bitovima/bajtu)

100 @........................
110 @........................
120 @..BBBB............BBBB..
130 @..BBBBBBBBBBBBBBBBBBBB..
140 @..BBBBBBBBBBBBBBBBBBBB..
150 @..BBBBBBBBBBBBBBBBBBBB..
160 @..BBBBBBBBBBBBBBBBBBBB..
170 @......BBBBBBBBBBBB......
180 @......BBBBBBBBBBBB......
190 @......BBBB....BBBB......
200 @......BBBB....BBBB......
210 @......BBBB....BBBB......
220 @......BBBB....BBBB......
230 @......BBBBBBBBBBBB......
240 @......BBBBBBBBBBBB......
250 @........BBBBBBBB........
260 @..BBBBBBBBBBBBBBBBBBBB..
270 @..BBBB............BBBB..
280 @..BBBBBBBBBBBBBBBBBBBB..
290 @..BBBB............BBBB..
300 @........................

Od 100 do 300 definiše se izgled visokorezolucijskog sprajta. Slovo „B“ predstavlja ispis tačaka sprajta, a „.“ predstavlja transparentnu pozadinu

Napomena: Uzećemo za dalje primere visokorezolucijskog sprajta ovu definiciju i dodavaćemo naredbe počev od programskog reda 400

 

Primer 2 za definisanje izgleda multikolor sprajta:

10 DESIGN 1,64*13

Multikolor sprajt se smešta u blok 13

100 @............
110 @............
120 @.BBB....BBB.
130 @.BBBCCCCBBB.
140 @.BBBCCCCBBB.
150 @.BBBCDDCBBB.
160 @.BBBCDDCBBB.
170 @.BBBCDDCBBB.
180 @.BBBCDDCBBB.
190 @....CDDC....
200 @....CDDC....
210 @....CDDC....
220 @....CDDC....
230 @.BBBCDDCBBB.
240 @.BBBCBBCBBB.
250 @.BBBCBBCBBB.
260 @.BBBCBBCBBB.
270 @.BBBCCCCBBB.
280 @.BBB.CC.BBB.
290 @.BBB....BBB.
300 @............

Ovde od programskog reda 100 do 300 imamo definisanje multikolor sprajta. Kao što vidite isti je upola manji u horizontali od sprajta visoke rezolucije, ali kod prikazivanja imaće istu veličinu kao visokorezolucijski sprajt jer je svaka multiikolor tačka dva puta horizontalno veća od visokorezolucijske.

Definisane su tri multikolor tačke „B“,“C“,“D“ i „.“ za transparentnu pozadinu

Napomena: Uzećemo za dalje primere multikolor sprajta ovu definiciju i dodavaćemo naredbe počev od programskog reda 400

 

MOB SET – Setovanje sprajta (zadavanje parametara istog)

Ovom naredbom setujemo željeni sprajt i zadajemo mu osobine koje želimo. Setovanje se u ovom slučaju odnosi na pripremu za korišćenje istog (još se ne prikazuje)

Format naredbe:

MOB SET s,b,c,p,r – Setuje sprajt i određuje parametre istog

Argument „s“ broj sprajta koji se setuje od 0 do 7 (ukupno 8), „b“ blok memorije gde je smešten sprajt određeno naredbama DESIGN 0 za visokorezolucijski ili DESIGN 1 za multikolor sprajt, „c“ određuje boju tačaka visokorezolucijskog ili tačke „C“ kod multikolor sprajta od 0 do 15, „p“ prioritet u prikazu sprajta (vrednost 0 sprajt zaklanja oblik na ekranu, a za 1 sprajt je zaklonjen oblikom na ekranu), „r“ rezolucija sprajta (za  vrednost 0 uzima se visokorezolucijski u dve boje, a za 1 multikolor sprajt u 4 boje)

 

MOB OFF – Isključenje prikaza željenog sprajta

Ovom naredbom isključujemo prikaz sprajta.

Format naredbe:

MOB OFF s – Isključi sprajt koji ima vrednost u argumentu „s“ od 0 do 7

 

CMOB – zadavanje dodatnih boja za tačku B i D u multikolor modu

Kada radimo u multikolor režimu treba da definišemo još dve boje za tačke „B“ i „D“. Ove dve boje tačaka su zajedničke za sve sprajtove. Boja tačke „C“ je definisana 3 argumentom u naredbi MOB SET i ona je jedina različita kod svih 8 sprajta

Format naredbe:

CMOB b,d – Zadajemo dodatne boje. Argument „b“ boja za tačku B, „d“ boja za tačku D

 

MMOB – aktiviranje i pomeranje sprajta na ekranu

Ovom naredbom aktiviramo/prikazujemo željeni sajt koji je setovan/podešen naredbom MOB SET i vršimo pomeranje istog na ekranu

Format naredbe:

MMOB s,xp,yp,xk,yk,p,b – aktiviramo željeni sprajt i pomeramo ga na ekranu

Argument „s“ je broj sprajta koji uključujemo (0-7), „xp“ – početna X kordinata gornjeg levog ugla sprajta, „yp“ – početna Y kordinata gornjeg levog ugla sprajta (xp,yp su kordinate na kojima se sprajt pojavljuje), „xk“ – krajnja X kordinata gornjeg levog ugla sprajta, „yk“ – krajnja Y kordinata gornjeg levog ugla sprajta (xk,yk su kordinate dokle se sprajt kreće), „p“ – povećanje sprajta (0-bez povećanja, 1-duplo povećanje u horizontali, 2-duplo povećanje u vertikali, 3-duplo povećanje horizontale i vertikale sprajta), „b“ – brzina kretanja sprajta (od 0 – najveća brzina do 255 – najsporija brzina kretanja)

 

Primer 1 za sprajt visoke rezolucije:

Uzmite primer 1 kod definisanja sprajta (programski redovi 10 – 300) i dodajte sledeće

400 MOB SET 0,13,2,1,0

Setujemo sprajt 0 koji je smešten u bloku 13, sa bojom 2 (crvena), prioritetnim iscrtavanjem 1 i isti je visokorezolucijski 0

410 MMOB 0,10,10,150,150,0,5

Aktiviramo sprajt 0, sa početnim X i Y kordinatama 10,10 i krajnjim 150,150, bez povećanja sprajta 0 i brzinom kretanja 5 (veoma brzo)

 

Primer 2 za sprajt multikolor rezolucije:

Uzmite primer 2 kod definisanja sprajta (programski redovi 10 – 300) i dodajte sledeće

400 MOB SET 0,13,2,1,1

Setujemo sprajt 0 koji je smešten u bloku 13, sa bojom tačke „C“ 2 (crvena),sa prioritetnim iscrtavanjem 1 i multikolor rezolucijom 1

410 CMOB 4,7

Dajemo boju tačaka „B“ 4  (ljubičasta) i boju tačaka „D“ 7 (žuta)

420 MMOB 0,10,10,150,150,0,5

Aktiviramo sprajt 0, sa početnim X i Y kordinatama 10,10 i krajnjim 150,150, bez povećanja sprajta 0 i brzinom kretanja 5 (veoma brzo)

 

Kad startujete ova dva primera sprajt u obliku formule (prvi primer visokorezolucijski, drugi multikolor sprajt) će se prošetati velikom brzinom od gornje leve ivice ekrana do njegovog središnjeg dela. Kao što vidite iz ovog primera brzina kretanja sprajta je višestruko veća od kretanja istog u standardnom bejziku (kod Sajmons bejzika kordinate kretanja su zadate naredbom dok kod standardnog bejzika kretanje se vršilo tačku po tačku)

 

RLOCMOB – pomeranje sprajta po ekranu

Ovom naredbom vršimo pomeranje sprajta koji smo aktivirali naredbom MMOB. Razlika ovog pomeranja od onog u prethodnoij naredbi je da se ovde zadaju samo krajnje kordinate već aktiviranog sprajta

Format naredbe:

RLOCMOB s,x,y,p,b – pomeramo željeni sprajt po ekranu

Argument „s“ je broj sprajta koji pomeramo (0-7), „x“ – krajnja X kordinata gornjeg levog ugla sprajta, „y“ – krajnja Y kordinata gornjeg levog ugla sprajta, „p“ povećanje sprajta (0-bez povećanja, 1-duplo povećanje u horizontali, 2-duplo povećanje u vertikali, 3-duplo povećanje horizontale i vertikale sprajta), „b“ – brzina kretanja sprajta (od 0 – najveća brzina do 255 – najsporija brzina kretanja)

Primer (važi i za visokorezolucijski i za multikolor sprajt)

Dodati ove redove kod MMOB primera

500 RLOCMOB 0,RND(1)*300,RND(1)*190,RND(1)*4,RND(1)*255

510 GOTO 500

Kada startujemo ovaj primer formula će početi da se kreće po ekranu, u raznim pravcima, menjajući brzinu kretanja i veličinu po horizontali i vertikali

 

DETECT – zadavanje ispitivanja tipa sudara sprajta (naredba)

CHECK – Ispitivanje sudara između sprajta i sprajta ili sprajta i pozadine (funkcija)

Ova naredba i funkcija idu zajedno. Naredbom DETECT zadajemo koje ispitivanje sudara želimo da uradimo, a funkcijom CHECK proveravamo da li je došlo do sudara čiju smo vrstu ispitanja dali u naredbi DETECT

 

Formati naredbe i funkcije:

DETECT i – Zadajemo koju vrstu sudara želimo da ispitamo. Argument „i“ je 0 ako želimo da ispitamo da li je došlo do sudara sprajta sa sprajtom, a 1 ako je došlo do sudara sprajta i pozadine

CHECK(s1,s2) – provera da li je došlo do sudara između dva sprajta

CHECK(s) – provera da li je došlo do sudara sprajta i pozadine

Ako postoje dva argumenta u funkciji CHECK ispitujemo da li je došlo do sudara sprajta (0-7) u argumentu „s1“ sa sprajtom (0-7) u argumentu „s2“. Ako stoji samo jedan argument „s“ onda se ispituje da li je došlo do sudara sprajta (0-7) u argumentu „s“ sa pozadinom

Napomena: Ako je došlo do sudara rezultat ispitivanja je 0 a ako nije 1. To nije sasvim logično ali šta je tu je. Takođe između funkcije CHECK i leve zagrade nema razmaka

 

Primer dajemo samo za multikolor rezoluciju jer je identično kod visoke rezolucije sa razlikom definisanja sprajta:

10 PRINT „(SHIFT+CLR/HOME)“

20 DESIGN 1,64*13

Setujemo multikolor sprajt (prvi argument vrednost 1) i njegovu definiciju smeštamo u bloku 13

 

100 @............
110 @............
120 @.BBB....BBB.
130 @.BBBCCCCBBB.
140 @.BBBCCCCBBB.
150 @.BBBCDDCBBB.
160 @.BBBCDDCBBB.
170 @.BBBCDDCBBB.
180 @.BBBCDDCBBB.
190 @....CDDC....
200 @....CDDC....
210 @....CDDC....
220 @....CDDC....
230 @.BBBCDDCBBB.
240 @.BBBCBBCBBB.
250 @.BBBCBBCBBB.
260 @.BBBCBBCBBB.
270 @.BBBCCCCBBB.
280 @.BBB.CC.BBB.
290 @.BBB....BBB.
300 @............

400 M=1:P=0

Postavljamo brojač sudara na 1, a indikator prvog sudara na nulu

410 MOB SET 0,13,2,1,1

Setujemo sprajt 0 koji je smešten u bloku 13, sa bojom tačke „C“ 2 (crvena), sa prioritetnim iscrtavanjem 1 i multikolor rezolucijom 1

420 MOB SET 1,13,5,0,1

Setujemo sprajt 1 sa istim blokom 13 (imaćemo identični sprajt), sa bojom tačke „C“ 5 (zelena), sa neprioritetnim iscrtavanjem 0 i multikolor rezolucijom 1

430 CMOB 4,7

Dajemo boju tačaka „B“ 4  (ljubičasta) i boju tačaka „D“ 7 (žuta). Ove boje multikolor tačaka „B“ i „D“ važe za sve sprajtove

440 MMOB 0,10,10,10,10,0,100

Aktiviramo prvi sprajt 0, sa početnim i krajnjim X i Y kordinatama 10,10 (bez pomeranja), bez povećanja sprajta 0 i brzinom kretanja 100 (pošto nema pomeranja nije bitno)

450 MMOB 1,100,100,100,100,0,100

Aktiviramo drugi sprajt 1, sa početnim i krajnjim X i Y kordinatama 100,100 (bez pomeranja), bez povećanja sprajta 0 i brzinom kretanja 100

460 RLOCMOB 0,RND(1)*320,RND(1)*200,RND(1)*4,RND(1)*100

Vršimo pomeranje prvog sprajta 0 sa slučajnim X i Y krajnjim kodinatama (opseg 319,199), sa slučajnim povećanjima širine i visine sprajta i slučajnom brzinom kretanja od 0 do 99

470 DETECT 0

Vršimo detekciju da li je došlo do sudara između sprajtova

480 IF CHECK(0,1)=0 AND P=1 THEN PRINT „SUDAR“;M:M=M+1:P=0:ELSE:P=1

Funkcija proverava da li je došlo do kontakta između sprajta 0 i sprajta 1 i da li indikator prvog sudara ima vrednost 1. Ukoliko je došlo do sudara provera daje vrednost 0 a ukoliko nije 1. Ako je rezultat 0 štampa se tekst „SUDAR“ i broj sudara. Zatim se promenljiva M uvećava za 1. Indikator provere smo morali da stavimo jer prilikom samog startovanja programa ispisaće se poruka „SUDAR“ iako do istog nije došlo. Pošto je indikator u početku 0 neće se registrovati nepostojeći sudar. Ako je došlo do sudara stavljamo vrednost 0 u promenljivu P da bi se sledeće ispitivanje odbilo (dva kretanja sprajta), a ako nije stavljamo vrednost 1 u promenljivu P da bi se sledeće ispitivanje prihvatilo

490 RLOCMOB 1,RND(1)*320,RND(1)*200,RND(1)*4,RND(1)*100

Vršimo pomeranje drugog sprajta 1 sa slučajnim X i Y krajnjim kodinatama (opseg 319,199), sa slučajnim povećanjima širine i visine sprajta i slučajnom brzinom kretanja od 0 do 99

500 DETECT 0

Ponovo vršimo detekciju da li je došlo do sudara između sprajtova

510 IF CHECK(0,1)=0 AND P=1 THEN PRINT „SUDAR“;M:M=M+1:P=0:ELSE:P=1

Druga provera je potrebna zbog kretanja drugog sprajta sve ostalo je isto kao kod prethodne provere

520  MOB SET 0,13,RND(1)*16,1,1

Menjamo boju „C“ tačaka kod prvog sprajta slučajnim odabirom

530  MOB SET 1,13,RND(1)*16,0,1

Menjamo boju „C“ tačaka kod drugog sprajta slučajnim odabirom

540 CMOB RND(1)*16,RND(1)*16

Menjamo zajedničke boje za „B“ i „D“ tačke slučajnim odabirom

550 GOTO 460

Vraćamo se na ponovo dodeljivanje koridnata kretanja sprajtova i ostalih parametara,kao i provere da li je došlo do sudara

 

Startovanjem primera na ekranu pojaviće se dve identične formule sa razlikom jedino u boji tačaka označene u definiciji sa „C“. Kao što vidite jedna definicija sprajta može da se koristi za svih osam sprajta važno je samo dati prilikom setovanja u kom bloku se ta definicija nalazi. Sprajtovi se kreću  u različitim pravcima i ako dođe do sudara ispisaće se tekst i broj sudara. Posle završetka kretanja oba sprajta isti će promeniti boje gde dolazi do izražaja da je različita samo boja zadata za tačku „C“. Treba obratiti pažnju da bi se prilikom startovanja programa bez indikatora P (registrovan prvi sudar) odmah ispisala poruka „SUDAR“ iako do njega nije došlo. To je bio problem i kod standardnog bejzika koji je moguće izbeći na ovaj način. Takođe primetili ste da kada se jedan sprajt kreće drugi miruje. Razlog je taj što će naredba za pokretanje sprajta izvršiti puno kretanje istog do zadatih krajnjih kordinatra pre nego što pređe na drugu naredbu u programu. Imamo dve detekcije sudara posle svake naredbe za pokretanje (razlog je da se sudar detektuje posle pomeranja i jednog i drugog sprajta). Detekcija sudara se pokazuje tek kad sprajtovi završe svoje kretanje što nije zgodno u arkadnim igrama. Ovo je moguće izbeći sa što kraćim pomeranjem sprajta od početnih do krajnjih kordinata. Na kraju zapazili ste da sprajtovi mogu da izađu iz vidljivog dela ekrana kao i to da i dalje između njih može doći do sudara u nevidljivom delu ekrana

 

Sa ovim završavamo današnju lekciju. Do sledeće ostanite znatiželjni i probajte da isprogramirate što više raznih programa koristeći naredbe koje smo učili (verujte nam kada kažemo da je to odlično za moždane sinapse)

 

Puno pozdrava

Nastavite na osmu lekciju 

SIMON’S BASIC C64 –  lekcija prvahttps://techfokus.rs/simonss-basic-za-commodorw-64-lekcija-1/
SIMON’S BASIC C64 – lekcija drugahttps://techfokus.rs/simons-basic-c64-lekcija-druga/
SIMON’S BASIC C64 – lekcija trećahttps://techfokus.rs/simons-basic-c64-lekcija-treca/
SIMON’S BASIC C64 – lekcija čevrtahttps://techfokus.rs/simons-basic-grafika-lekcija-4/
SIMON’S BASIC C64 – lekcija petahttps://techfokus.rs/retrokutak-simons-basic-lekcija-peta/
SIMON’S BASIC C64 –  lekcija šestahttps://techfokus.rs/retro-kutak-simons-basic-c64-lekcija-sesta/
SIMON’S BASIC C64 – lekcija sedmahttps://techfokus.rs/retro-kutak-simons-basic-c64-lekcija-sedma/c

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *