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
        13

15 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:

Atari BASIC
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 --run

V 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:

  1. nakreslí hráča (riadok 50),
  2. prečíta ovládač (riadky 60 a 70),
  3. ak sa nič nedeje, číta znova (riadok 80),
  4. zmaže hráča na starom mieste medzerou (riadok 90),
  5. posunie súradnice, ale len ak neprejdú za okraj (riadky 100 až 130),
  6. 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:

Atari BASIC
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+1

Klá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.

Atari BASIC
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,255

Riadok 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é
7nič
6START
5SELECT
3OPTION
Atari BASIC
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 =0program reaguje, keď tlačidlo nie je stlačené
chýba čakanie v slučkepohyb je príliš rýchly
stará pozícia sa nezmažehviezdička za sebou necháva stopu
súradnice nie sú stráženéERROR- 141 na okraji obrazovky
port 2 alebo 3Atari XL a XE majú len dva porty (0 a 1)
PEEK(764) sa neprepíše na 255ten istý kláves sa prečíta znova a znova

Vyskúšaj si

  1. Pridaj pohyb po uhlopriečkach.
  2. Nech stlačené tlačidlo neukončí program, ale zanechá na mieste hviezdičky znak #.
  3. 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

Späť: 21. Zvuk · Ďalej: 23. Strojový kód