!!!!!!! Paskudne mrówki czytelnia Try2emu

Paskudne mrówki

Użytkownik mikrokomputera, szczególnie tak popularnego jak ZX Spectrum, nie ma już dzisiaj specjalnego kłopotu ze zdobyciem ciekawego oprogramowania. Dlaczego więc tak dużym powodzeniem cieszą się listingi zamieszczane w różnych pismach? Przecież nawet najprostszy program fabryczny jest bardziej atrakcyjny niż ten, który jesteśmy w stanic sami sobie „wpalcować”.

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.

Opis funkcji poszczególnych linii
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
Piknik - gra na 2X Spectrum 16/48kb

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;""
215 PRINT AT 16,a+1; INK 3;g$ 220 RETURN
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