Kirjautuminen

Haku

Tehtävät

Opasarkisto: TI-89-peliohjelmointi: Osa 2 - Näppäimistö ja grafiikka

  1. Osa 1 - Basicin perusteet
  2. Osa 2 - Näppäimistö ja grafiikka
  3. Osa 3 - Esimerkkipelejä

Kirjoittaja: Antti Laaksonen. Vuosi: 2003.

Opassarjan ensimmäinen osa käsitteli TI-89 Basicin perusteita - muuttujia, ehto- ja silmukkarakenteita, aliohjelmia jne. Nyt on kuitenkin aika oppia lukemaan laskimen näppäimistöä ja piirtämään grafiikkaa, sillä muuten kunnollisen pelin tekeminen ei ole oikein mahdollista.

Tietojen lukeminen ohjelmanäytössä

Input- ja InputStr-komentojen avulla voi ohjelmanäytössä pyytää käyttäjältä tietoja, jotka tallentuvat muuttujiin. Input on tarkoitettu numeerisen tiedon ja InputStr merkkijonojen lukemiseen. Tietojen luku päättyy ENTER-näppäimen painallukseen.

Seuraava ohjelma kysyy pelaajan nimen ja pelin vaikeustason, sekä tallentaa nämä tiedot muuttujiin nimi ja vtaso myöhempää käyttöä varten.

InputStr "Nimi:",nimi
Input "Vaikeustaso:",vtaso

Graafiset valintaikkunat

Request-komento tuo näyttöön ikkunan, jossa on tekstikenttä. Tekstikenttään kirjoitettu teksti tallentuu muuttujaan, ja muuttujan arvo ennen ikkunan näyttämistä on tekstikentän oletusarvo.

"Nimetön"→nimi
Request "Kirjoita nimesi:",nimi

Request-ikkuna

PopUp-komento tuo esiin irrallisen valintalistan, josta käyttäjän täytyy valita yksi annetuista vaihtoehdoista. Vaihtoehdot määritetään merkkijonomuotoisen listan avulla, ja ne numeroidaan yhdestä alkaen. Parametrina olevaan muuttujaan tulee tieto, monennenko vaihtoehdon käyttäjä valitsi. Muuttujan arvo ennen listan näyttämistä on myös oletusvaihtoehdon numero.

2→vtaso
PopUp {"1", "2", "3"}, vtaso

PopUp-valintalista

Monimutkaisempien valintaikkunoiden tekoon on olemassa Dialog-rakenne, joka voi sisältää Title-, Text-, Request- ja DropDown-elementtejä. Valintaikkunan elementit määritetään Dialog- ja EndDlg-sanojen välissä.

Seuraava ohjelma luo valintaikkunan, joka sopisi pelin alkuun. Pelaajaa pyydetään kirjoittamaan nimi ja valitsemaan vaikeustaso, jonka jälkeen peli voi alkaa. Toinen Text-komento aiheuttaa tyhjän rivin ja on mukana, jotta ikkunasta ei tulisi liian ahdas.

Dialog
 Title "Tervetuloa peliin!"
 Text "Kirjoita tiedot alle ja paina ENTER."
 Text ""
 Request "Nimi", nimi
 DropDown "Vaikeustaso", {"1", "2", "3"}, vtaso
EndDlog

Pelin aloitusikkuna

Näppäinten lukeminen

Tähän mennessä esitetyt tavat lukea näppäimistöä sopivat lähinnä tietojen keräämiseen pelin alussa ja muihin tämäntapaisiin kiireettömiin valintoihin. Reaaliaikaiset pelit vaativat toisenlaisen menetelmän näppäimistön lukemiseen, ja tämä menetelmä on funktio getKey, joka palauttaa painettuna olevan näppäimen näppäinkoodin. Funktio pystyy lukemaan lähes kaikkia laskimen näppäimiä.

Seuraava ohjelma lukee käyttäjän painamia näppäimiä, ja näyttää niiden näppäinkoodit ohjelmaikkunassa, kunnes käyttäjä painaa ESCiä (näppäinkoodi 264). Jos näppäinkoodi (k-muuttuja) on eri kuin edellinen näppäinkoodi (v-muuttuja), se tulostetaan ohjelmanäytölle. 0 tarkoittaa, että mitään näppäintä ei ole painettu - silloin ei näppäinkoodia myöskään tulosteta.

0→k
0→v
Disp "ESC sulkee ohjelman."
Loop
 getKey()→k
 If k=264
  Exit
 If k≠v and k≠0 Then
  Disp k
  k→v
 EndIf
