Artikkelit

Artikkelit olivat Suomipelit.comissa sivuston sulkeuduttua. Näin ollen niihin saattaa sisältyä rikkinäisiä linkkejä tai epämääräisiä viitteitä asioihin, joita ei enää ole olemassa, ja joskus jokin saattaa näkyä väärin.

Palaa artikkelilistaan

Peliohjelmoinnin peruskäsitteet - Osa 1

Tässä kurssisarjassa käydään läpi pelien tekemisen perusteita, sellaisia asioita, joita täytyy huomioida ihan jokaisessa pelissä. Lähinnä erilaisia ajattelumalleja ja toimintatapoja suunnittelu- ja toteutusvaiheen tilanteisiin. Esimerkkinä tehdään ristinollapeli alusta loppuun kaikkien taiteen sääntöjen mukaan.

26.5.2002 julkaistun artikkelin on kirjoittanut jalaine.

  1. Mihin tässä ollaan ryhtymässä
  2. Pistä koneesi pakettiin
  3. Ideasta eteenpäin
  4. Mikä tekee tästä pelistä hyvän
  5. Ristinollassakin on käyttöliittymä

Mihin tässä ollaan ryhtymässä #

Selvä, haluat siis tehdä pelin. Hyvä idea sinänsä. Tässä tutoriaalisarjassa yritän opettaa sinulle mahdollisimman monia hyödyllisiä tietoja ja taitoja, jotka auttavat sinua tekemään parempia pelejä, toivottavasti :). Minun täytyy sen verran kuitenkin sinua pudotella maanpinnalle, että tiedät, ettet vielä heti aluksi voi saada aikaiseksi mitään sellaista mitä kaupan hyllyllä näet. Ne on sitten jo ihan eri luokassa, jotain mitä saatat tehdä kun olet 5-6 vuotta pelejä ohjelmoinut - tai jotain..

Mutta älä säikähdä, voimme silti tehdä vaikka mitä hauskaa, kunhan muistamme ettemme tavoittele liian korkealle, muistathan sananlaskun:

Joka kuuseen kurkottaa, se katajaan kapsahtaa


Tässä tapauksessa se tarkoittaa sitä, että aloitetaan ristinollasta. Ajattelin aluksi matopeliä, mutta sain hyviä neuvoja GameDev.net:in keskustelualueilla, ja niiden pohjalta päätin aloittaa vielä vähän helpommasta. Matopeli voisi olla sitten seuraava askel.

Ainoana perustietona tällä kurssilla edellytän C-kielen alkeiden taitamista. Tarkemmin sanottuna sinun on osattava ainakin seuraavat käsitteet:

  • Funktiot, ja maini
  • Muuttujat
  • Taulukot
  • Tietueet
  • For, While ja do-while
  • if, else

Jos jotain noista asioista et osaa, on sinun parasta se opetella, koska ne ovat C:n olennaisimpia asioita. Tietueet opetan luultavasti tässä kurssissa ihan alusta asti, mutta silti ne on hyvä osata. Pointterit opetan myös tällä kurssilla, jos niitä tullaan tarvitsemaan. Joka tapauksessa enempi tietämys C-kielestä ei koskaan ole pahaksi!

Tässä kurssissa pyrin painottamaan tiettyjä yleisesti hyväksyttyjä toimintatapoja ja -malleja sekä tyyliseikkoja. Samalla toivon, että tämä kurssi voisi johdattaa sinut alusta asti oikeaoppiseen peliohjelmointiin, kertomalla sinulle minkälaisia tietorakenteita ja moduulisuunnittelullisia seikkoja sinun tulisi ottaa huomioon peliäsi suunnitellessa ja toteuttaussa. Esimerkeissä käytän C:tä ja ilmaista Allegro-kirjastoa, johtuen sen helppokäyttöisyydestä. Kaikki asiat pitäisi kuitenkin pystyä soveltamaan myös missä tahansa muussa ympäristössä. Tämä ensimmäinen osa käsittelee idean kehittelyä ja suunnittelua. Aloitetaan!

Pistä koneesi pakettiin #

Joskus kauan sitten oli MikroBitissä moniosainen peliohjelmointikurssi, en muista milloin, mutta siitä voi hyvinkin jo kymmenen vuotta olla. Siinä oli aika hyvä neuvo, joka mielestäni sopii tähän yhteyteen vallan mainiosti:

Ennen kuin alat koodaamaan, pistä koneesi pakettiin ja lähetä se postissa itsellesi


