22. Joystick a klávesy: STICK, STRIG, PADDLE, PTRIG
Na čo to je
Hra potrebuje vedieť, čo robí hráč – práve teraz, bez čakania na RETURN. Joystick, jeho tlačidlo aj klávesnica sa preto nečítajú príkazom INPUT, ale funkciami, ktoré vrátia okamžitý stav.
Programy tejto kapitoly sú pre emulátor. V emulátore atari800 sa joystick zvyčajne ovláda číselnou klávesnicou alebo šípkami a tlačidlo pravým klávesom Ctrl – presné nastavenie nájdeš v jeho ponuke (kláves F1).
Ako sa to píše
| Funkcia | Čo vráti |
|---|---|
STICK(n) | smer joysticku v porte n (0 alebo 1) |
STRIG(n) | tlačidlo joysticku: 0 = stlačené, 1 = pustené |
PADDLE(n) | otočný ovládač (paddle) 0–7: poloha 1 až 228 |
PTRIG(n) | tlačidlo paddle: 0 = stlačené |
PEEK(764) | kód naposledy stlačeného klávesu; 255 = žiadny |
PEEK(53279) | klávesy START, SELECT, OPTION |
Hodnoty STICK:
14
10 6
11 15 7
9 5
1315 je pokoj, 14 hore, 13 dole, 11 vľavo, 7 vpravo; uhlopriečky sú 10, 6, 9 a 5.
Celý program
Súbor examples/joystick.abas:
10 REM Joystick: move a star, the button ends
20 GRAPHICS 0:POKE 752,1
30 X=20:Y=12
40 POSITION 2,0:PRINT "Joystick moves, the button ends";
50 POSITION X,Y:PRINT "*";
60 S=STICK(0)
70 IF STRIG(0)=0 THEN POSITION 2,22:PRINT "Bye":END
80 IF S=15 THEN 60
90 POSITION X,Y:PRINT " ";
100 IF S=14 AND Y>2 THEN Y=Y-1
110 IF S=13 AND Y<21 THEN Y=Y+1
120 IF S=11 AND X>2 THEN X=X-1
130 IF S=7 AND X<38 THEN X=X+1
140 W=3:GOSUB 1000
150 GOTO 50
1000 REM Wait W fiftieths of a second
1010 POKE 20,0
1020 IF PEEK(20)<W THEN 1020
1030 RETURN
Preklad a spustenie
Basic26 joystick.abas --runV simulátore program nespúšťaj – joystick tam nie je (STICK vracia stále 15) a program by nikdy neskončil.
Čo uvidíš
Na obrazovke je hviezdička, ktorá sa hýbe podľa joysticku. Tlačidlo program ukončí.
Ako to funguje
Je to kostra každej hry – slučka, ktorá dookola:
- nakreslí hráča (riadok 50),
- prečíta ovládač (riadky 60 a 70),
- ak sa nič nedeje, číta znova (riadok 80),
- zmaže hráča na starom mieste medzerou (riadok 90),
- posunie súradnice, ale len ak neprejdú za okraj (riadky 100 až 130),
- chvíľu počká (riadok 140) a ide odznova.
Čakanie v kroku 6 určuje rýchlosť hry. Bez neho by hviezdička v preloženom programe preletela obrazovku skôr, než pustíš joystick. Tri päťdesiatiny sekundy dávajú asi 17 krokov za sekundu.
Podmienky ako Y>2 držia hviezdičku na obrazovke. Bez nich by POSITION dostal súradnicu mimo a program by skončil chybou 141.
Uhlopriečky
Program reaguje len na štyri základné smery. Aby šiel aj šikmo, testuj zvlášť vodorovný a zvislý smer:
100 IF (S=14 OR S=10 OR S=6) AND Y>2 THEN Y=Y-1
110 IF (S=13 OR S=9 OR S=5) AND Y<21 THEN Y=Y+1
120 IF (S=11 OR S=10 OR S=9) AND X>2 THEN X=X-1
130 IF (S=7 OR S=6 OR S=5) AND X<38 THEN X=X+1Klávesy bez RETURN
Atari si kód posledného stlačeného klávesu ukladá na adresu 764. Kým nikto nič nestlačil, je tam 255.
10 PRINT "Press any key"
20 POKE 764,255
30 IF PEEK(764)=255 THEN 30
40 PRINT "The key code was ";PEEK(764)
50 POKE 764,255Riadok 20 „vyprázdni“ pamäť klávesu, riadok 30 čaká, kým sa v nej niečo objaví. Pozor: číslo na adrese 764 nie je kód ATASCII, ale číslo klávesu na klávesnici (A je 63, medzera 33, RETURN 12). Tabuľka je v prílohe D. Skutočný znak prečítaš cez zariadenie K: – kapitola 24.
Tri klávesy vpravo sa čítajú zvlášť, z adresy 53279:
PEEK(53279) | Stlačené |
|---|---|
| 7 | nič |
| 6 | START |
| 5 | SELECT |
| 3 | OPTION |
10 PRINT "Press START"
20 IF PEEK(53279)<>6 THEN 20
30 PRINT "Here we go"V simulátore sa tieto klávesy dajú „stlačiť“ voľbou --sim-console (kapitola 39).
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
IF STRIG(0)=1 namiesto =0 | program reaguje, keď tlačidlo nie je stlačené |
| chýba čakanie v slučke | pohyb je príliš rýchly |
| stará pozícia sa nezmaže | hviezdička za sebou necháva stopu |
| súradnice nie sú strážené | ERROR- 141 na okraji obrazovky |
| port 2 alebo 3 | Atari XL a XE majú len dva porty (0 a 1) |
PEEK(764) sa neprepíše na 255 | ten istý kláves sa prečíta znova a znova |
Vyskúšaj si
- Pridaj pohyb po uhlopriečkach.
- Nech stlačené tlačidlo neukončí program, ale zanechá na mieste hviezdičky znak
#. - Sprav z toho hru: na náhodnom mieste je
$; keď naň hviezdička príde, pripočítaj bod, pípni (SOUND) a daj$inam.
Zhrnutie
STICK(0)vráti smer (15 = pokoj),STRIG(0)tlačidlo (0 = stlačené).- Hra je slučka: nakresli, prečítaj, zmaž, posuň, počkaj.
- Kláves bez RETURN je v
PEEK(764); START, SELECT a OPTION vPEEK(53279). - Tieto programy patria do emulátora.
Späť: 21. Zvuk · Ďalej: 23. Strojový kód