SIMON’S BASIC C64 – lekcija peta
RETRO KUTAK
SIMON’S BASIC C64 – lekcija peta
Idemo na petu lekciju. Za danas smo pripremili nastavak o naredbama Sajmons bejzika koje se bave grafikom u visokoj i multikolor rezoluciji
Napomene, saveti i objašnjenja
Naredbe povezane sa crtanjem u visokoj i multikolor rezoluciji imaju mnogo zajedničkog jedna sa drugom. U daljim objašnjavanjima smanjićemo nepotrebna ponavljanja za istim stvarima koje su već objašnjene u prethodnim naredbama
Naredbe Simon’s basic-a
REC – iscrtavanje kvadrata i pravougaonika
Ovom naredbom crtamo u visokoj i multikolor rezoluciji kvadrate/pravougaonike. Kordinacija i način ispisa je potpuno identična kao kod PLOT naredbe. Treba imati u vidu da zbir vrednosti kordinate X i širine ne sme da prelazi 320 u visokoj i 160 u multikolor rezoluciji, a zbir vrednosti kordinate Y i visine ne sme biti veća od 200 u obe rezolucije inače program prestaje sa radom i ispisuje poruku „Bad mode“
Format naredbe:
REC x,y,s,v,n – Crta se kvadrat/pravougaonik. Agumenti „x“i „y“ su X i Y kordinata gornjeg levog ugla željenog oblika, „s“ predstavlja širinu, „v“ visinu, a „n“ je način ispisa istog
Primer 1 za visoku rezoluciju:
10 HIRES 2,7
Prelazak u visoki mod rezolucije
20 O=100
Dodeljujemo promenljivi O vrednost 100. Ova promenljiva nam služi za davanje visine i širine u ovom slučaju nacrtanog kvadrata
30 FOR I=1 TO 100 STEP 2
Petlja promenljive I od 1 do 100 sa korakom od 2 koja promenljiva će nam biti uvećanje početnih kordinata kvadrata
40 O=O-4
Umanjujemo visinu i širinu iscrtanog kvadrata za 4
50 IF O<1 THEN 50
Ukoliko smo previše umanjili visinu/širinu (manje od 1) pravimo beskonačnu petlju
60 REC 50+I,50+I,O,O,1
Crtanje u ovom slučaju kvadrata sa početnim kordinatama gornjeg levog ugla 50,50 koje se uvećavaju za vrednost promenljive I, sa visinom i širinom koja se nalazi u promenljivi O (pošto se poćetne kordinate uvećavaju za 2 da bi dobili koncentrične kvadrate visinu i širinu treba umanjiti za duplo, tj.za 4)
70 LOW COL RND(0)*16,7,0
Promena boje ispisa kvadrata (bez promene boje pozadine matrice).
80 NEXT I
Kraj petlje kada promenljiva I dostigne vrednost 100
90 GOTO 90
Beskonačna petlja
Startovanjem ovog programa iscrtaće se 25 koncentričnih kvadrata sa razmakom od jedne tačke. (100 / 2 za korak i podeljeno još sa dva za smanjenje visine i širine), u različitim bojama ispisa (bez promene boja pozadine matrice). Može se zapaziti uticaj promena boje na već nacrtane pravougaonike (kolor matrica 8×8). Dobija se, po našem mišljenju, veoma zanimljiva kombinacija boja iscrtanih kvadrata.
Primer 2 za multikolor rezoluciju:
10 HIRES 2,7
Prelazak u visoku rezoluciju i određivanje boje pozadine (boja ispisa u ovoj naredbi ne igra ulogu u multikolor rezoluciji)
20 MULTI 7,9,2
Prelazak u multikolor rezoluciju i određivanje boja kombinacija ispisa tačaka
30 O=100:M=1
Dodeljivanje promenljivoj O vrednost 100 (visina i širina ovde pravougaonika. Razlog je dvostruka dužina multikolor tačke u odnosu na njenu visinu) i vrednost 1 za promenljivu M (način ispisa u multikolor rezoluciji)
40 X=10:Y=10
Dodeljivanje vrednost promenljivih X i Y koje označavaju kordinate gornjeg levog ugla početnog ispisa koncentričnih pravougaonika
50 EXEC ISCRTAJ
Odlazimo na proceduru za iscrtavanje koncentričnih pravougaonika
60 O=100:M=1
70 X=50:Y=50
Ponovo dodeljujenmo vrednosti promenljivama sa razlikom da su sada kordinate početnog iscrtavanja pravougaonika 50,50
80 EXEC ISCRTAJ
Ponovo odlazimo na proceduru za iscrtavanje koncentričnih pravougaonika sada sa drugim početnim kordinatama
90 GOTO 90
Beskonačna petlja
100 PROC ISCRTAJ
Procedura koja iscrtava koncentrične pravougaonike
110 FOR I=1 TO 100 STEP 2
Petlja promenljive I od 1 do 100 sa korakom od 2 koja promenljiva će nam biti uvećanje početnih kordinata pravougaonika
120 O=O-4
Umanjujemo visinu i širinu iscrtanog pravougaonika za 4
130 IF O<1 THEN END PROC
Ukoliko smo previše umanjili visinu i širinu (manje od 1) izlazimo iz procedure i vraćamo se u glavni program
140 REC X+I,Y+I,O,O,M
Crtanje pravogaonika sa početnim kordinatama X,Y koje smo zadali u glavnom programu koje se uvećavaju za vrednost promenljive I sa visinom i širinom koja se nalazi u promenljivi O, sa vrstom multikolor ispisa tačaka datoj u promenljivi M (pošto se kordinate ispisa uvećavaju za 2 da bi dobili koncentrične pravougaonike visinu i širinu treba umanjiti za duplo tj.za 4)
150 IF M=3 THEN M=1:ELSE:M=M+1
Ukoliko je vrednost promenljive M (vrsta multikolor ispisa) jednaka 3 stavljamo da je 1 i tako ukrug
160 NEXT I
Kraj petlje kada vrednost promenljive I dostigne 100
170 END PROC
Kraj procedure
Prilikom startovanja programa iscrtaće se 25 koncentričnih pravougaonika sa razmakom od jedne tačke (100 / 2 za korak i podeljeno još sa 2 zbog istovremenog smanjenja visine i širine), sa početnim X,Y kordinatama 10,10 u tri različite boje. Odmah se da uočiti da se ovog puta iscrtavaju koncentrični praougaonici a ne kvadrati iako im je programski data ista širina i visina. Razlog je naravno što je multikolor tačka po horizontali dva puta veća od njene vertikale. Zatim će se iscrtati još 25 koncentričnih pravougaonika sa početnim X,Y kordinatama 50,50 sa istom kombinacijom boja. Prilikom preklapanja koncentičnih pravougaonika dobiće se perfektni prelivi preklopljenih boja i veoma interesantna šara. Pokušajte sa eksperimentisanjem. Možete dobiti zaista zanimljive rezultate
BLOCK – Iscrtavanje popunjenog pravougaonika/kvadrata
Ovom naredbom takođe iscrtavamo pravougaonike/kvadrate u visokoj i multikolor rezoluciji sa tom razlikom što su isti ispunjeni bojom ispisa. Kordinacija i način ispisa je potpuno identična kao kod PLOT naredbe.
Format naredbe:
BLOCK xp,yp,xk,xk,n – Crta se ispunjeni kvadrat/pravougaonik.
Argument „xp“ je početna X kordinata oblika,“yp“ je početna Y kordinata oblika,“xk“ je krajnja X kordinata oblika,“yk“ je krajnja Y kordinata oblika, a argument „n“ je način ispisa (kordinacija i način ispisa su identični PLOT naredbi). Naravno, vrednost početnih kordinata ispisa mora biti manja od vrednosti krajnjih kordinata.
Primer 1 za visoku rezoluciju:
10 HIRES 2,7
Prelazak u visoki mod rezolucije
20 FOR I=1 TO 100
Dajemo petlju od 100 ciklusa
30 X=RND(1)*300:Y=RND(1)*170
Zadajemo slučajne X i Y kordinate koje će nam koristiti i za početne i za krajnje kordinate oblika
40 BLOCK X,Y,X+10,Y+10,1
Crtamo ispunjeni kvadrat sa početnim kordinatama X i Y i sa krajnjim kordinatama koje su takođe promenljive X i Y ali uvećane za 10
50 LOW COL RND(1)*16,7,0
Dajemo slučajnu boju ispisa tačaka a zadržavamo istu boju pozadine (kolor matrica 8×8)
60 NEXT I
Kraj petlje kad promenljiva I dostigne krajnju vrednost 100
70 GOTO 70
Beskonačna petlja
Startovanjem ovog primera na ekranu će se iscrtati 100 ispunjenih kvadrata u različitim bojama, slučajnih kordinata, sa visinom i dužinom od 10 tačaka. Obratite pažnju na promenu boja tačaka postojećeg kvadrata ako se drugi nacrta preko njega ili u njegovoj neposrednoj blizini
Primer 2 za multikolor rezoluciju:
10 HIRES 2,7
Prelazak u visoki mod rezolucije
20 MULTI 8,9,11
Prelazak u multikolor
30 M=1
Promenljiva M koja će biti način ispisa ima početnu vrednost 1
40 FOR I=10 TO 145 STEP 5
Pravimo petlju za promenljivu I (koja će u ovom slučaju biti kordinata i početka i kraja iscrtavanja )sa početnom vrednošću 10,za krajnju 140 i sa korakom od 5
50 BLOCK I,I,I+10,I+20,M
Iscrtavamo ispunjene kvadrate početnih kordinata X i Y (vrednost promenljive I), a za krajnje vrednosti kordinacije uzimamo istu promenljivu uvećanu za 10 za X krajnju kordinatu, a za 20 za Y krajnju kordinatu (da bi se iscrtavali kvadrati jer je horizontala tačke dva puta veća od vertikale)
60 IF M=3 THEN M=1:ELSE:M=M+1
Proveramo način ispisa multikolor tačke. Ako je dostigao vrednost 3 vraćamo ga na vrednost 1, u suprotnom uvećavamo vrednost promenljive M za 1
70 NEXT I
Kraj petlje
80 GOTO 80
Beskonačna petlja
Startovanjem primera ispisuju se 27 ispunjenih kvadrata (145-10=135/5) sa pomerenom X i Y osom za 5 tačaka, širine 10 i visine 20 (pošto je tačka horizontale duplo veća od vetikale dobijamo kvadrate) u tri različite boje određenim u naredbi MULTI sa savršenim preklapanjem. Imajte u vidu da kada bi se na celoj slici koristile samo tri različite boje za svaku kombinaciju ispisa multikolor tačaka uvek bi se moglo dobiti savršena preklapanja tačaka tih boja. Takođe, u našem primeru savršeno preklapanje boja se dobija i kada bi se smanjio korak u petlji ili čak potpuno izbrisao (tada važi osnovni korak od +1). Koristeći različite tehnike i sa svih 16 boja mogu se dobiti savršena preklapanja boja u multikolor rezoluciji (naravno ne u istoj kolor matrici (40×25 veličine 8×8) ali pametnim odabirom boja tačaka u slici to se ne može primetiti). Čak i kada je u pitanju visoka, a ne multikolor rezolucija, ako se poštuju pravila jedna boja ispisa i jedna boja pozadine u kolor matrici prilikom crtanja slike i mudrim presecima tačaka, baš na kolor matricama, mogu se dobiti na izgled savršena preklapanja boja (što je naravno mnogo teže postići)
CIRCLE-Crtanje kruga i elipsi
Ova naredba nam služi da iscrtamo krugove i elipse. Kordinacija i način ispisa je potpuno identična kao kod PLOT naredbe.
Format naredbe:
CIRCLE x,y,xr,yr,n – crtanje elipsi ili kruga. Argumenti „x“ i „y“ su kordinate centra kruga ili elipsi. Argument „xr“ nam daje poluprečnik kruga ili poluosu elipse u X kordinati, „yr“ nam daje poluprečnik kruga ili poluosu elipse u Y kordinati, „n“ je način ispisa
Primer 1 za visoku rezoluciju:
10 HIRES 2,7
Prelazak u visoku rezoluciju
20 FOR I=10 TO 100 STEP 5
Petlja za promenljivu I početne vrednosti 10, krajnje 100 sa korakom od 5
30 CIRCLE 100,100,I,I,1
Iscrtavanje kruga sa kordinatama centra 100,100 i poluprečnika X i Y ose vrednosti promenljive I
40 LOW COL I,7,0
Menjanje boje ispisa tačke. Obratite pažnju da smo za boju dali promenljivu I iako ona ide do 100 a boje se kreću od 0 do 15. Razlog je da se za prikaz boje uvek uzimaju prva 4 bita vrednosti promenljive I (0-15) tako da nije bitno ako je vrednost veća od 15 (maksimalna vrednost je 255 – 8 bita – posle čega će se prijaviti greška)
50 NEXT I
Kraj petlje
60 GOTO 60
Beskonačna petlja
Startovanjem ovog primera dobićemo iscrtavanje 19 koncetričnih krugova (100-10=90/5+1) sa razmakom od 5 tačaka. Kao i kod ostalih primera i ovde dolazi do razlivanja boja ako se dve tačke različitih boja iscrtaju u istoj matrici što je odmah uočljivo.
Primer 2 za multikolor rezoluciju:
10 HIRES 2,7
Prelazak u visoku rezoluciju
20 MULTI 5,2,12
Prelazak u multikolor rezoluciju
30 M=1
Vrednost 1 za promenljivu M (način ispisa)
40 FOR I=10 TO 100 STEP 5
Petlja (promenljiva I) početak 10, kraj 100, korak 5
50 CIRCLE 100,100,I,I,M
Crtanje u ovom slučaju elipse X i Y kordinate centra 100,100,poluosa X i Y vrednost promenljive I
60 IF M=3 THEN M=1:ELSE:M=M+1
Promena načina ispisa multikolor tačke
70 NEXT I
Kraj petlje
80 GOTO 80
Beskonačna petlja
Kada startujemo ovaj primer iscrtaće se 19 koncentričnih elipsi sa centralnim kordinatama 100,100 i razmakom od 5 tački. Naravno bez obzira što je poluosa X i Y jednaka iscrtaće se elipsa, a ne krug, jer je, kao što smo već rekli, multikolor tačka dva puta duža od svoje visine. Obratite pažnju da kod naredbe CIRCLE kad iscrtavanje elipsi dođe do kraja ekrana ista neće prijaviti grešku već će se elipse i dalje iscrtavati samo sa odsečenim krajem sa desne strane (u stvari iscrtavaće se linija koja će povezati gornju sa donjom odsečenom stranom)
Toliko za danas. Nastavljamo sa izučavanjem naredbi za crtanje u sledećoj lekciji
Puno pozdrava

