Kirjautuminen

Haku

Tehtävät

Opasarkisto: TI-89-peliohjelmointi: Osa 1 - Basicin perusteet

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

Kirjoittaja: Antti Laaksonen (2003).

TI-89 on Texas Instrumentsin graafinen laskin. Tämän kolmiosaisen opassarjan aihe on pelien ohjelmoiminen käyttäen laskimen omaa Basic-kieltä. TI-92 (Plus)-laskimen käyttöjärjestelmä ja Basic-kieli on lähes samanlainen TI-89:n kanssa; tärkein ero on näytön suurempi koko ja qwerty-näppäimistö. Sen ansiosta suurimman osan oppaiden ohjelmista pitäisi (en ole kokeillut) toimia myös TI-92:lla.

Laskimen käyttöjärjestelmä on käännetty monille kielille, myös suomeksi, mikä sinänsä on ihan hyvä juttu. Valitettavasti suomennos on ulotettu myös Basiciin, minkä seurauksena suomenkielisen käyttöjärjestelmän alla tehdyt ohjelmat eivät toimi muunkielisissä laskimissa. Laskin sisältää kyllä jonkinlaisen automaattisen käännösmekanismin kielen vaihdon yhteydessä, mutta sen toiminta on kovin epävarmaa. Siksi olen itse päätynyt käyttämään laskinta pelkästään englanninkielisenä.

TI-89:n ominaisuudet

TI-89:n uumenissa sykkii MC68000-prosessori 10 megahertsin kellotaajuudella. Ohjelmien ja datan tallennukseen on käytettävissä 188 kilotavua muistia. Näyttö on kaksivärinen ja sen resoluutio on 160x100 pikseliä. Minkäänlaisia ääniominaisuuksia ei laskimessa ole.

Yksi pelintekoa huomattavasti helpottava piirre laskimesta kuitenkin löytyy: kaikkien laskinten prosessori on yhtä nopea ja käyttöjärjestelmät ovat samanlaiset. Joten kun peli toimii omalla laskimella oikein, se toimii oikein muillakin laskimilla. PC-maailmasta tuttuja yhteensopivuusongelmia ei ole.

Laskimen Basic-tulkki on melko hidas ja rajoittunut, ja parhaimmat pelit tehdäänkin konekielellä. Konekielellä ohjelmointi vaatii kuitenkin aina linkkikaapelin ja erillisen ohjelmointiympäristön. Virheellinen konekielinen ohjelma voi myös sekoittaa laskimen muistin. Totuuden nimissä tärkein syy Basicin valintaan tähän opassarjaan on kuitenkin se, että en itse ole tutustunut laskimen konekieleen lainkaan...

Joka tapauksessa TI-89 on kuitenkin vain kehittynyt laskin, pelintekoon ei kannata lähteä liian suurin odotuksin. Mutta riittävällä sinnikkyydellä voi hyvinkin saada aikaan pelejä, joista riittää ajanvietettä tylsille matikantunneille.

Ohjelman kirjoittaminen

Helpoin tapa kirjoittaa ohjelma on käyttää laskimen omaa ohjelmaeditoria. Paina sinisellä pohjalla olevaa APPS-nappia, ja valitse valikosta kohta Program Editor. Current siirtyy viimeksi käsiteltyyn ohjelmaan, Open avaa tallennetun ohjelman, ja New aloittaa uuden ohjelman. Type on ohjelman tyyppi, joko Program (ohjelma) tai Function (funktio). Folder on kansio, johon ohjelma tallennetaan. Variable on ohjelman nimi, jolla sitä myöhemmin kutsutaan.

Uuden ohjelman aloittaminen

Ohjelmien kirjoittaminen laskimen näppäimistöllä on pidemmän päälle työlästä ja aikaavievää. Huomattavasti mukavampaa on kirjoittaa ohjelma tietokoneella ja lähettää se laskimelle linkkikaapelin ja TI-GRAPH LINK -ohjelman avulla. Tietokoneen sarjaporttiin kytkettävä linkkikaapeli tulee eräiden laskinpakettien mukana valmiina, ja sen voi myös tarvittaessa ostaa erikseen.

Ensimmäinen ohjelma

Ensimmäisen TI-89-ohjelmamme nimi on testi, ja se näyttää tältä:

testi()
Prgm
 @tulostetaan tekstiä
 Disp "TI-89 Basic"
EndPrgm

