Myślę, że tajemnica tkwi w fakcie, iż listing pozwala nam na pewną samodzielność. Własnoręczne wpisanie programu umożliwia analizę jego działania, wprowadzanie pewnych zmian (jak chociażby komentarze w języku polskim), uzupełnianie lub upraszczanie jego funkcji. Oczywiście bardziej zaawansowani amatorzy informatyki mogą to samo robić z programami fabrycznymi, lecz dla początkujących jest to próg nie do przekroczenia.
Dlatego właśnie zdecydowaliśmy się drukować w BAJTKU listingi, rzecz jasna postaramy się wybierać najciekawsze. Zacznijmy od zabawy — gry pt. Piknik. Oczywiście, komputer w tej grze przemawia do ciebie po polsku i w dodatku ortograficznie (to znaczy używa liter takich jak „ó” czy „ą”).
Oto jej treść: wybrałeś się na uroczą — jak ci się zdawało — wycieczkę na łono natury. Niestety, stałeś się ofiarą napadu ze strony okrutnych mrówek, które usiłują porwać ci śniadanie. Jeśli nie chcesz być głodny, musisz zdeptać złodziejki. Twoje zapasy składają się z trzech owoców, zaś każde cztery mrówki, które przepuścisz uniosą jeden z nich. Staraj się więc... Jest jeszcze jedna trudność, ale o niej dowiesz się sam, gdy uda ci się uruchomić program.
Gra ta, opracowana przez pana Grahama Ramsdena (z drobnymi przeróbkami piszącego te słowa) nie wzbudzi zapewne entuzjazmu wśród miłośników przyrody. Ma jednak kilka zalet, niezależnie od tego, kto kogo w niej depcze.
Przy pomocy stosunkowo krótkiego programu, udało się autorowi uzyskać ciekawą grafikę i animację. Gra uzupełniona jest również zupełnie przyzwoitymi efektami dźwiękowymi. Tym, którzy mieliby ochotę spróbować sił w konstruowaniu prostych gier polecam, by przeanalizowali sposób uzyskiwania obrazów poszczególnych obiektów. Są one definiowane jako znaki graficzne i drukowane instrukcją PRINT. Jak to się natomiast dzieje, że komputer wyświetlając na przykład mrówkę w kolejnym położeniu, wygasza jednocześnie jej poprzedni wizerunek? Spróbuj sam odpowiedzieć na to pytanie.
Jeśli znajdujesz się na początkowym etapie komputerowego wtajemniczenia, możesz mi wierzyć, że warto poświęcić trochę czasu na zrozumienie tego programu. Zwróć — między innymi — uwagę jak zostały uzyskane polskie litery „ó” i „ę”. Zrozumiesz, że wykorzystując zastosowane tu sposoby, możesz własnoręcznie napisać podobny program.
7 — 8 deklaracja zmiennych 9 wstępna plansza gry
10 — 40 wczytanie określenia znaków graficznych, opisanych pod etykietą DATA
50 skok do podprogramu drukującego opis gry
60 skok do podprogramu drukującego nagłówek gry
70 rysowanie trawnika
80 — 82 skoki do odpowiednich podprogramów w zależności od liczby owoców, które pozostały grającemu
90 — 100 odczytywanie znaków wprowadzanych z klawiatury
120 — 130 animacja mrówek
140 sprawdzenie, czy mrówka doszła do owocu i liczenie tych mrówek
145 sprawdzenie czy już cztery mrówki dotarły do owoców, jeśli tak to zmniejszenie liczby owoców o jeden i skok do 81
150 aktualna punktacja
155 sprawdzenie czy są jeszcze owoce, jeśli nie to skok do 4030
160 powrót do 90
200 — 220 animacja nogi, sprawdzenie czy nie nadepnąłeś motyla, czy nie nadepnąłeś mrówki, wyświetlanie i znikanie motyla
1000 — 1030 nagłówek gry
2000 — 2030 napis kończący grę
3000 — 3096 zasady gry
4000 — 4010 animacja mrówek niosących
4015 — 4020 owoce
A - klawisz A w trybie graficznym
G1 - klawisz 1 w trybie graficznym
SG1 - klawisz 1 + SHIFT w trybie graficznym
7 LET a=10: LET poz=0: LET pkt=0: LET owoce=3: LET mr=0
8 LET aj5="AB" :LET b$="CD": LET C$="EF": LET d$="GH": LET e$="IJ": LET f$="KL": LET g$="RS"
9 CLS: LET m$="PIKNIK": FOR q=19 TO 1 STEP -2: PRINT AT q,6; INK 0; PAPER 7; BRIGHT 1; FLASH l;m$: BEEP .01,q+10: BEEP .01,q+13: BEEP .01.q+16: NEXT q: LET q$="Uwaga na motylka!!!": FOR c=l TO LEN q$: LET r$="": LET r$=r$+q$(c): PRINT AT 10,c+5; INK 6; PAPER 2; BRIGHT i; FLASH l;r$: BEEP .01,c: BEEP .01.c+3: BEEP .01,c+6: NEXT c: BRIGHT 0
10 FOR f=0 TO 20: PGR n=0 TO 7: READ x: POKE USR CHR$(l44+f) +n,x: NEXT n: NEXT f
20 DATA 0,0,0,0,1,3,3,3,0,96,144,128,128,192,192,192,7,7,15,31,29,24,13,7,224,224,240,248,248,248,240,224,30,15,7,3,3,1,1,1,0,128,224,240,248,252,252,252,1,1,1,3,3,7,15,30,252,252,252,248,240,224,128,0
30 DATA 6,1,6,1,15,17,44,45,32,64,176,64,240,136,52,130,49,16,27,11,8,7,3,1,140,8,104,112,16,96,64,128,0,0,227,236,82,137,0,0,0,0,192,199,55,74,145,0,153,153,153,153,153,153,153,153,0,1,3,43,85,234,255,127,126,36,36,194,199,255,255,254,36,50,105,125,62,53,25,17,36,76,150,190,124,252,152,136
40 DATA 0,0,56,4,60,68,60,6,8,16,56,68,68,68,56,0
50 GO SUB 3000 60 GO SUB 1000
70 PRINT AT 21,0: INK 4;">32SG8<"
30 IF owoce=3 THEN PRINT AT 19,29; INK 4;a$;AT 20,29;b$
81 if owoce=2 THEN GO SUB 4000
82 if owoce=1 THEN GO SUB 4015 90 LET a=a+(INKEY$="0" AND a<26) - (INKEY$="9" AND a>0): print AT 2,a: INK 1;" PQ " 100 if INKEY$="1" THEN GO SUB 200
120 print At 20,poz; ink 0;" M": BEEP .001,50: beep .001,40: beep .001,30
130 let poz=poz+l
140 if poz=28 THEN LET mr=mr+i: let poz=0: print at 20,31;ink 0;"N";at 20,28;" "
145 IF mr=4 then let owoce=owoce-l: beep .25,30: beep .75,0: let mr=0: print at 20,poz;", ": let poz=0: print at 20,31;" ": for p=2 to 16: print at p,0; ink 0;"": beep .01,p+10: next p: next n: GO to 81
150 ink is print at 0,10; pkt: print at 0,29; owoce
155 if owoce=0 then GO TO 4030
160 GO TO 90
200 for f=2 to 14: print AT f + 1,a + l; ink 1;"PQ";AT f,a + l;"0": beep .001,f+20: beep .001,9+22: beep .001,f+24: next f: if attr(f+l,a*i)=43 or attr (f+l,a+2)=43 then LET mr=4: if mr=4 then GO TO 145
201 for z=15 TO 18: print AT z+1,a+1; ink 1;"PQ";at z,a+1; " O ": beep .001.z+20:BEEP .001,z+22: beep .001,z+24: next z
205 IF z+l=20 AND a+l=poz THEN LET pkt=pkt+2: print AT 20,poz; ink 0;"v";AT 20,poz; OVER 1;"x": FOR i=0 TO 4: BEEP .01,55: BEEP .01,53: BEEP .01,51: NEXT i: LET poz=0
206 IF z+l=20 AND a+2=poz THEN LET pkt=pkt+4: PRINT AT 20,poz; ink 0;"x";AT 20", poz; OVER l;"v": FOR i=0 TO 4: BEEP .01,55: BEEP .01,53: BEEP .01,51: NEXT i: LET poz=0
210 FOR f=20 TO 3 STEP -1: PRINT AT f ,a+l;" ";AT f-1,a+1; INK l;"PQ": BEEP .001,f+20: BEEP .001,f+22: BEEP .001,f+24: NEXT f
211 PRINT AT 16,INT(RND*10)+2;""
1000 BORDER 5: PAPER 5: INK 5:CLS
1010 PRINT INK l;"Punktacja =";pkt;">SG8<"; PIKNIK>SC8<owoce=";owoce:";owoce;" M" 1030 FLASH 0: RETURN 2000 PRINT AT 10,5:INK 3;
FLASH 1; PAPER 7; "Koniec twojego pikniku"
2010 FOR n=50 TO 0 STEP -1: BEEP .1,n: BEEP .l,n+2: BEEP .l,n+4:NEXT n
2020 FOR v=50 TO 30 STEP -1: BEEP .001,v+6:BEEP .001,v+3: BEEP .001,v:NEXT V
2030 RUN
3000 PAPER 4: INK 0: CLS
3010 PRINT " IJ N PIKNIK M IJ"
3033 PRINT "RSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRS"
3050 PRINT INK 7," ;"Cichy, spokojny piknik... nagle nadchodzT okrutne mrUwki i kradnT twoje owoce." "
3060 PRINT INK 7:" ST bardzo silne, cztery mrUwki same zaniosT owoc do swojej kryjUwki." 3070 PRINT INK 7;" Rozdeptaj je, bo nic ci nie zostawiT."
3075 PRINT INK 7;" 9... w lewo"
;"";" 0 ... w prawo";" l ... deptanie"
3030 FOR g=0 TO 5: FOR l=0 TO 7: BEEP .1,l+40: BORDER 1
3081 IF INKEY$<>"" THEN RETURN
3082 NEXT l
3085 FOR k=1 TO 0 STEP -1: BEEP .l,k+40: BORDER k
3090 IF INKEY$<>"" THEN RETURN
3095 NEXT k: NEXT g
3096 CLS:RETURN
4000 FOR x=28 TO 1 STEP -1: PRINT AT 18,x: INK 4;"AB ";AT 19,X;"CD "; AT 20,x-l;INK O;"N N ":BEEP .0l,x: BEEP .01,x-2: BEEP .01,x-4:NEXT x: PRINT AT 18,0;" ";AT 19,0;" "
4001 PRINT AT 19,29; INK 6;c$: AT 20,29; d$
4002 LET owoce=2 4010 RETURN
4015 FOR x=28 TO 1 STEP -1: PRINT AT 18,x; INK 6; "EF ";AT 19,x;"GH ";AT 20,x-1; INK 0;"N N ": BEEP. 01,x-4:NEXT x: PRINT AT 18,0;" ";AT 19,0;" "
4016 PRINT AT 19,29; INK 2;e$; AT 20,29; f$
4020 RETURN
4030 FOR x=28 TO 1 STEP -1: PRINT AT 18,x; INK 2;"IJ ";AT 19,x;"KL ";AT 20,x-l;INK 0;"N N": BEEP .01,x-4:BEEP .01,x-l::BEEP .01,x-4: NEXT x: PRINT AT 18,0;" ";AT 19,0;" "
4040 GO TO 2000
Roman Poznański