Aivan tarkkaa sanamuotoa en muista, mutta idea oli tuo.. Tietystikin siihen aikaan koneet olivat pienempiä, joten ne pystyi helpommin lähettämään itselleen postissa. Matkaan kului kuitenkin aikaa ainakin viikko, joten jäi aikaa suunnitteluun eikä tullut sännättyä suoraan koneen kimppuun.. Tuskinpa tuota kukaan sananmukaisesti totteli, mutta ehkä joku kuitenkin tajusi pysähtyä hetkeksi miettimään, että "hei, mitäs oikeastaan aionkaan tehdä?"

Kaikki alkaa ideasta. Jos sinulla ei ole harmainta aavistustakaan siitä, mitä haluat tehdä, todennäköisesti et mitään saakaan aikaiseksi. Ja huonosta ideasta luultavasti tulee huono peli :). Niinpä siis ihan aluksi kannattaa ainakin muutama hetkonen uhrata ihan sen pohtimiseen, että mitä oikeastaan haluan tehdä. Jos tämän voi tehdä tiimityönä niin aina vain parempi - yksin niin helposti takertuu yhteen ajatukseen eikä mieti yhtään sen pidemmälle. Kaikkia keskustelussa esiin tulevaa tulee jollain tavoin pohtia ja ottaa huomioon, tässä tutoriaalissa käytän esimerkkinä omaa muunnelmaani Ted Nelsonin esittämästä ideamatriisista, mutta sinä voit vallan mainiosti tehdä suunnitelmasi ihan millä tavalla vain haluat.

Mutta mistä saada ideoita? André LaMothe esittää kirjassaan Windows Game Programming For Dummies seuraavanlaisen listan:

  • Muista peleistä
  • Elokuvista ja videoista
  • Todellisista peleistä
  • Unista ja painajaisista

Siinä on siis muutamia ihan hyviä idean lähteitä, mutta varmasti on paljon muitakin hyviä paikkoja etsiä ideoita: kirjat, sarjakuvat ja ihan mikä vaan mikä tulee mieleen. Muista peleistä ideoita otettaessa on muistettava, että ei ole mitään järkeä lähteä koko peliä kopioimaan. Itse suosittelisin mielummin keksimään idean jostain muualta kuin muista peleistä (vaikkakin itse juuri teen BoulderDash-kloonia ;), koska Doom-klooneja on nähty jo aivan tarpeeksi - eikö?

Ideasta eteenpäin #

Hankalampaa kuin idean keksiminen, on kuitenkin sen kehittely ja pohtiminen. Jokainen idea ei välttämättä sellaisenaan ole hyvä. Mutta katsotaanpa esimerkkipelimme ideankehittelyn alkuvaiheita.

Kuvitelkaamme, että olemme keksineet aivan mahtavan idean: tehdään tietokoneversio koulutuntien suosikkipelistä jätkänshakista! Tämä on hyvä idea, mutta mikä oikeastaan on jätkänshakki? Ajattelin aluksi, että olisin tässä kohti esittänyt tällaisen ideamatriisitekniikan, jonka Ted Nelson, eräs kuuluisa amerikkalainen tutkija, esitti luennoidessaan joku aika sitten täällä Jyväskylässä.. Se kuitenkaan ei tähän oikein sopinut, joten käydään asiaa hieman eri tavalla läpi.

Koska ideamme on jo hyvin tunnettu peli, ei meidän varmaan kovin paljon tarvitse pelin peruskäsitteitä pohtia. Aloitetaan kuitenkin muutamalla kysymyksellä, joita kannattaa aluksi pohtia.


  • Mitä pelaajat tekevät voittaakseen?
  • Kuinka monta pelaajaa on mukana?
  • Mikä pitää pelin kiinnostavana?

Joo, nuo tuntuvat varmaan aika tyhmiltä kysymyksiltä, mutta pohditaanpa niitä hetkinen. Pelaajat siis haluavat saada aikaiseksi suoria, mutta kuinka pitkiä suoria? Kaikista perinteisimmässä versiossa suorat ovat kolmen mittaisia:
x| |o
-+-+-
o|x|
-+-+-
o| |x


Tuohon tapaan siis. Mutta kaikkihan tietävät, että jos kaksi vähänkään parempaa pelaajaa pelaavat tuota peliä keskenään, ei kukaan voi koskaan voittaa! Siksipä pelistä on olemassa laajempi versio, jossa pelataan isommalla ruudukolla ja pyritään 5 merkin suoriin. Miten teemme tässä pelissä? Meillä on siis nyt valinnan paikka, ja annan sinun itse miettiä miten kannattaisi tehdä. Jos valitset 3x3-ruudukon, on luultavasti toteutus hieman helpompi, mutta toisaalta se voi olla pelaajien mielestä tylsempi. Toisaalta taas tekoälyn toteuttaminen tällaiseen ruudukkoon on helpompaa.