Kun olet kirjoittanut ohjelman laskimeen, paina HOME-nappia päästäksesi perusnäyttöön (ohjelma tallentuu automaattisesti). Kirjoita sitten komentoriville testi() ja paina ENTER, niin ohjelma käynnistyy ja tulostaa rivin tekstiä ohjelmanäyttöön. Takaisin perusnäyttöön pääset taas HOME-nappia painamalla, ja ohjelman editointia voit jatkaa painamalla 2nd-nappia ja sen jälkeen APPS-nappia.

Ensimmäisellä koodirivillä on ohjelman nimi ja suluissa mahdolliset parametrit pilkuilla erotettuina. Varsinainen ohjelma kirjoitetaan Prgm- ja EndPrgm-lauseiden väliin. Tavallisesti jokainen lause kirjoitetaan omalle rivilleen, mutta useampia lauseita voi kirjoittaa samalle riville laittamalla niiden väliin :-merkki.

@-merkki, jonka saa helpoiten kirjoitettua painamalla ensin vihreää vinoneliöllä varustettua nappia, ja sitten )-nappia, on kommentti, joka selvittää ohjelman toimintaa koodin lukijalle. Kommentteja ei kuitenkaan kannata kirjoittaa ylenpalttisia määriä, sillä muistia ei ole tuhlattavaksi.

Disp-komento yksinkertaisesti tulostaa sen perässä olevan tekstin ohjelmanäyttöön.

Ohjelman voi aina lopettaa kesken ON-nappia painamalla.

Ohjelman poistaminen

Ohjelman poistaminen muistista onnistuu VAR-LINK-ikkunan kautta, jonne pääsee painamalla ensin 2nd-nappia ja sitten +-nappia. Näytölle avautuvassa listassa näkyy kaikki laskimeen tallennetut muuttujat (ohjelmat kuuluvat muuttujiin) tyyppeineen ja kokoineen. PRGM-tyyppiset muuttujat ovat ohjelmia. Muuttujan poistaminen tapahtuu Manage-valikon Delete-komennon avulla eli näppäinyhdistelmällä F1 + 1.

VAR-LINK-ikkuna

Muistin käyttöä voi tarkkailla myös MEMORY-ikkunassa, jonne pääsee näppäinyhdistelmällä 2nd + 6.

Muuttujat

Muuttujaan sijoitetaan arvo →-merkin avulla, joka kirjoitetaan STO→-nappia painamalla. Seuraava lause sijoittaa vuosi-muuttujan arvoksi 2003.

2003→vuosi

Peliohjelmoinnissa tärkeimmät muuttujatyypit ovat Expression, String, List, Matrix ja Picture.

Matriisi 'Pretty Print'-tulostuksella

Kansiomuuttujat ja paikalliset muuttujat

Kansiomuuttujat tallentuvat pysyvästi senhetkiseen kansioon ja ovat käytettävissä kaikissa kansion ohjelmissa. Paikalliset muuttujat taas katoavat muistista heti, kun ohjelman suoritus loppuu. Yleensä omissa ohjelmissa kannattaa käyttää paikallisia muuttujia, mikä tapahtuu määrittelemällä muuttujat Local-komennolla. Näin ohjelman käyttämät muuttujat pysyvät erillään kansiomuuttujista, eikä tarpeettomia muuttujia jää muistiin.

Local nimi, vuosi

Muuttujatyypistä toiseen

Laskulauseke muutetaan merkkijonoksi string-funktiolla. Merkkijono taas muutetaan laskulausekkeeksi expr-funktiolla.

Jos muuttujan nimi on merkkijonossa, #-merkki tekee merkkijonosta muuttujan. Seuraava esimerkki tulostaa vuosi-muuttujan arvon.

2003→vuosi
"vuosi"→nimi
Disp #nimi

Vertailu

Vertailun arvo on joko true, tosi, tai false, epätosi. Vertailuja käytetään mm. ehtolauseissa ja silmukoissa. Vertailuoperaattorit ovat =, , >, <, ja . Lisäksi vertailuja voi yhdistää and-, or-, xor- ja not-operaattoreilla, jotka tarkoittavat "ja", "tai", "jompikumpi" ja "ei".

Esimerkiksi tosia vertailuja ovat 5=2+3, 8≤5 ja 7>3 or 5>8.

If-ehtorakenne

Yksinkertaisin If-ehtolause näyttää seuraavalta:

If ehto
 lause1
lause2

Jos ehto on tosi, suoritetaan lause1. Ehto koskee vain seuraavaa riviä: lause2 suoritetaan aina.

Seuraava ehtolause keskeyttää ohjelman, jos pisteet-muuttujan arvo on 0.

If pisteet=0
 Stop

