SIMON’S BASIC C64 – lekcija deset
RETRO KUTAK
Došli smo i do krajnje desete lekcije. U ovoj lekciji ćemo obraditi naredbe koje se bave zvučnim efektima i muzikom, kao i dati igricu koja će obuhvatiti veliki deo naredbi koje smo do sada naučili.
Napomene, saveti i objašnjenja
Da bismo ostvarili zvučne efekte ili muziku u Sajmons bejziku treba imati u vidu da sve naredbe vezane za zvuk koje ćemo izučavati predstavljaju jedinstvenu celinu i iste se moraju dati zajedno u programu.
Kada želimo da pod znacima navoda damo neki od inverznih simbola koji se odnose na kursore, brisanje ekrana ili funkcijske tastere to postižemo otvaranjem navodnika gde prestaje funkcija ovih tastera i počinje da se ispisuju inverzni simboli koji se odnose na iste. Funkcija tastera se vraća sa zatvaranjem znaka navoda. Takođe možemo ubaciti neki od ovih simbola kada odemo kursorom do željenog mesta i pretisnemo SHIFT+INST/DEL
(SHIFT+BACKSPACE
kod emulatora) nakon čega se pravi praznina (ostatak reda se pomera za jedan karakter udesno). Ako sada stisnemo neki kursorski, funkcijski ili bilo koji akcijski taster umesto da se akcija izvrši dobićemo njihov simbolski prikaz (inverzni znak koji odgovara pretisnutom tasteru).
Naredbe Simon’s basic-a
VOL – jačina zvuka
Ovom naredbom dajemo željenu jačinu zvuka za sva tri kanala. Kao što smo objasnili u lekcijama za standardni bejzik C64 ima mogućnost izvođenja zvuka na tri kanala istovremeno. Svaki kanal je nezavisan jedan od drugog sa mogućnosti njihovih sihronizacija i svaki ima svoja posebna podešavanja osim glavne jačine zvuka koja važi za sva tri kanala.
Format naredbe: VOL z
– jačina zvuka određena argumentom „z“ od 0-bez zvuka do 15-najači zvuk
WAVE – Određivanje oblika zvuka
Ova naredba određuje oblik zvuka. Šta je oblik zvuka? On predstavlja karakter/izgled/suštinu prirodnog izvora zvuka (može biti trouglast, testerast, četvrtast, šum) kojeg želimo emulirati.
Format naredbe: WAVE k,o
– Odabir oblika zvuka. Argument „k“ označava za koji kanal vršimo određivanja oblika zvuka (1-3), a „o“ – 8 bita (0-7 sa desna na levo) u kome svaki bit ima svoju ulogu:
0
– ako je ovaj bit setovan (1) zvuk raste do maksimale, zatim opada do konstantnog nivoa i održava se na istom. Ako je resetovan (0) zvuk opada od konstantnog nivoa do nule.1
– sihronizacija zvuka između kanala ako je setovan – 1 sa 3, 2 sa 1 i 3 sa 2.2
– ako je setovan dobijamo efekat odzvanjanja između pojedinih zvukova.3
– setovanjem se isključuje generisanje zvuka.4
– setovanjem dobijamo trouglasti oblik.5
– setovanjem dobijamo testerasti oblik.6
– setovanjem dobijamo četvrtasti oblik.7
– setovanjem dobijamo beli šum.
Takođe su dozvoljene kombinacije između oblika zvuka.
ENVELOPE – Zadavanje oblika zavojnice zvuka
Ova naredba daje nam balans između porasta/opadanja i održavanja zvuka. Svaki zvuk koji naše uvo čuje ne sastoji se samo od trenutnog ima/nema stanja. Zvuk ima svoje trajanje, rast, opadanje, održavanje, jačinu itd. a zvučni/muzički čip (SID) u C64 sve ovo podržava. Da bismo dobili što je moguće bolju programsku emulaciju moramo sve ovo imati u vidu a ova naredba nam omogućava davanje tih karakteristika željenom zvuku.
Format naredbe: ENVELOPE k,p,o,s,a
– oblik zavojnice zvuka Argument „k“ predstavlja željeni kanal (1-3), „p“ porast jačine zvuka od nule do maksimalne (0-15), „o“ opadanje jačine zvuka do konstantnog nivoa (0-15), „s“ trajanje konstantne jačine zvuka (0-15), „a“ opadanje jačine zvuka od konstantnog do prestanka (0-15).
MUSIC – Izvođenje muzike pomoću zadatih nota
Ovom naredbom spremamo izvođenje muzike/sviranje u Sajmon bejziku zadavanjem željenih nota.
Format naredbi: MUSIC t,"izraz"
Argument „t“ određuje trajanje cele note u intervalu 1/12. Za sekunde treba ih pomnožiti sa 12 (primer za 1 sekundu x 12 treba dati vrednost 12). „izraz“ – glavna stvar koja nam omogućava sviranje. Može biti dat kao tekst pod navodnicima ili tekstualna promenljiva. Prvo moramo dati inverzno srce (SHIFT+CLR/HOME
) za brisanje ekrana u ovom slučaju kanala, onda biramo kanal 1-3, zatim dajemo notu (C,D,E,F,G,A,B ako pretisnemo i taster SHIFT dobijamo polunote), oktavu (0-7) i trajanje note putem funkcijskih tastera (F1-1/16, F3-1/8, F5-1/4, F7-1/2, F2-1, F4-2, F6-4 i F8-8 – pritiskom na iste dobijamo inverzne simbole koji se odnose na funkcijske tastere). Nota, oktava i trajanje idu uvek zajedno kao celina opisa note. Imajte u vidu da kada želite koristiti više kanala da prilikom prelaska jedan u drugi date (SHIFT+CLR/HOME
) simbol inverznog srca za brisanje ekrana, ovde kanala.
PLAY – Startovanje izvođenja zadatih nota
Ovom naredbom note koje smo zadali naredbom MUSIC i podesili ostalim naredbama počinju da se izvršavaju.
Format naredbe: PLAY b
– Početak izvođenja muzike Argument „b“ može biti 1 i 2. Ako je vrednost 1 note se sviraju i dok se muzika ne završi program ne ide dalje. Ako je 2 izvođenje muzike i izvršavanje Sajmons bejzik programa se dešavaju istovremeno.
Na kraju svih ovih naredbi koje su nerazdvojne jedna od drugih možemo dati i primer:
10 PRINT "(SHIFT+CLR/HOME)"
20 PRINT "F1-PONOVNO SVIRANJE":PRINT "F2-KRAJ"
'Pogramske linije 10-20 ispisivanje uputstva
30 VOL 15
'Zvuk na najače za sva tri kanala
40 WAVE 1,00100001
'Određivanje oblika zvuka za prvi kanal (setovani 5 bit - testerasti oblik, bit 0- jačina zvuka raste do maksimuma)
50 WAVE 2,00010011
'Određivanje oblika zvuka za prvi kanal (setovani 4 bit - trouglasti oblik, bit 1-sihronizuju se zvuci 2 i 1 kanala i bit 0-jačina zvuka raste do maksimuma).
60 ENVELOPE 1,10,10,10,10
'Oblik zavojnice za prvi kanal zvuk raste do 10,počinje opadanje od 10, konstantno traje na 10 i gasi se na 10 (u prevodu zvuk je konstantan). Probajte sa raznim kombinacijama (nije bitno koji parametar će biti veći ili manji) možete dobiti interesantne efekte
70 ENVELOPE 2,10,10,10,10
'Oblik zavojnice za drugi kanal je identičan kao i za prvi
80 A$="(SHIFT+CLR/HOME)1C3(F2)D3(F2)E3(F2)F3(F2)G3(F2)A3(F2)B3(F2)"
'Zadajemo u promenljivi A$ note koje će se svirati u prvom kanalu sa njihovim oktavama i trajanjem
90 A$=A$+"(SHIFT+CLR/HOME)1C3(F2)(SHIFT+CLR/HOME)2D5(F2)(SHIFT+CLR/HOME)1C3(F2)(SHIFT+CLR/HOME)2D5(F5)(SHIFT+CLR/HOME)1C3(F2)(SHIFT+CLR/HOME)2C5(F2)D2(F2)"
'Dodajemo promenljivi A$ još nota ovog puta i u jednom i drugom kanalu
100 A$=A$+"(SHIFT+CLR/HOME)1C3(F2)(SHIFT+CLR/HOME)2D5(F2)(SHIFT+CLR/HOME)1C3(F2)(SHIFT+CLR/HOME)2D5(F5)(SHIFT+CLR/HOME)1C3(F2)(SHIFT+CLR/HOME)2C5(F2)D2(F2)"
'Dodajemo promenljivi A$ još nota u jednom i drugom kanalu
110 A$=A$+"(SHIFT+CLR/HOME)1C2(F2)(SHIFT+CLR/HOME)2D2(F2)(SHIFT+CLR/HOME)1C2(F2)(SHIFT+CLR/HOME)2D2(F5)(SHIFT+CLR/HOME)1C2(F2)(SHIFT+CLR/HOME)2C4(F2)D2(F2)"
'Dodajemo promenljivi A$ još nota u jednom i drugom kanalu
120 B$="(SHIFT+CLR/HOME)2B4(F2)G4(F2)C4(F2)D4(F4)C4(F2)C4(F4)D4(F2)"
'Dajemo promenljivi B$ note samo za drugi kanal
130 MUSIC 4,A$+B$+B$
'Pripremamo note za sviranje iz tekstualne promenljive A$ i dva puta iz promenljive B$
140 PROC PONOVO
'Pravimo mesto skoka za slučaj kada se pretisne taster F1
150 PLAY 2
'Počinjemo sa izvođenjem nota iz promenljivih A$ i B$ koje će se vršiti sve dok se program izvršava
160 PROC PETLJA
'Pravimo mesto skoka za neprestano ponavljanje prikaza pretisnutog funkcijskog tastera
170 PRINT AT(10,10)"PRETISNUT F";A
'Prikazuje se pretisnuti funkcijski taster
180 A=INKEY
'U numeričkoj promenljivi A smeštamo vrednost pretisnutog funkcijskog tastera
190 IF A=1 THEN CALL PONOVO
'Ukoliko je pretisnut F1 vraćamo se na naredbu PLAY 2 a samim tim resetujemo izvođenje nota ukoliko su iste odsvirane do kraja, a ukoliko nisu ubrzavamo tempo
200 IF A=2 THEN VOL 0:END
'Ukoliko je pretisnut F2 zvuk se gasi i program se završava
210 CALL PETLJA
'Imamo povratak na dato mesto skoka čime dobijamo beskonačnu petlju
Startovanjem primera dobijamo komponziciju (ako se to uopšte može nazvati komponzicija – autor ovo teksta nije baš u klasi Betovena ali za prosti primer može da prođe) koja se izvodi na dva kanala istovremeno dok se program izvršava. Imajte u vidu da je prilikom pisanja muzičkih nota u Sajmons bejziku najbolje koristiti tekstualne promenljive jer na njih možemo dodati koliko nam je nota potrebno ili iste odsvirati dva ili više puta. Kada note u našoj „komponziciji“ stignu do kraja neprestano će se čuti zadnja odsvirana nota. Tada možemo pretisnuti taster F1 koji će nas poslati na naredbu PLAY čime ćemo restartovati izvođenje od početka ili F2 čime ćemo završiti program (završetak programa i prestanak sa izvođenjem nota možemo dati bilo kada pritiskom na F2). Ukoliko pretisnemo i držimo taster F1 u toku izvođenja veoma ćemo ubrzati tempo (razlog je neprestani odlazak na naredbu PLAY zbog čega se zanemaruje trajanje nota).
Na kraju u današnjoj zadnjoj lekciji Sajmons bezika hajdemo da znanjem koje smo stekli napravimo jednu akcionu igricu u grafici visoke rezolucije sa multikolor sprajtovima. Dva broda od kojih jednim komanduje računar a drugim Vi pokušaće da dostigne 10 pogodaka a samim tim dođe do pobede. Komande broda igrača će biti A za levo, D za desno i razmaknica za ispaljivanje projektila. Pomoću naredbi za rad u visokoj rezoluciji napravićemo pozadinu, upisivati tekst na istoj i daćemo po neki zvučni efekat.
10 PROC POCETAK
'Mesto programskog skoka
20 EXEC ISPIS
'Odlazak na proceduru za ispis početnog ekrana
30 HIRES 2,5
'Prelazak u mod visoke grafičke rezolucije sa bojenjem ispisa 2 (crveno), pozadine 5 (zeleno)
40 BLOCK 0,170,319,199,1
'Crtanje ispunjenog pravougaonika za pozadinu početnih X,Y kordinata 0,170 i krajnjih X.Y kordinata 319,199 sa bojom ispune datom u Hires naredbi 2 (crvenom). Dobijamo izgled crvene zemlje na kome klizi brod igrača
50 LOW COL 7,5,0
'Promena boje ispisa 7 (žuta), boja pozadine ostaje ista, a treći argument 0 je morao da se doda iako u grafici visoke rezolucije nema funkciju
60 LINE 0,10,319,10,1
'Crtanje linije za pozadinu početnih X,Y kordinata 0,10 i krajnjih 319,10 sa ispisom u žutoj boji. Dobijamo liniju koje može da predstavlja visinsku kotu po kojoj klizi vasionski brod računara
70 LOW COL 4,5,0
'Promena boje ispisa 4 (ljubičasta),pozadina ostaje ista
80 CIRCLE 15,155,30,20,1
'Crtanje elipse za pozadinu početne X.Y kordinate 15,155, X poluose 30 i Y poluse 20, sa iscrtavanjem u ljubičastoj boji (ovaj oblik može predstavljati svemirski žbun ili tako nešto)
90 PAINT 17,145,1
'Farbanje nacrtane elipse sa kordinatama 17,145 (bilo koja kordinata u nacrtanom obliku ispuniće taj oblik odabranom bojom ispisa)
100 CIRCLE 300,155,30,20,1
'Crtanje još jedne elipse za pozadinu početne X.Y kordinate 300,155. X poluose 30 i Y poluse 20 sa iscrtavanjem u ljubičastoj boji (još jedan svemirski žbun zašto da ne?)
110 PAINT 305,145,1
'Farbanje nacrtane elipse sa X,Y kordinatama početka 305,145
120 X0=70:X1=150:IG=0:CO=0
'Zadavanje početnih vrednosti promenljivama za horizontalnu kordinatu prvog sprajta (X0) i horizontalnu kordinatu drugog sprajta (X1) i stavljanje nule u brojače bodova igrača i kompjutera
130 EXEC SPRAJT
'Odlazak na proceduru definicije,uključivanja i početne kordinacije sprajta
140 EXEC KRETANJE
'Odlazak na proceduru kretanja sprajta i detekcije sudara
150 END
'Kraj programa
160 PROC SPRAJT
'Procedura za definisanje sprajtova i njihovih uključivanja i početnog razmeštanja na ekranu
170 DESIGN 1,64*16+49152
'Dizajniranje izgleda multikolor sprajta koji će biti smešten u bloku 16 uvećanim za 49152. Kada radimo sa ekranom u visokoj ili multikolor rezoluciji smeštamo opise sprajtova počev od 49152 memorijske lokacije. Ovaj sprajt će biti smešten u memoriji (49152+64*16) od 50176 memorijske lokacije. Rezolucija multikolor sprajta je 12x21 tačaka u tri boje plus transparentna pozadina. Svi sprajtovi koje budemo definisali u ovom programu biće multikolorni
180 @.BBDDBBDDBB.
190 @BCCDDCCDDCCB
200 @.BBDDBBDDBB.
210 @DDDDDDDDDDDD
220 @DDDCBBBBCDDD
230 @DCBCBBBBCBCD
240 @DCBCBBBBCBCD
250 @DCBCBBBBCBCD
260 @DDDCDDDDCDDD
270 @D..CDDDDC..D
280 @D..CDDDDC..D
290 @D..CDDDDC..D
300 @DDDCDDDDCDDD
310 @D..CDDDDC..D
320 @D..CDDDDC..D
330 @DDDCBBBBCDDD
340 @.DDCBBBBCDD.
350 @..DDBBBBDD..
360 @...DBBBBD...
370 @...DDDDDD...
380 @..CCCCCCCC..
'Od programske linije 180 do 380 smeštena je definicija sprajta (ovaj sprajt je vasionski brod kojim komanduje računar)
390 MOB SET 0,16,1,1,1
'Setujemo za ovu definiciju da je sprajt 0 (može biti od 0 do 7), nalazi se u bloku 16, boja tačke "C" je 1 (bela), prioritet sprajta (1-sprajt se skriva iza pozadine), multikolor sprajt (1)
400 CMOB 4,2
'Dodeljujemo boje dvema zajedničkim tačkama, za tačku "B" 4 (ljubičasta) i za tačku "D" 2 (crvena)
410 MMOB 0,100,100,100,100,0,0
'Startujemo sprajt 0, sa početnim X i Y kordinatama 100,100, sa krajnjim X i Y kordinatama 100,100 (nema pomeranja), bez povećanja sprajta 0 i brzinom pomeranja 0 (od 0-veoma brzo do 255-veoma sporo - u ovom slučaju nije bitno jer nema pomeranja)
420 DESIGN 1,64*17+49152
'Dizajniranje izgleda sprajta koji će biti smešten u bloku 17. Ovaj sprajt će biti smešten u memoriji (49152+64*17) od 50240 memorijske lokacije
430 @............
440 @..CCDDDDCC..
450 @..CDDDDDDC..
460 @..CBCCCCBC..
470 @..BCCCCCCB..
480 @..BCCCCCCB..
490 @..BCCCCCCB..
500 @.CB......BC.
510 @C.B......B.C
520 @.CB......BC.
530 @..B......B..
540 @..BCCCCCCB..
550 @..BCCCCCCB..
560 @.DBCCCCCCBD.
570 @D.BCCCCCCB.D
580 @.DBCCCCCCBD.
590 @..BCCCCCCB..
600 @.BBDDDDDDBB.
610 @.BBDDDDDDBB.
620 @BBCCDDDDCCBB
630 @BBCCDDDDCCBB
'Od programske linije 430 do 630 smeštena je definicija sprajta (ovaj sprajt je svemirski brod kojim komanduje igrač)
640 MOB SET 1,17,7,1,1
'Setujemo za ovu definiciju da je sprajt 1, nalazi se u bloku 17, boja tačke "C" je 7 (žuta), prioritet sprajta (1), multikolor sprajt (1)
650 MMOB 1,100,170,100,170,0,0
'Startujemo sprajt 1, sa početnim X i Y kordinatama 170,100, sa krajnjim X i Y kordinatama 170,100 (nema pomeranja), bez povećanja sprajta 0 i brzinom pomeranja 0
660 DESIGN 1,64*18+49152
'Dizajniranje izgleda sprajta koji će biti smešten u bloku 18. Ovaj sprajt će biti smešten u memoriji (49152+64*18) od 50304 memorijske lokacije
670 @....B..B....
680 @....B..B....
690 @....BCDB....
700 @....BDCB....
710 @....BCDB....
720 @....BDCB....
730 @....BCDB....
740 @....BDCB....
750 @....BCDB....
760 @....BDCB....
770 @....BCDB....
780 @....BDCB....
790 @....BCDB....
800 @....BDCB....
810 @....BCDB....
820 @....BDCB....
830 @..B.BCDB.B..
840 @...BBDCBB...
850 @....BCDB....
860 @....BBBB....
870 @.....BB.....
'Od programske linije 670 do 870 smeštena je definicija sprajta (ovaj sprajt je projektil koji ispaljuje vasionski brod računara)
880 MOB SET 2,18,8,1,1
'Setujemo za ovu definiciju da je sprajt 2, nalazi se u bloku 18, boja tačke "C" je 8 (braon), prioritet sprajta (1), multikolor sprajt (1)
890 MMOB 2,120,10,120,10,0,0
'Startujemo sprajt 2, sa početnim X i Y kordinatama 120,10, sa krajnjim X i Y kordinatama 120,10 (nema pomeranja), bez povećanja sprajta 0 i brzinom pomeranja 0
900 DESIGN 1,64*19+49152
'Dizajniranje izgleda sprajta koji će biti smešten u bloku 19. Ovaj sprajt će biti smešten u memoriji (49152+64*19) od 50368 memorijske lokacije
910 @.....BB.....
920 @....BDCB....
930 @...BBCDBB...
940 @..BBBDCBBB..
950 @....BCDB....
960 @....BDCB....
970 @....BCDB....
980 @....BDCB....
990 @....BCDB....
1000 @....BDCB....
1010 @....BCDB....
1020 @....BDCB....
1030 @....BCDB....
1040 @....BDCB....
1050 @....BCDB....
1060 @....BDCB....
1070 @....BCDB....
1080 @....BDCB....
1090 @....BCDB....
1100 @....BDCB....
1110 @....B..B....
'Od programske linije 910 do 1110 smeštena je definicija sprajta (ovaj sprajt je projektil koji ispaljuje svemirski brod igrača)
1120 MOB SET 3,19,10,1,1
'Setujemo za ovu definiciju da je sprajt 3, nalazi se u bloku 19, boja tačke "C" je 10 (roza), prioritet sprajta (1), multikolor sprajt (1)
1130 MMOB 3,210,220,210,220,0,0
'Startujemo sprajt 3, sa početnim X i Y kordinatama 210,220, sa krajnjim X i Y kordinatama 210,220 (nema pomeranja), bez povećanja sprajta 0 i brzinom pomeranja 0
1140 END PROC
'Završetak procedure za definisanje i postavljanje početnih stavki sprajtova
1150 PROC KRETANJE
'Procedura za kretanje sprajta i detekcije sudara
1160 D=INT(RND(0)*3)+1
'Promenljiva D se puni slučajnom vrednošću od 1 do 3
1170 IF D=1 THEN X0=X0-7:IF X0<10 THEN X0=10
'Ukoliko je D jednaka 1 vrednost promenljive X0, kordinata X prvog sprajta (vasionskog broda računara), se umanjuje za 7 (brod se kreće ulevo). Ako je X0 manje od deset postavlja se njena vrednost na 10 (da ne bi brod nestao sa ekrana na levoj strani)
1180 IF D>1 THEN X0=X0+7:IF X0>300 THEN X0=300
'Ukoliko je D veća od 1 (2 ili 3) vrednost promenljive X0, kordinata X prvog sprajta (vasionskog broda računara), se uvećava za 7 (brod se kreće udesno). Ako je X0 veća od 300 postavlja se njena vrednost na 300 (da ne bi brod nestao sa ekrana na desnoj strani). Za kretanje udesno imamo šanse 2 prema 3 tako da će sprajt vremenom. ako se igra dotle ne završi. polako preći na desnu stranu ekrana
1190 RLOCMOB 0,X0,70,0,200
'Prvi sprajt 0 (vasionski brod računara) se kreće po X kordinati vrednosti promenljive X0 koja je gore proračunata, Y kordinati 70, bez povećanja 0 i brzinom kretanja 200 (vrlo sporo zbog glatkog kretanja)
1200 DETECT 0
'Vrši se detekcija sudara sprajtova
1210 IF CHECK(0,3)=0 THEN IG=IG+1:TEXT 120,10,A$,0,1,10
'Ukoliko su se sudarili prvi sprajt (0) i četvrti sprajt (3), došlo je do kolizije vasionskog broda računara sa projektilom igrača. Promenljiva bodova igrača se uvećava za 1, briše se postojeći tekst (indikator ispisa 0) i priprema za sledeći ispis kasnije u programu. Ovo brisanje teksta je bitno jer bi se inače novi tekst iscrtavao preko starog i postao bi nečitljiv. Definicija izgleda teksta je data kasnije u programu zbog njegovog ispravnog ispisivanja, a na početku igre ionako neće doći do sudara pa samim tim je sve u redu.
1220 P=INT(RND(0)*2)
'Promenljiva P se puni slučajnom vrednošću od 0 do 1
1230 DETECT 0
'Vrši se detekcija sudara
1240 IF P=1 THEN MMOB 2,X0,70,X0,70,0,5:RLOCMOB 2,X0,255,0,5:EXEC PUC1
'Ukoliko je promenljiva P jednaka 1, sprajt 2, sa X kordinatom (vrednost promenljive X0) vasionskog broda računara i Y kordinatom 70 se pojavljuje na ekranu i velikom brzinom se pomera na istoj X kordinati. do Y kordinate 255 (čime dobijamo efekat projektila ispaljenog iz vasionskog broda). Zatim se odlazi na proceduru za davanje prostog zvučnog efekta ispaljivanja projektila
1250 IF CHECK(1,2)=0 THEN CO=CO+1:TEXT 150,120,B$,0,1,10
'Proverava se da li je došlo do sudara drugog sprajta 1 i trećeg sprajta 2. Ukoliko jeste došlo je do kolizije između svemirskog broda igrača i projektila vasionskog broda. Onda se povećava skor računara. Na kraju se briše postojeći tekst (indikator ispisa 0) i priprema za sledeći ispis kasnije u programu. Ovo brisanje teksta je, kao što smo već rekli, veoma bitno jer bi se inače novi tekst iscrtavao preko starog i postao bi nečitljiv
1260 A=PEEK(197)
'Očitava se vrednost memorijske lokacije 197 koja služi za očitavanje tastature i smešta u numeričku promenljivu A
1270 IF A=10 THEN X1=X1-7:IF X1<10 THEN X1=10
'Ukoliko je vrednost promenljive A jednaka 10 pretisnut je taster "A". Kordinata X svemirskog broda igrača koja ima vrednost promenljive X1 umanjuje se za 7 (brod se kreće ulevo). Ukoliko je vrednost X1 manja od 10 postavlja se vrednost na 10 da brod ne bi nestao sa ekrana na levoj strani
1280 IF A=18 THEN X1=X1+7:IF X1>300 THEN X1=300
'Ukoliko je vrednost promenljive A jednaka 18 pretisnut je taster "D". Kordinata X svemirskog broda igrača koja ima vrednost promenljive X1 uvećava se za 7 (brod se kreće udesno). Ukoliko je vrednost X1 veća od 300 postavlja se vrednost na 300 da brod ne bi nestao sa ekrana na desnoj strani
1290 RLOCMOB 1,X1,200,0,200
'Vrši se pomeranje drugog sprajta 1 (svemirski brod igrača) koji se kreće po X kordinati vrednosti promenljive X1 koja je gore proračunata, Y kordinati 200, bez povećanja 0 i brzinom kretanja 200 (vrlo sporo zbog glatkog kretanja)
1300 DETECT 0
'Vrši se detekcija sudara sprajtova
1310 IF CHECK(1,2)=0 THEN CO=CO+1:TEXT 150,120,B$,0,1,10
'Ukoliko je detekcija drugog sprajta 1 i trećeg sprajta 2 jednaka nuli (došlo je do sudara između projektila vasionskog broda i broda igrača) uvećavaju se bodovi računara, briše postojeći tekst i priprema se za prikaz sledećeg teksta
1320 IF A=60 THEN MMOB3,X1,200,X1,200,0,5:RLOCMOB 3,X1,0,0,5:EXEC PUC2
'Ukoliko je vrednost promenljive A jednaka 60 pretisnuta je razmaknica. Aktivira se četvrti sprajt 3 (projektil svemirskog broda igrača) sa početnom X kordinatom vrednost promenljive X1 (X kordinata broda igrača), Y kordinatom 200, krajnjom X kordinatom takođe vrednosti promenljive X1 i krajnjom Y kordinatom 200, bez povećanja 0 i brzinom kretanja 5. Zatim se ovaj sprajt velikom brzinom pomera od početnih kordinata do krajnjih (X kordinata ostaje nepromenja a Y kordinata je 0 - dobija se ispaljivanje projektila svemirskog broda igrača)
1330 IF IG>9 THEN NRM:PRINT "(SHIFT+CLR/HOME)POBEDA":CALL KRAJ
'Ukoliko je vrednost promenljive IG koja sadrži bodove igrača veća od 9 prelazi se u tekstualni mod, prazni ekran i ispisuje se tekst "POBEDA". Zatim se odlazi na mesto skoka za kraj igre
1340 IF CO>9 THEN NRM:PRINT "“IZGUBILI STE":CALL KRAJ
'Ukoliko je vrednost promenljive CO koja sadrži bodove računara veća od 9 prelazi se u tekstualni mod, prazni ekran i ispisuje se tekst "IZGUBILI STE". Zatim se odlazi na mesto skoka za kraj igre
1350 A$="IGR:"+STR$(IG):B$="COMP:"+STR$(CO)
'Promenljvoj A$ koja će služiti kao ispis bodova igrača u visokoj rezoluciji dodeljuje se tekst "IGR:" i dodaje se broj bodova IG pretvarenog u tekst naredbom STR$, a promenljivoj B$ koja je ispis bodova komjutera dodeljuje se tekst "COMP:" i ispis vrednosti numeričke promenljive CO takođe konvertovane u tekst
1360 TEXT 120,10,A$,1,1,10
'Ispisuje se tekst sa kordinatama 120,10, vrednosti iz promenljive A$ koja sadrži podatke o bodovima igrača, sa uključenim ispisom 1, bez povećanja 1 i razmakom između karaktera 10
1370 TEXT 150,120,B$,1,1,10
'Ispisuje se tekst sa kordinatama 150,120, vrednosti iz promenljive B$ koja sadrži podatke o bodovima računara, sa uključenim ispisom 1, bez povećanja 1 i razmakom između karaktera 10
1380 CALL KRETANJE
'Povratak na proceduru koja vrši kretanje i detekciju sprajtova (beskonačna petlja dok se ne zadovolje dati uslovi - pobedi igrač ili kompjuter)
1390 PROC PUC1
'Procedura za zvučni efekat ispaljivanja projektila vasionskog broda računara
1400 VOL 15
'Zvuk na maksimum (važi za sve kanale)
1410 WAVE 1,10000001
'Određivanje oblika zvuka za prvi kanal (sedmi bit setovan - beli šum)
1420 ENVELOPE 1,5,5,5,5
'Oblik zavojnice za prvi kanal zvuk raste do 5, počinje opadanje od 5 ,konstantno traje na 5 i gasi se na 5 (u prevodu zvuk je konstantan)
1430 A$="(SHIFT+CLR/HOME)1C3(F2)"
'Promenljivoj A$ dajemo notu C u trećoj oktavi sa trajanjem cele note
1440 MUSIC 4,A$
'Pripremamo note iz promenljive A$ za zvučni efekat u trajanju za celu notu od 4/12 - trećinu sekunde. Pošto smo za oblik zvuka dali beli šum dobija se efekat ispaljivanja projektila vasionskog broda računara
1450 PLAY 1
'Izvršavamo trenutni zvučni efekat
1460 END PROC
'Završetak procedure
1470 PROC PUC2
'Procedura za zvučni efekat ispaljivanja projektila svemirskog broda igrača
1480 VOL 15
'Zvuk na maksimum
1490 WAVE 1,10000001
'Određivanje oblika zvuka za prvi kanal (beli šum)
1500 ENVELOPE 1,5,5,5,5
'Oblik zavojnice za prvi kanal zvuk raste do 5, počinje opadanje od 5 ,konstantno traje na 5 i gasi se na 5 (zvuk je konstantan)
1510 A$="(SHIFT+CLR/HOME)1G3(F2)"
'Promenljivoj A$ dajemo notu G u trećoj oktavi sa trajanjem cele note
1520 MUSIC 4,A$
'Pripremamo note iz promenljive A$ za zvučni efekat u trajanju od 4/12 - trećinu sekunde za celu note. Pošto smo i ovde za oblik zvuka dali beli šum dobija se efekat ispaljivanja projektila svemirskog broda igrača
1530 PLAY 1
'Izvršavamo trenutni zvučni efekat
1540 END PROC
'Završetak procedure
1550 PROC KRAJ
'Mesto skoka za kraj igre
1560 MOB OFF 0
1570 MOB OFF 1
1580 MOB OFF 2
1590 MOB OFF 3
'Od programskog reda 1560 do 1590 imamo naredbe za gašenje svih četri sprajta. Ukoliko ne isključimo sprajtove oni će ostati na ekranu i posle završetka programa, a pošto su urađeni za grafiku visoke rezolucije kada se vratimo u tekstualni mod dobićemo četri brljotine na ekranu
1600 PAUSE 5
'Pauza od 5 sekundi
1610 PRINT "ZELITE LI JOS JEDNU IGRU? (DA/NE)"
'Postavljanje pitanja da li želimo novu igru
1620 FETCH "DANE",2,A$
'Uzimaju se dva karaktera iz filtera i smeštaju u promenljivu A$
1630 IF A$="DA" THEN CALL POCETAK
'Ukoliko je vrednost promenljive A$ jednaka "DA" odlazi se na početnu proceduru i startuje nova igra
1640 IF A$="NE" THEN END
'Ukoliko je vrednost promenljive A$ jednaka "NE" (ili data pogrešna kombinacija npr.DN,NN, AD ...) igri je kraj
1650 END
'Kraj programa
1660 PROC ISPIS
'Procedura za ispis početnog ekrana
1670 PRINT "(SHIFT+CLR/HOME)"
'Brisanje ekrana
1680 CENTRE "DOBRODOSLI U IGRU"
'Centriranje teksta pod navodnicima
1690 PRINT:PRINT:PRINT:COLOUR 7,7
'Pravljenje razmaka između redova i bojenje okvira i pozadine ekrana u žuto
1700 PRINT "CILJ IGRE JE UPUCATI SVEMIRSKI BROD 10 PUTA ";
1710 PRINT "PRE NEGO STO ON TO UCINI TVOM BRODU":PRINT:PRINT
1720 PRINT "KOMANDE:"
1730 PRINT "A-KRETANJE LEVO"
1740 PRINT "D-KRETANJE DESNO"
1750 PRINT "RAZMAKNICA-ISPALJIVANJE PROJEKTILA"
1760 PRINT:PRINT "PRETISNITE BILO KOJI TASTER"
'Od programskog reda 1700 do 1750 ispisujemo tekst uputstva
1770 PROC OPET
'Mesto skoka
1780 GET A$:IF A$="" THEN CALL OPET
'Beskonačna petlja dok se ne pretisne neki taster
1790 END PROC
'Kraj procedure ispisa i povratak na glavni tok programa
Nadamo se da Vam se ova igra svidela. Kao što vidite moguće je uraditi akcionu igricu na ekranu visoke ili multikolor rezolucije u Sajmons bejziku. Takođe ste zapazili veliku brzinu kretanja sprajtova projektila. Na žalost to nije slučaj i kod pokretanja brodova iz razloga što nismo mogli dati veće pomeranje između početnih i krajnjih kordinata istih zbog detekcije sudara koja se vrši tek po završetku kretanja sprajta. Tu je faktor usporenja i ispisivanje teksta u grafičkom modu, kao i zvuk prilikom ispaljivanja projektila. Na Vama je da po želji izvršite razne modifikacije ovog programa. Probajte sve što vam padne na pamet (promenite, ubacite, izbacite). Samo kreativno.
Došli smo do kraja lekcija Sajmons bejzika. Nadamo se da smo Vas zainteresovali za ovaj veoma koristan program i da smo Vam pomogli da shvatite njegove osnove.
Želimo Vam puno uspeha u daljem retro programiranju. Veliki pozdrav.
Audio recenzija