Kuinka monta pelaajaa? Tähän kysymykseen ei ainakaan voi olla montaa eri vastausta, eihän? Voi! Tuli tuossa eilen tätä pohtiessani mieleeni ajatus, että mitäs jos pelattaisiin kolmella pelaajalla. Idea tuntui aluksi aika erikoiselta, mutta pohdin sitä eteenpäin.. Tällä saisi kolmaskin kaveri tekemistä eikä tarvitsisi vain katsella odottelemassa. Ensimmäinen ajatukseni olikin, että "hei, tuohan voisi olla loistava ajatus!". Mutta sitten veljeni pudotti minut maanpinnalle sanoen: "Jarkko, jos se kerran on niin hyvä ajatus, niin miksi kukaan ei sitä olisi aikaisemmin keksinyt?". Niinpä, hyvä pointti. Niinpä asetuimme hetkeksi keittiönpöydän äärelle kokeilemaan peliä. Ensin pelasimme niin, että oli kolme pelaajaa ja yritettiin saada 5 ruudun rivejä. Se oli aika hankalaa, koskapa kaksi pelaajaa pystyi aina torjumaan kolmannen pelaajan rivit. Niinpä jonkin aikaa kokeiltuamme päätimme kokeilla neljän ruudun riveillä, ja se oli jo paljon parempi juttu. Kovin pitkälle kokeiluissamme emme vielä päässeet, joten en tiedä vielä tuleeko esimerkkipeliimme kolminpeli vai ei. Laita kommentteja, ja erityisesti tutki asiaa! Päätetään sitten yhdessä miten tästä jatketaan!

Mikä tekee tästä pelistä hyvän #

Äskeisessä luvussa käsittelimme ideoita, ja ideoiden kehittelemistä ja hiomista. Se saattoi tuntua hieman ylimalkaiselta tai turhalta, kun oli kiire ohjelmoimaan ja tekemään peliä. Kuitenkaan sitä ei pidä ohittaa hätäisesti. Idea on kuitenkin loppujen lopuksi se mikä tekee pelistä hyvän tai huonon. Jos nyt tuntuu siltä, että ohitit ideankehittelyvaiheen turhan hätäisesti, palaa vielä edelliseen lukuun ja ideakaavioidesi pariin!

Nyt kuitenkin alamme jo hieman miettiä sitä miten ideaa lähdetään suunnittelemaan valmiiksi peliksi. Varsinaisia teknisiä ratkaisuja emme tee vielä, koska emme tunne tarpeeksi käsitteitä ja asioita sitä varten. Sen sijaan pohdimme muita tärkeitä, ylemmän tason asioita, sellaisia, jotka ovat ehkä lähinnä käyttäjää ja siten ehkä jopa kaikista tärkeimpiä. Älä käsitä väärin, totta kai näiden suunnitelmien toteutus on tärkeää myöskin, mutta ilman tätä suunnittelua on peliä huomattavasti vaikeampi toteuttaa!

Mikä on se mikä tulee erottamaan tämän pelin massasta? Miksi juuri tämä peli olisi niin hyvä, että kaikkien kannattaisi sitä pelata? Näitä kysymyksiä pohdittaessa kannattaa miettiä myös, että mikä oikeastaan on tietokonepeli. Niin, mikä on tietokonepeli? Ted Nelson (jota luultavasti tässä kurssissa vielä moneen kertaan tulen lainaamaan :) sanoi, että tietokonepelit ovat kaikista parhaita tietokoneohjelmia, todellista interaktiivista ohjelmistoa. Miksi näin? Hän sanoi sen johtuvan siitä, että toisin kuin muita ohjelmia, tietokonepelejä tehdään tunteella ja siksi ehkä hieman paremmin. Mutta mikä on se mikä tekee pelistä interaktiivisen ja paremman kuin jonkin hyödyllisen ohjelman? Se on käyttäjän huomioiminen! On erittäin tärkeää, että pelaaja tuntee, että hän osaa ja pystyy pelaamaan peliä ilman että hänen tarvitsee lukea tuhatsivuista tai edes sivun mittaista ohjekirjaa.

Siis... Miten tehdä pelistä sellainen että se miellyttää käyttäjää ja että hän tuntee heti olevansa "kotonaan" pelin äärellä? Ensimmäiseksi, mikä tulee olemaan pelin kohderyhmä? Kenelle peli on tarkoitettu. Tämä on tärkeä tehdä selväksi heti projektin alkuvaiheissa, koska kaikkia ei voi miellyttää. Siispä mieti, kuka tätä peliä tulee pelaamaan (vastaus voi olla ihan mikä vaan, esimerkiksi naapurin mummo, tai vaikka vain sinä ja pari kaveriasi - tai ehkä jopa suuri joukko nuoria rullaluisteluammattilaisia :). Kaikista helpointa varmaan on tehdä peliä samanlaisille ihmisille kuin itse olet. Mutta mieti tätä tarkkaan. Tämän päätöksen tehtyäsi voit paljon helpommin miettiä minkä tyylistä grafiikkaa peliin pitäisi tulla, minkälaista musiikkia - ehkä juonenkäänteitä. Kaikkeen tähän vaikuttaa kohderyhmän valinta.

