RETRO KUTAK: SIMON’S BASIC C64 lekcija šesta
Lekcija šesta
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
Danas nastavljamo i završavamo sa naredbama Simon’s Basica koje se bave grafikom u visokoj i multikolor rezoluciji.
Napomene, saveti i objašnjenja
Kao što ste primetili, ima zaista mnogo naredbi za crtanje u višim grafičkim modovima, od kojih neke verovatno nikada nećete koristiti. Ipak, dobro je biti upoznat sa njima. Preporuka je da što više eksperimentišete sa ovim naredbama kako biste dobili zaista interesantne efekte koje kasnije možete koristiti u svojim programima.
Naredbe Simon’s Basica
ARC – crtanje dela kružnice ili elipse
Ovom naredbom iscrtavamo deo kružnice ili deo elipse. Uglovi u parametrima se daju u stepenima (0 – 360°). Koordinacija i način ispisa su identični PLOT naredbi.
Format naredbe:
ARC x,y,pu,ku,us,px,py,n - iscrtava se deo kruga ili elipse- x i y: X i Y koordinate centra kruga ili elipse.
- pu: Početni ugao u stepenima.
- ku: Krajnji ugao u stepenima.
- us: Ugao između pravih koji prave kružnicu ili elipsu (što manji broj, počev od 1, kružnica ili elipsa je bolje, ali sporije iscrtana i obrnuto, što veći broj, kružnica ili elipsa je lošije, ali brže iscrtana).
- px: Poluprečnik kruga ili elipse u X ravni.
- py: Poluprečnik kruga ili elipse u Y ravni.
- n: Način ispisa.
Primer 1 za visoku rezoluciju
10 HIRES 2,7 ' Prelazak u visoku rezoluciju
20 FOR I=1 TO 10 ' Petlja za I (1-10)
30 ARC 100,100,I,I*25,5,I*10,I*10,1 ' Iscrtavamo u ovom slučaju deo kruga sa koordinatama centra 100,100, početnog ugla vrednost promenljive I, krajnjeg ugla vrednost I pomnožene za 25, sa uglom iscrtavanja od 5 stepeni (manji ugao/veća preciznost/bolje iscrtani oblik, veći ugao/manja preciznost/lošije iscrtan oblik, ali je iscrtavanje brže), sa poluprečnikom kružnice u X i Y osi 10 puta uvećane vrednosti promenljive I
40 NEXT I ' Kraj petlje kada I dostigne 10
50 GOTO 50 ' Beskonačna petljaStartovanjem primera dobijamo iscrtavanje 10 dela kružnice odmaknutih jedna od druge za 10 tačaka, koje se sa svakim sledećim ispisivanjem povećavaju, kako u obimu, tako i u procentu iscrtavanja.
Primer 2 za multikolor rezoluciju
10 HIRES 2,7 ' Prelazak u visoku rezoluciju
20 MULTI 2,3,4 ' Prelazak u multikolor rezoluciju
30 FOR I=1 TO 10 ' Petlja za I od 1 do 10
40 COLOUR RND(1)*16,RND(1)*16 ' Promena boje okvira i pozadine slučajnim odabirom. Naredba COLOUR menja kako boju okvira u svim modovima tako i boju pozadine u multikolor rezoluciji koja je postavljena na početku programa naredbom HIRES
50 ARC 70,100,I,I*25,5,I*10,I*10,1 ' Iscrtavamo u ovom slučaju deo elipse sa koordinatama centra 70,100, početnog ugla vrednosti promenljive I, krajnjeg vrednosti I pomnožene za 25, uglom iscrtavanja od 5 stepeni (manji ugao veća preciznost, veći ugao manja preciznost ali brže iscrtavanje), sa poluprečnikom elipse u X i Y osi 10 puta uvećane vrednosti promenljive I
60 LOW COL RND(1)*16,1,2 ' Menjamo boju iscrtavanja slučajnim odabirom za prvu kombinaciju tačaka (jedinu koju koristimo u ovom programu što znači ako dođe do preklopa dveju tačaka u istoj matrici stara će poprimiti boju nove tačke)
70 NEXT I ' Kraj petlje kada I dostigne 100
80 GOTO 80 ' Beskonačna petljaOvim primerom takođe iscrtavamo 10 dela, u ovom slučaju, elipse (razlog zašto je elipsa a ne krug već znate iz opisa prethodnih naredbi, pa se nećemo više vraćati na to). Istovremeno menjamo boju pozadine, okvira i tačaka iscrtavanja samo za jednu kombinaciju koju koristimo za ispis. I ovde, kao kod CIRCLE naredbe, imamo slučaj da ako se krug/elipsa iscrtava izvan ekrana, ona se seče dok program nastavlja sa radom.
ANGL – crtanje poluprečnika kružnice ili poluose elipse
Prethodnom ARC naredbom iscrtavali smo deo kružnice ili deo elipse. Ovom naredbom iscrtavamo poluprečnike kruga ili poluose elipse zavisno od zadatih parametara. I ovde su uglovi dati u stepenima (0 – 360°). Koordinacija i način ispisa su identični PLOT naredbi.
Format naredbe:
ANGL x,y,ui,px,py,n - iscrtava se poluprečnik kruga ili poluosa elipse- x i y: X i Y koordinate centra kruga ili elipse.
- ui: Ugao iscrtavanja (0-360°).
- px: Poluprečnik kruga ili elipse u X ravni.
- py: Poluprečnik kruga ili elipse u Y ravni.
- n: Način ispisa.
Primer 1 za visoku rezoluciju
10 HIRES 2,7 ' Prelazak u visoku rezoluciju
20 FOR I=1 TO 36 ' Promenljiva I od 1 do 36
30 ANGL 160,100,10*I,2*I,2*I,1 ' Iscrtavanje poluprečnika sa koordinatama centra 160,100, uglom iscrtavanja vrednosti promenljive I uvećano za 10 puta u svakom prolazu (10x36=360' stepeni), za poluprečnike X i Y ose uzeta je vrednost promenljive I pomnožena sa 2
40 NEXT I ' Kraj petlje (I jednako 36)
50 FOR I=1 TO 36 ' Ponovno zadavanje petlje
60 ANGL 160,100,10*I,72-I*2,72-I*2,1 ' Iscrtavanje poluprečnika sa koordinatama centra 160,100, uglom iscrtavanja vrednosti promenljive uvećano za 10 u svakom prolazu (10x36=360' stepeni), za poluprečnike X i Y ose uzeta je vrednost 72 umanjene za vrednost promenljive I pomnožena sa 2. Ovom drugom petljom dobićemo takozvano "ogledalo" iscrtavanje.
70 NEXT I ' Kraj petlje (I dostiglo 36)
80 GOTO 80 ' Beskonačna petljaPrilikom startovanja ovog primera iscrtaće se 36 linija poluprečnika kruga/elipse. Svaka od njih će biti duža za vrednost promenljive I puta dva i pomerena u odnosu na prethodnu za 10 stepeni dok se ne ispuni pun krug poluprečnika/poluose (360°). Zatim će se ponovo iscrtati 36 linija poluprečnika kruga/elipse sa istim koordinatama ispisa, sa razlikom što će u ovom slučaju prvi poluprečnik biti najduži, a zadnji najkraći, tako da će se dobiti tzv. „ogledalo“ iscrtavanje. Vrlo interesantan efekat!
Primer 2 za multikolor rezoluciju
10 HIRES 2,7
20 MULTI 1,3,4
30 M=1
40 FOR I=1 TO 36
50 ANGL 80,100,5*I,I*2,I*2,M
60 IF M=3 THEN M=1:ELSE:M=M+1
70 NEXT I
80 GOTO 80Kod ovog primera takođe imamo iscrtavanje 36 poluprečnika, linija svih tri multikolor kombinacija tačaka. Razlika je u datom uglu iscrtavanja. Pošto je isti 5, iscrtaće se šara veće gustine tačaka sastavljena od poluprečnika do polovine kruga (36*5=180 stepeni).
PAINT – popunjavanje površine zatvorenih linija
Ovom naredbom ispunjavamo zatvorenu površinu željenom bojom.
Format naredbe:
PAINT x,y,n - Ispunjavanje zatvorenih površina počev od tačke koordinata X i Y datih u argumentima "x" i "y", sa načinom ispisivanja datim u argumentu "n". Koordinacija i ispisivanje su identični PLOT naredbi.Primer 1 za visoku rezoluciju
10 HIRES 2,7
20 CIRCLE 100,100,50,50,1
30 CIRCLE 120,120,50,50,1
40 PAINT 110,110,1 ' Daju se koordinate za ispunjavanje bojom zatvorene površine (u ovom slučaju preseka dva kruga)
50 GOTO 50Startovanjem primera iscrtaće se dva kruga i presek između njih će se ispuniti bojom tačaka određeme u HIRES naredbi. Naredba PAINT je veoma korisna Simon’s Basic naredba i često korišćena prilikom crtanja u višim modovima rezolucije.
Primer 2 za multikolor rezoluciju
10 HIRES 2,7
20 MULTI 8,9,10
30 M=1
40 FOR I=10 TO 120 STEP 10
50 CIRCLE I,100,50,50,M
60 IF M=3 THEN M=1:ELSE:M=M+1
70 NEXT I ' Od reda 40 do reda 70 crtaju se 12 elipsi tri različitim kombinacijama ispisa multikolor tačka čije su boje date u MULTI naredbi
80 M=1
90 FOR I=1 TO 5
100 PAINT RND(1)*160,100,M
110 IF M=3 THEN M=1:ELSE:M=M+1
120 NEXT I ' Od reda 90 do reda 120 boje se zatvorene linije, sa svim tri načinima ispisa multikolor tačaka, 5 puta sa slučajno odabranim X koordinatama (0-159) dok je Y koordinata uvek 100
130 GOTO 130Prilikom startovanja programa iscrtaće se 12 elipsi koje će se seći međusobno, a njihovih 5 slučajno odabranih preseka obojiće se različitim bojama multikolor tačaka. Ovde treba imati u vidu da će se prilikom bojenja možda odabrati slučajne koordinate istog preseka, prilikom čega će se taj presek obojiti ponovo i samim tim neće biti pet obojenih preseka nego manje. Naredba PAINT se često koristila u Simon’s Basicu, naročito kada su bile u pitanju slike u tekstualnim avanturama, pri čemu se štedela memorija, a slike su dobijale posebnu dubinu prikaza.
DRAW – Crtanje proizvoljnog geometrijskog oblika
ROT – Rotacija i promena veličine nacrtanog oblika prethodnom naredbom
Ove dve naredbe idu zajedno. Prvom naredbom DRAW zadajemo niz brojeva kao tekst koji označavaju kako ćemo nacrtati željeni oblik. Druga naredba ROT vrši rotaciju i promenu veličine oblika koji se iscrtava prethodnom naredbom. Početna koordinacija i način ispisivanja tačaka su identične PLOT naredbi.
Formati naredbi:
DRAW "tekst",x,y,n- tekst: Niz brojeva kojim crtamo:
- „0123“ – desno, gore, dole, levo pomeranje bez crtanja tačaka
- „5678“ – desno, gore, dole, levo pomeranje sa crtanjem tačaka
- Broj „4“ nema funkciju
- „9“ prekida crtanje
- x i y: X i Y koordinate početka crtanja.
- n: Način crtanja.
ROT r,v - rotacija i uvećanje oblika nacrtanog prethodnom naredbom.- r: Ugao rotacije u odnosu na prvobitni položaj oblika (0-bez rotacije do 7, svaki broj vredi 45 stepeni – npr. ugao od 90 stepeni je 2 – 2×45).
- v: Povećanje nacrtanog oblika od 1-bez povećanja do 255.
Napomena: Jednom zadani ugao i veličina oblika ostaju da važe za sve naredbe DRAW dok se ne zada druga ROT naredba. Ako se ne zada ROT naredba, naredba DRAW neće funkcionisati.
Primer 1 za visoku rezoluciju
10 HIRES 2,7
20 A$="5555555555666666666688888888887777777777" ' Zadavanje u tekstualnoj promenljivoj A$ šablon za crtanje tačaka desno, gore, levo, dole (kvadrat)
30 B$="3333333333" ' Zadavanje u tekstualnoj promenljivoj B$ šablon razmaka ulevo (bez crtanja tačaka)
40 ROT 0,3 ' Pošto je argument rotacije nula iste neće biti, a za veličinu je dat argument 3 što znači da će se veličina oblika utrostručiti
50 DRAW A$,120,100,1 ' Crtanje kvadrata sa šablonom iz tekstualne promenljive A$, sa početnim koordinatama X i Y - 120,100
60 GET C$:IF C$="" THEN 60
70 DRAW A$,120,100,0 ' Brisanje kvadrata sa šablonom iz tekstualne promenljive A$, sa početnim koordinatama X i Y - 120,100
80 GET C$:IF C$="" THEN 80
90 DRAW A$+B$+B$+A$,120,100,1 ' Crtanje kvadrata sa šablonom iz tekstualne promenljive A$ sa početnim koordinatama X i Y - 120,100, pravljenje 2 razmaka ulevo sa šablonom iz tekstualne promenljive B$ (za već nacrtani kvadrat i za prazninu do drugog kvadrata) i ponovno crtanje kvadrata
100 GET C$:IF C$="" THEN 100
110 HIRES 2,7 ' Brišemo ekran visoke rezolucije
120 ROT 0,1:M=1
130 FOR I=0 TO 7
140 DRAW A$,100,100,1 ' Iscrtavamo oblik
150 ROT I,M ' Vržimo rotaciju sledećeg iscrtanog oblika za vrednost promenljive I i povećanje istog za vrednost promenljive M
160 M=M+0.5 ' Povećanje oblika radimo za 0,5 (povećanje možemo zadati i u decimalnim vrednostima)
170 NEXT I
180 GOTO 180Kada startujemo primer, iscrtaće se kvadrat. Prilikom pritiska nekog tastera, isti će se izbrisati. Ponovnim stiskom nekog tastera nacrtaće se dva kvadrata sa razmakom između njih koji odgovara X koordinati već iscrtanog kvadrata. Na kraju, poslednjim pritiskom na taster, ekran će se izbrisati, sedam kvadrata će se iscrtati, svaki sa rotacijom od 45 stepeni sa istovremenim povećanjem u odnosu na prethodno iscrtani.
Primer 2 za multikolor rezoluciju
10 HIRES 2,7
20 MULTI 3,5,9
30 ROT 0,3
40 M=1
50 A$="5555555555666666666688888888887777777777" ' Zadavanje u tekstualnoj promenljivoj B$ šablon za crtanje tačaka desno, gore, levo, dole (pravougaonik zbog multikolor rezolucije)
160 FOR I=10 TO 120 STEP 5 ' Imamo promenljivu koja će biti X koordinata ispisa i koja se kreće od 10 do 120 sa korakom 5
70 DRAW A$,I,70,M ' Iscrtavamo pravougaonik definisan u promenljivoj A$ koji za koordinate početka ima promenljivu I, a za način multikolor ispisa promenljivu M
80 IF M=3 THEN M=1:ELSE:M=M+1 ' Menjanje načina ispisa multikolor tačaka od 1 do 3
90 NEXT I
100 GOTO 100Kada startujemo primer, videćemo pravougaonik koji će se kretati od leve do desne ivice ekrana sa skokovima od 5 horizontalnih tačaka i ostavljanjem traga u svim načinima ispisa multikolor tačke.
Sa današnjom lekcijom završili smo sa naredbama za crtanje u visokoj i multikolor rezoluciji. U sledećoj lekciji ćemo obraditi naredbe za pisanje u ovim rezolucijama i nastaviti dalje sa naredbama iz drugih oblasti programiranja.
Puno pozdrava!
| SIMON’S BASIC C64 – lekcija prva | https://techfokus.rs/simonss-basic-za-commodorw-64-lekcija-1/ |
| SIMON’S BASIC C64 – lekcija druga | https://techfokus.rs/simons-basic-c64-lekcija-druga/ |
| SIMON’S BASIC C64 – lekcija treća | https://techfokus.rs/simons-basic-c64-lekcija-treca/ |
| SIMON’S BASIC C64 – lekcija čevrta | https://techfokus.rs/simons-basic-grafika-lekcija-4/ |
| SIMON’S BASIC C64 – lekcija peta | https://techfokus.rs/retrokutak-simons-basic-lekcija-peta/ |
| SIMON’S BASIC C64 – lekcija šesta | https://techfokus.rs/retro-kutak-simons-basic-c64-lekcija-sesta/ |
| SIMON’S BASIC C64 – lekcija sedma | https://techfokus.rs/retro-kutak-simons-basic-c64-lekcija-sedma/ |

