RETRO KUTAK – tehnologija prošlih decenijaSIMON'S BASIC

RETRO KUTAK: SIMON’S BASIC C64 lekcija šesta

SIMON’S BASIC C64 – lekcija šesta donosi završni deo rada sa grafičkim naredbama u visokoj i multikolor rezoluciji na Commodore 64 računaru. U ovom uputstvu detaljno su obrađene naredbe ARC (crtanje delova krugova/elipsi), ANGL (crtanje poluprečnika/poluosa), PAINT (popunjavanje zatvorenih površina), DRAW (crtanje proizvoljnih geometrijskih oblika) i ROT (rotacija i uvećanje).Tekst je deo serijala „RETRO KUTAK“ namenjenog programerima, hobistima i ljubiteljima retro računara u Srbiji. Uključeni su praktični BASIC primeri sa objašnjenjima, lokalizovani za korisnike iz Beograda, Novog Sada, Niša i drugih gradova u regionu koji žele da nauče kako se crtalo na C64.

Fokus ključne reči: Simon’s BASIC C64 crtanje, Commodore 64 BASIC tutorijal, retro programiranje Srbija, multikolor grafika C64, C64 HIRES rezolucija, crtanje u BASIC-u.

Lekcija pomaže retro entuzijastima da savladaju naprednije grafičke tehnike koje su bile korišćene u tekstualnim avanturama i jednostavnim igrama u BASIC jeziku. Ovaj vodič je važan deo očuvanja digitalne baštine i idealan je za sve koji žele da eksperimentišu sa klasičnim kodiranjem u edukativnom kontekstu.

Linkovi ka svim lekcijama Simon’s BASIC C64 tutorijala dostupni su na TechFokus.rs sajtu, a ova lekcija čini most ka sledećoj – koja obrađuje pisanje teksta u grafičkim modovima.

Ovaj sadržaj je lokalizovan za korisnike iz Srbije i regiona, sa ciljem promocije retro programiranja i edukacije novih generacija kroz nasleđe Commodore 64.

 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 petlja

Startovanjem 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 petlja

Ovim 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 petlja

Prilikom 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 80

Kod 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 50

Startovanjem 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 130

Prilikom 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 180

Kada 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 100

Kada 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 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/

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

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