Sitten, (ei mennä vieläkään ohjelmoinnin puolelle..:), mikä on pelin juoni/tarina tms? Miksi pelaaja pelaa peliä? Tämän kurssin peliin on tosi vaikea keksiä mitään järkevää tarinaa, mutta kyllä sitäkin voi miettiä. Jos keksit jotain hyvää, pistä postia ja kerron siitä seuraavassa osassa. Mutta edetäänpä käyttöliittymään, siihen minkä välityksellä kaikki käyttäjän ja pelin välinen vuorovaikutus tapahtuu. Siihen osaan peliä, joka ensimmäiseksi näkyy käyttäjälle päin.

Ristinollassakin on käyttöliittymä #

Pelialue voidaan jakaa esimerkiksi näinPelialue voidaan jakaa esimerkiksi näin

Miten peliä pelataan? Käytetäänkö näppäimistöä, vai olisiko hiiri parempi? Miten peli esittää tilanteet käyttäjälle? Tässä vaiheessa kannattaa luultavasti pistää ideoita paperille ja piirrellä jokunen kuvakin käyttöliittymästä. Tässä pieni hahmotelma, jonka itse tätä kurssia varten piirtelin.

Okei, tuo ei ole mikään maailman mahtavin kuva, eikä sen ole tarkoituskaan sellainen olla.. Se on itse asiassa aika hutaisten tehty, ja toivoisinkin että sinä miettisit hieman pitempään ja suunnittelisit jotain vähän parempaa. Kuitenkin tuossa on muutamia ihan järkeviä perusajatuksia. Pelialue on siinä oikealla sellainen ruutupaperimainen ruudukko, johon hiirellä klikkaamalla laitellaan ristejä ja nollia. Ja sitten, kun saadaan suora aikaiseksi, voitetaan. Tuttuun tapaan ihan niinkuin koulussa.

Ylhäällä vasemmassa nurkassa lukee tilannetietoja, kuten kenen vuoro on, miten kauan on pelattu ja niin edelleen. Vasemmalla alareunassa on valikot. Siitä voi painaa nappulaa, josta alkaa uusi peli tai nappia josta peli loppuu. Lisäksi voidaan keksiä vielä pari muuta hauskaa nappulaa.

Vielä on muutamia tärkeitä asioita joita täytyy miettiä:


  • Minkälaista grafiikkaa tullaan käyttämään? (liittyy tavallaan tuohon äskeiseen kuvaan.. joskin hieman laajempana asiana)
  • Onko peli yksin- vai moninpeli?
  • Missä järjestelmässä ja minkälaisilla koneilla peliä tullaan käyttämään?

Pohdittuasi näitä kysymyksiä koita vielä keksiä jokunen muu kysymys, jota pelaaja voisi mielessään ajatella ja etsi niihin järkeviä ja hyviä vastauksia. Kirjoita kaikki nämä asiat paperille ja laita paperi talteen sellaiseen paikkaan, josta voit sitä seurata jatkuvasti pelisi kehittyessä. Se toimikoon eräänlaisena käsikirjoituksena pelisi kehittyessä, kuin sääntökirjana. Toki siihen voi aina tehdä muutoksia, mutta mieluiten vain hyvin pieniä ja kosmeettisia.
Tehtäväsi tämän osan lopussa on pohtia näitä asioita ja kirjoittaa niistä tällaista suunnitteluraporttia, pistää ideat paperille, etteivät ne unohtuisi. Ajattelin, että tästä voisi tehdä hieman interaktiivisemman kurssin kuin tavallisesti. Joten ennen kuin kirjoitan seuraavan osan, toivoisin saavani sinulta palautetta ja erityisesti ideoita siitä, minkälainen sinun pelistäsi tulee. Mitä olet pohtinut? Siis, jos kirjoitat suunnitteluraporttisi koneella, lähetä se ihmeessä minulle, niin voin sitä tutkia ja mahdollisesti kommentoida. Mutta erityisesti, jotta tietäisin mitä asioita kannattaa tämän kurssin edetessä käsitellä, jotta saat kurssista mahdollisimman paljon irti!

Kiitos, että jaksoit seurata koko ensimmäisen osan loppuun asti, nyt vain töihin. Seuraava osa tulee mahdollisimman pian.