EndLoop

Ohjelman avulla voi tutkia eri näppäinten palauttamia koodeja, ja laskimen ohjekirja sisältää myös täydellisen luettelon niistä. Huomaa, että näppäintä ennen mahdollisesti painettu muunnosnäppäin (2nd, nuoli ylöspäin, vihreä vinoneliö, alpha) muuttaa näppäinkoodin toiseksi.

Näytöt

Peliohjelmoijan kannalta tärkeitä näyttöjä ovat perusnäyttö, ohjelmanäyttö ja grafiikkanäyttö. Perusnäyttö on laskimen käyttöjärjestelmän alin taso, jonne pääsee aina HOME-näppäimellä. Ohjelmanäytössä näkyy ohjelman tulostama teksti ja käyttäjä voi myös välittää tietoa ohjelmalle sen kautta. Grafiikkanäyttö taas on grafiikan esittämiseen tarkoitettu paikka, jossa näkyvät mm. funktioiden kuvaajat.

Siirtyminen kunkin näytön välillä tapahtuu kolmella komennolla: DispHome siirtyy perusnäyttöön, Disp siirtyy ohjelmanäyttöön (sama komento tulostaa tekstiä, jos sille annetaan parametri) ja DispG siirtyy grafiikkanäyttöön.

Perusnäytön tyhjentämiseen on komento ClrHome, ClrIO tekee saman ohjelmanäytössä ja ClrDraw tyhjentää grafiikkanäytön.

Grafiikkanäyttö

Koska ohjelmanäyttöön voi tulostaa ainoastaan tekstiä, pelin grafiikka on piirrettävä grafiikkanäyttöön. Grafiikkanäyttöön piirretään myös funktioiden kuvaajat, minkä vuoksi kuvaajan akselit tai ruudukko saattavat sotkea pelin grafiikkaa. Ne kannattaakin kytkeä väliaikaisesti pois setGraph-funktiolla. Kohteliasta laskimen käyttäjälle on palauttaa pelin lopuksi asetukset takaisin. Seuraavassa ohjelmassa pisteet kuvaavat itse peliä.

setGraph("Axes","Off")→axes
setGraph("Grid","Off")→grid
.
.
.
setGraph ("Axes",axes)
setGraph ("Grid",grid)

Grafiikan paikan määrittämiseen käytetään kahdenlaista asteikkoa: pikselikoordinaatit ja pistekoordinaatit. Pikselikoordinaateilla on kiinteä asteikko (leveyssuunnassa 0 - 158 ja korkeussuunnassa 0 - 76), kun taas pistekoordinaattien asteikko riippuu kuvaajan asetuksista. Pikselikoordinaattien käyttö peleissä on järkevintä, sillä muuten peli toimisi oikein vain niillä kuvaaja-asetuksilla, mitkä laskimessa sattuu pelin ohjelmointihetkellä olemaan.

Grafiikkakomennot

Kaikkien grafiikkakomentojen koordinaatit ilmoitetaan järjestyksessä y, x, eli ensin paikka pystyakselilla ja sitten vaaka-akselilla.

Yksittäisten pikseleiden käsittelemiseen on funktiot PxlOn, PxlOff ja PxlChg. PxlOn sytyttää pikselin, PxlOff sammuttaa pikselin ja PxlChg vaihtaa pikselin tilan päinvastaiseksi. Lisäksi PxlTest-funktio palauttaa pikselin tilan.

Seuraava esimerkkiohjelma on monivaiheinen. Ohjelma sytyttää ensin kolme samalla suoralla olevaa pikseliä. Sen jälkeen ohjelma sammuttaa ensimmäisen, vaihtaa toisen tilaa kaksi kertaa ja lopuksi tulostaa kolmannen pikselin tilan ohjelmanäyttöön. Jokaisen vaiheen välillä odotetaan Pause-komennolla, että käyttäjä painaa ENTER-näppäintä.

PxlOn 10,10
PxlOn 10,20
PxlOn 10,30
Pause
PxlOff 10,10
Pause
PxlChg 10,20
Pause
PxlChg 10,20
Pause
Disp PxlTest(10,30)

Esimerkkiohjelman alkutilanne

Viivojen piirtämiseen tarkoitettu komento on PxlLine. Parametrit ovat alkukoordinaatit, loppukoordinaatit ja piirtotapa. Piirtotavasta riippuen viiva piirretään (1), pyyhitään pois (0), tai sitten käännetään kaikki viivan kohdalle sattuvat pikselit (-1).

Seuraava ohjelma piirtää kolme viivaa, ensin vaakasuoran, sitten pystysuoran ja lopuksi vinon.