Kehittyneempi If-rakenne on:

If ehto1 Then
 lauseet1
[ElseIf ehto2 Then
 lauseet2]
[ElseIf ehto3 Then
 lauseet3]
.
.
.
[Else
 lauseetx]
EndIf

Jos ehto1 on tosi, suoritetaan lauseet1. Jos ehto2 on tosi, suoritetaan lauseet2, ja jos ehto3 on tosi, suoritetaan lauseet3. Jne. Jos mikään ehdoista ei ole tosi, suoritetaan lauseetx. Hakasuluilla merkityt osat eivät ole pakollisia.

Seuraava ohjelma tulostaa tekstin pistemäärän mukaan.

If pisteet>90 Then
 Disp "Erittäin hyvä"
ElseIf pisteet>75 Then
 Disp "Hyvä"
ElseIf pisteet>50 Then
 Disp "Keskinkertainen"
Else
 Disp "Heikko"
EndIf

For-silmukka

For-silmukka käy laskurin läpi tietyillä arvoilla, ja joka kerralla suoritetaan silmukan sisällä olevat lauseet. Muuttuja sisältää aina laskurin kulloisenkin arvon, alku on ensimmäinen arvo, loppu on viimeinen arvo, ja askel kertoo, kuinka paljon laskuria lisätään joka kierroksella. Oletuksena askel on 1.

For muuttuja,alku,loppu[,askel]
 lauseet
EndFor

Seuraava ohjelma tulostaa ohjelmanäyttöön luvut yhdestä viiteen.

For i,1,5
 Disp i
EndFor

Esimerkkiohjelman tulostus

While- ja Loop-silmukat

While- ja Loop-silmukat toistavat niiden sisällä olevat lauseet, kunnes tietty ehto toteutuu tai silmukka keskeytetään muuten.

While ehto
 lauseet
EndWhile

Loop
 lauseet
EndLoop

Silmukan sisällä voi olla lisäksi Exit- tai Cycle-komento. Exit poistuu silmukasta, ja se on lähes välttämätön Loop-rakenteessa, joka ei muuten pääty koskaan. Cycle jättää silmukan loppuosan väliin ja siirtyy suoraan seuraavalle kierrokselle. Nämä lauseet ovat käytössä myös For-silmukassa.

Seuraava ohjelma tulostaa 2:n potensseja, kunnes potenssin arvo on 5000 tai suurempi. Ohjelma on toteutettu kummankin silmukkarakenteen avulla.

2→i
While i<5000
 Disp i
 i*2→i
EndWhile

2→i
Loop
 Disp i
 i*2→i
 If not i<5000
  Exit
EndLoop

Esimerkkiohjelman tulostus

Aliohjelmat ja funktiot

Ohjelman sisäisten aliohjelmien ja funktioiden määrittäminen onnistuu Local- ja Define-komennoilla. Aliohjelmat ja funktiot täytyy määrittää ennen niiden käyttöä.

Seuraavan ohjelman tulosta3-aliohjelma tulostaa parametrina annetun tekstin kolmeen kertaan.

Local tulosta3
Define tulosta3(teksti)=Prgm
 Local i
 For i,1,3
  Disp teksti
 EndFor
EndPrgm
tulosta3("Esimerkki")

Aliohjelmien ja funktioiden ero on siinä, että funktio palauttaa arvon Return-komennolla. Lisäksi funktio ei voi käsitellä kansiomuuttujia, vaikuttaa laskimen asetuksiin, tulostaa tekstiä, piirtää grafiikkaa eikä lukea näppäimistöä.

Seuraavassa ohjelmassa oleva euro-funktio palauttaa annetun markkamäärän euroina.

Local euro
Define euro(markka)=Func
 Return markka/5.94573
EndFunc
Disp euro(12)

Virheenkäsittely

Ajon aikana syntyvien virheiden käsittely on mahdollista Try-rakenteen avulla. Virheen numero löytyy errornum-erikoismuuttujasta. ClrErr-lause ohittaa virheen, ja PassErr lähettää sen alempaan Try-rakenteeseen. Jos sellaista ei ole, virheilmoitus näkyy tavanomaisena ja ohjelman ajo keskeytyy.

Seuraava ohjelma yrittää luoda olemattoman matriisin, mikä ei ole mahdollista. Siksi tapahtuu virhe 260, jonka ohjelma pystyy näyttämään virheenkäsittelyn ansiosta. Ohjelman ajo ei myöskään keskeydy.

Try
 newMat(0,0)→x
Else
 Disp "Virhe "&string(errornum)
 ClrErr
EndTry
Disp "Ajo ei keskeytynyt!"

Loppusanat

Opassarjan ensimmäinen osa alkaa olla tässä. Mainittakoon lopuksi, että kaikki laskimen tuntemat komennot ja funktiot on listattu CATALOG-ikkunassa, ja useimmille löytyy myös syntaksi samaisesta paikasta.

CATALOG-ikkuna

Tässä vielä pari hyödyllistä linkkiä:

Antti Laaksonen, 27.7.2003


Kommentit

Tulilintu [31.07.2003 08:37:05]

#

En nyt jaksanut lukea opasta kokonaan, mutta mielenkiintoselta vaikuttaa.

firebug [31.07.2003 12:03:25]

#

Todella kiinnostava artikkeli. Pakko kyllä saada tuollainen laskin hommattua jostain...

tejeez [31.07.2003 17:20:42]

#

Niin.. Pakko saada

trinit [01.08.2003 17:32:33]

#

Hyvä artikkeli. Lisätietoa TI-89 laskimesta ja muista malleista ja tarvikkeista löytyy http://www.ti.com/calc/suomi/tuotetietoa.htm

Blaze [03.08.2003 13:51:34]

#

Laskinta omistamattomille: http://www.zophar.net/ti.html

Gwaur [03.08.2003 23:29:58]

#

Kiitos Blaze hyvästä linkistä :)

zafner [06.08.2003 23:17:36]

#

Virtual TI on paras emulaattori. Jos ei omista laskinta ja datakaapelia, niin siihen pitää vielä jostain löytää rom-piiri, jotta sillä voisi TI:n laskimia emuloida.

Olisit nyt tehnyt tämän oppaan TI-86, koska eihän nyt kenelläkään ole tuota TI-89, sillä se ei ole sallittu ylioppilaskirjoituksissa (olen kyllä monta kertaa unelmoinut TI-89:sta, mutta on vain pitänyt olla tyytyväinen tähän TI-86:een).

Meitsi [19.08.2003 15:06:43]

#

muute hyvä mut toi laskin o liian kallis

Vilikki [23.08.2003 15:21:18]

#

TI-86:lle olisi kyllä ihan kiva olla kanssa opas (tilauksessa, eli kohta omistan sellaisen). Tiedä sitten kuinka paljon koodi eroaa...

Vilikki [28.08.2003 21:57:17]

#

Lueskelinpa tämän oppaan sitten yhdessä TI-86:sen mukana tulleen ohjekirjan kanssa (jotenkin itse ohjekirja vaikutti aika kuivalta lukemiselta, muutenkin teki vähän mieli vertailla 86:sta ja 89:iä). Muutamia erojakin kyllä löytyi, ihan ärsyttävintä oli se kun joku käsky oli ihan yhden kirjaimen erolla samanlainen, esim. PxlOn 10,30 olikin PxOn 10,30.

tsuriga [17.07.2004 18:46:37]

#

Olen itsekin lueskellut TI-86:n manuaalia ja aionkin julkaista tässä joskus koodivinkin kyseiselle laskimelle. Eroja näiden laskinten välillä löytyy paljonkin, TI-86:ssa on paljon vähemmän ominaisuuksia (ei try:ta, silmukat loppuvat kaikki pelkkään endiin, requestia ei myöskään ole, etc..).

efteri [11.09.2005 15:34:34]

#

:O onpas kallis laskin laskimeksi, haluuko joku myydä mulle tollasen laskimen 10 eurolla :P

MikaBug [12.08.2007 11:44:35]

#

Itse ostin TI-89-laskimen heti ammattikorkeakoulun ensimmäisen vuoden alussa :) olihan sillä ihan kivasti hintaa. Pitäs varmaan alkaa koodailemaan jonkinlaista peliä siihen..

siansaksamies [23.01.2009 21:16:17]

#

":O onpas kallis laskin laskimeksi, haluuko joku myydä mulle tollasen laskimen 10 eurolla :P"

Saattaa kohta mennä halvalla...

Kolmen vuoden viive, mutta menköön. Löytyi tänään verkkokauppa.com:in Helsingin myymälän palautustuotteena (169,00€). En tiedä, luinko huolimattomasti vai eikö paketin päällä olevassa listauksessa erikseen mainittu, ettei tuotetta saa käyttää yo-kirjoituksissa. Saa nähdä, meneekö toisen laskimen ostoksi. Ei tuon käyttistä saisi mitenkään tiputettua 84/86-tasolle, vaikka tuskin sekään riittäisi yo-hyväksyntään?

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