QBasicin perusteet
QBasic-ohjelmointikielellä voi ohjelmoida yksinkertaisia ohjelmia, nopeasti ja helpohkosti.
Tämä artikkeli sisältää QBasicin perusteet.
9.11.2006 julkaistun artikkelin on kirjoittanut Tomppu.
Alkusanat #
Tervetuloa QBasicin hämärään maailmaan! Olettaisin, että hallitset jo ohjelmoinnin perusteet, mutta aloittelijankin pitäisi tämän oppaan avulla päästä vauhtiin. QBasic-ohjelmointikielellä aiomme ohjelmoida yksinkertaisia ohjelmia, nopeasti ja helpohkosti. Tässä tutoriaalissa käytämme kehitysympäristönä Microsoftin vanhaa, mutta ehkä jollain tavalla toimivaa, QBasic-tulkkia, jonka voi ladata esimerkiksi osoitteesta http://www.fluid.tue.nl/student/colleges...
Kehitysympäristön käyttö kiteytettynä #
QBasic-kehitysympäristön käyttö nykykoneilla saattaa olla vähän tuskaista. Tämän takia suosittelenkin käyttämään esimerkiksi DOSBoxia, jolle on olemassa omat tutoriaalinsa. Emulaattorin käyttö ei ole suinkaan välttämätöntä. Käytit sitten emulaattoria tai et, suorita QBasic.exe. Kun haluat testata ohjelmaasi, niin paina F5 tai näpäytä hiirellä Run/Start. Tallentaaksesi tiedoston klikkaa File/Save (as).
Ensimmäinen ohjelma #
Tämäkin tutoriaali alkaa Hello World -ohjelmalla, joka siis tulostaa ruudulle tekstin Hello world! Koodipuoli näyttää tältä:
PRINT "Hello World!"
PRINT-komennolle annetaan parametrit, jotka se tulostaa ruudulle. Äskeisessä tapauksessa parametri oli merkkijono "Hello World!"
Varmasti tämän jälkeen haluat tyylikkään ja itsenäisemmän näköisen softan, joka saadaan aikaiseksi helposti tyhjentämällä ruutu ennen kirjoittamista. QBasicissa on komento nimeltä CLS, joka hoitaa homman kotiin. Jos laitat CLS-komennon ruudulle kirjoittamisen jälkeen, ohjelmasi luonnollisesti piirtää tekstin ensin ja tyhjentää ruudun vasta tämän jälkeen. Jos vahingossa teit tämän virheen, käyttäjälle ei näy muuta kuin tyhjää, joten tarkkana täytyy olla.
CLS 'Tyhjentää ruudun PRINT "Hello World!" 'Kirjoittaa ruudulle
Maistuiko tämäkin puulta? Mielenkiintoa lisää huomattavasti hyvin yksinkertainen komento LOCATE, joka määrää PRINT-komennon kirjoittamispaikan. Oletuksenahan se aloittaa sen vasemmasta ylänurkasta (x=1,y=1), mutta LOCATEn kahden parametrin avulla voidaan kertoa, mihin teksti oikeastaan kirjoitetaan. Et ehkä arvaakaan, kuinka helposti ja nopeasti tällä saadaan peliympäristö aikaiseksi. Locaten ensimmäinen parametri on y-koordinaatti, joka kertoo kirjoituskorkeuden eli rivin. Toinen parametri on x-koordinaatti, joka viestii PRINT-komennolle tekstin vaakasuuntaisen sijainnin (sarakkeen). Parametrit annetaan ehkä aluksi epäloogiselta tuntuvalla tavalla, siis ensin y- ja sitten x-koordinaatti, mutta ilmeisesti se on perusteltu sillä, että on loogista antaa ensin rivi ja sen jälkeen sarake. Toimivat arvot ovat x-suunnassa välillä 1-80 ja y-suunnassa 1:n ja 25:n välillä.
Haluamme nyt kirjoittaa tekstin "Hello World" vaikkapa koordinaatteihin x=63, y=3, jolloin kirjoitamme LOCATE 3, 63 ennen PRINT-käskyä:
CLS 'Ruudun tyhjennys LOCATE 3, 63 'Asetetaan piirtokohta riville 3, sarkaimelle 63 PRINT "Hello World!" 'Kirjoittaminen
Noita arvoja voi sitten huoletta sovellella ja muutella, kunhan pysyvät niissä määrätyissä rajoissa.
Muuttujat #
Muuttuja on "arvonsäilyttämispaikka", johon voidaan varata arvo ja jota voidaan muutella ja lukea. Voisimme esimerkiksi määritellä muuttujan ika, jonka arvoksi annetaan vaikkapa oma ikäsi. Muuttujat olisi suositeltava myös esitellä, minkä yhteydessä tulee sille antaa tyyppi. Tämä kertoo, minkälaisia arvoja se voi saada. Tässä artikkelissa käytämme usein muuttujia, jotka ovat tyypiltään on kokonaislukuja (integer).
Tyyppi merkintä Min. arvo Max. arvo Kokonaisluku INTEGER -32 768 32 767 Kokonaisluku LONG -2 147 483 647 2 147 483 647 Merkkijono STRING 32 767 merkkiä Liukuluku DOUBLE
DIM ika AS INTEGER 'Määrittelee "ika"-nimisen muuttujan tyypin kokonaisluvuksi DIM nimi AS STRING 'Määritellään muuttuja, joka on merkkijono DIM pituus AS DOUBLE 'Määritellään muuttuja "pituus", joka on liukulukumuuttuja ika = 7 'asetetaan sen arvoksi 7 nimi = "Erkki" pituus = 187.3 PRINT "Nimi: ", nimi 'Tulostetaan teksti "Nimi: " ja sen perään nimi PRINT "Ika: ", ika 'Tulostetaan "Ika: " ja ika:n arvo PRINT "Pituus: ", pituus 'Ja vastaavasti pituus
Ehtolauseet... jotain syötävää? #
Ehtolauseet ovat yksinkertaista kauraa. Niiden avulla voit tarkastella asioiden totuusarvoja. Yksinkertaista, eikö vain? QBasicin IF-lauseen rakenne näkyy seuraavassa.
IF muuttuja1 = muuttuja2 THEN 'itse ehto
'Jos ehtolause on tosi, menään tänne
ELSE 'Jos ehdon totuusarvo on epätosi, siirrytään ELSE-osioon,
'jonka voi jättää pois halutessaan
END IF 'Ilmoitetaan tulkille, että ehtolause loppuu tähän
Operaattoreilla saadaan erilaisia ehtoja.
Nimi Merkki Esimerkki, joka palauttaa truen --------------------------------------------------------- Yhtäsuuri kuin: = 7 = 4+3 Pienempi kuin: < 2 < 7 Suurempi kuin: > 5 > 2 Yhtäsuuri tai suurempi kuin: >= 3 >= 3 Yhtäsuuri tai pienempi kuin: <= -6 <= 9 Erisuuri kuin: <> 1000 <> 5
Silmukat #
Yksinkertaisin ja alkeellisessa peliohjelmoinnissa ehkäpä yleisin silmukka on DO-silmukka, joka suorittaa annettavaa tehtävää, kunnes suoritetaan
EXIT DO.
DIM x AS INTEGER 'Määritellään muuttuja x kokonaislukumuuttujaksi
DO 'Silmukan alkupää
x = x + 1 'Lisätään x:ään yksi
PRINT "x=", x 'Printataan x:n arvo
IF x > 8 THEN 'Jos x on suurempi kuin 8, niin...
PRINT "Päästiinhän tänne."
EXIT DO '...päästään pois silmukasta
END IF 'if-lauseen loppu
LOOP 'Silmukan loppupää
Kun silmukan sisään päästään, lisätään x:ään yksi, minkä jälkeen printataan sen arvo ruudulle. Ensimmäisillä kerroilla ehto x<8 ei ole tosi, joten mennään ehtolauseen ohi. Loopin lopussa hypätään takaisin alkuun. Silmukasta ei päästä pois ennen kuin x:n arvo on noussut kahdeksaan tai yli, jolloin kirjoitetaan ruudulle turhaa tekstiä ja suoritetaan EXIT DO. Tämä siis lopettaa silmukan ja näin hypätään silmukasta pois.
FOR-silmukalla voidaan toistaa jotain operaatiota n kertaa, missä n kerrotaan määrittelyssä. Kyseisen silmukan rakenne on hyvin yksinkertainen: FOR [juoksumuuttujan alustus] TO [loppuarvo] STEP [hyppyväli]. Silmukkaa suoritetaan, kunnes juoksumuuttuja on yhtäsuuri kuin loppuarvo. Joka kierros juoksumuuttujaan lisätään hyppyväli. Juoksumuuttujaa ei tulisi hyvän ohjelmointityylin mukaisesti muuttaa kesken silmukkaa, koska FOR-silmukan ideana on, että silmukan alussa tiedetään, kuinka monta kertaa silmukkaa tullaan toistamaan.
DIM i AS INTEGER FOR i=0 TO 10 STEP 1 PRINT "i, juoksulukumuuttujan arvo: ", i NEXT i
INPUT? Mikäs se on? #
Nyt olet varmasti halukas ottamaan syötteen vastaan komentorivitulkilta. Vähän vaikeasti oli ehkä sanottu, mutta käytännössä edellinen virke tarkoitti sitä, että voit pyytää käyttäjää kirjoittamaan tekstiä, jota voit myöhemmin käsitellä. Tätä varten on tehty INPUT-komento, jolle annetaan parametriksi yksi tai useampi muuttuja, joihin arvo asetetaan. Seuraavaksi voisimme kokeilla ohjelmaa, jolle syötetään varpaankynnen pituus, jonka perusteella ohjelma vastaa pituudesta riippuen.
DIM pituus AS DOUBLE 'Määritellään pituus-muuttuja
INPUT "Peukalovarpaankyntesi pituus? ", pituus 'Käyttäjä syöttää luvun
IF pituus < 1.5 THEN 'Jos syötetty pituus on pienempi kuin 1.5
PRINT "Sinulla on melkoisen lyhyet kynnet!"
END IF
IF pituus > 1.5 AND pituus < 3 THEN 'Jos pituus on suurempi kuin 1.5
'ja pienempi kuin 3, niin
PRINT "Kyntesi ovat normaalipituiset."
END IF
IF pituus > 3 THEN
PRINT "Eikö kyntesi jo lohkeile?"
END IF