PxlLine 10,10,10,80,1
PxlLine 20,60,40,60,1
PxlLine 30,20,70,80,1

Kolme viivaa

PxlCrcl piirtää ympyrän. Komennon parametrit ovat ympyrän koordinaatit, säde ja piirtotapa. Mahdolliset piirtotavat ovat samat kuin PxlLine-funktiossa.

Seuraava ohjelma piirtää kolme sisäkkäistä ympyrää, joiden säteiden pituus on 30, 20 ja 10 pikseliä.

PxlCrcl 40,40,30,1
PxlCrcl 40,40,20,1
PxlCrcl 40,40,10,1

Tikanheittopelin alku?

Tekstin tulostaminen grafiikkanäyttöön onnistuu PxlText-komennolla, jonka parametreja ovat tulostettava teksti ja sen koordinaatit.

Seuraava ohjelma tulostaa vinosuuntaisesti viisi kirjainta, joista muodostuu sana "testi".

PxlText "t",10,10
PxlText "e",15,20
PxlText "s",20,30
PxlText "t",25,40
PxlText "i",30,50

Vino tulostus

Kuvien luominen

Kuvien tallennusmuoto on Picture-tyyppinen muuttuja, ja niiden luomiseen on kolme tapaa: piirto-ohjelman käyttäminen, näytöltä kopioiminen ja matriisin pohjalta muodostaminen.

Kuvaa piirtämässä

Kuvien näyttäminen

Laskimen muistiin tallennettuja kuvia voi katsoa grafiikkanäytössä Tools-valikon Open-komennon avulla. Kuitenkaan peleihin tällainen tapa näyttää kuvia ei sovellu.

Kuvien piirtämiseen grafiikkanäyttöön onkin olemassa komennot AndPic, RclPic ja XorPic. Komentojen parametrit ovat kuvan nimi ja kuvan koordinaatit.

Seuraava ohjelma piirtää edellisessä kappaleessa StoPic-komennolla kopioidun ympyrän kolmeen paikkaan näytöllä käyttäen RclPic-komentoa.

RclPic kuva1,20,20
RclPic kuva1,40,80
RclPic kuva1,60,60

Ympyrät StoPic-komennolla

Animaatio

Animaation toteutustapa on seuraava: piirretään kuva, lasketaan uudet koordinaatit, poistetaan kuva, piirretään uusi kuva.

Seuraava ohjelma luo animaation, jossa ympyrä liikkuu mutkitellen näytön läpi. Ympyrän liikeradan x-koordinaatti tulee suoraan For-silmukasta, ja y-koordinaatti lasketaan sinifunktiolla (ohjelma olettaa, että kulmat ilmoitetaan radiaaneissa) sopivin kertoimin. Muuttuja a sisältää vaakasuuntaisen liikkeen nopeuden. Ympyrä sekä piirretään että poistetaan XorPic-komennolla.

1→a
For x,0,145,a
 int(40+sin(x/5)*10)→y
 If x-a≥0
  XorPic kuva1,vy,x-a
 XorPic kuva1,y,x
 y→vy
EndFor

Seuraava ohjelma taas yhdistää animaation ja näppäimistön lukemisen saaden aikaan nuolinäppäimillä ohjattavan ympyrän. Nuolinäppäinten näppäinkoodit ovat 337 vasemmalle, 338 ylös, 340 oikealle ja 344 alas. Ympyrän nykyinen paikka on x- ja y-muuttujissa, ja vanha paikka vx- ja vy-muuttujissa. Jos nykyinen ja vanha paikka eroavat toisistaan, ympyrä piirretään uudestaan. Ohjelma päättyy ESCiä painamalla.

75→x
35→y
0→vx
0→vy
Loop
 getKey()→n
 If n=264 Then
  Exit
 ElseIf n=337 Then
  x-1→x
 ElseIf n=338 Then
  y-1→y
 ElseIf n=340 Then
  x+1→x
 ElseIf n=344 Then
  y+1→y
 EndIf
 If x≠vx or y≠vy Then
  XorPic kuva1,vy,vx
  XorPic kuva1,y,x
  x→vx
  y→vy
 EndIf
EndLoop

Loppusanat

Pelin tekoon tarvittavat taidot rupeavat pikku hiljaa olemaan koossa. Opassarjan kolmannesta ja viimeisestä osasta löytyy kaksi valmista peliä ja niiden toiminnan esittely alusta loppuun.

Antti Laaksonen, 29.7.2003


Kirjoita kommentti

Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta