Skriptikielten käyttö pelitekoälyssä

Koko: px
Aloita esitys sivulta:

Download "Skriptikielten käyttö pelitekoälyssä"

Transkriptio

1 Skriptikielten käyttö pelitekoälyssä Reima Halmetoja Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

2 HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto Fakultet/Sektion Faculty Laitos Institution Department Matemaattis-luonnontieteellinen Tekijä Författare Author Reima Halmetoja Työn nimi Arbetets titel Title Tietojenkäsittelytieteen laitos Skriptikielten käyttö pelitekoälyssä Oppiaine Läroämne Subject Tietojenkäsittelytiede Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages Tiivistelmä Referat Abstract sivua Tietojenkäsittelytieteen laitoksen Ohjelmistotuotanto ja tietokonepelit-seminaarin seminaariartikkeli. Artikkelissa käsitellään pelitekoälyä ja sen toteuttamista skriptikielillä. Avainsanat Nyckelord Keywords pelitekoäly, skriptikielet Säilytyspaikka Förvaringsställe Where deposited Muita tietoja övriga uppgifter Additional information

3 Sisältö ii 1 Johdanto 1 2 Pelitekoälystä Pelitekoälyn määrittely Kovakoodattu tekoäly Tehovaatimukset pelitekoälylle Lyhyt johdatus skriptikieliin 4 4 Pelitekoälyä skriptikielillä Tekoälyn skriptaaminen Triggerijärjestelmät Etuja ja haittoja Skriptikielet ja tehokkuus Laajennettavuus ja ei-ohjelmoijien skriptaus Skriptikielen valinta Yhteenveto 13 Lähteet 15

4 1 Johdanto 1 Ensimmäisessä osiossa Pelitekoälystä määrittelemme, minkä tyyppisestä toiminnasta on kyse pelitekoälyä kehitettäessä (toteutustavasta riippumatta). Käymme myös läpi pinnallisesti kovakoodatun tekoälyn ideaa myöhempää vertailua varten. Tämän lisäksi tarkastelemme, minkä tyyppisiä tehovaatimuksia pelit asettavat tekoälylle. Tässä aineessa ei oleteta lukijalta erityistä tietämystä skriptikielistä (scripting language) tai skriptikielisten ohjelmien kirjoittamisesta. Tärkeimmät yleiset ominaisuudet skriptikielten osalta pyritään käymään läpi ymmärrettävyyden parantamiseksi osiossa Lyhyt johdatus skriptikieliin. Katsaus ei sellaisenaan ole kuitenkaan erityisen kattava, koska aiheesta on yksinäänkin helposti aineksia omaan artikkeliinsa. Kolmannessa osiossa tarkastelemme skriptaamalla toteutettavaa pelitekoälyä. Osiossa keskitytään pelissä olevien älykkäältä toiminnalta vaikuttavien tapahtumien tarkasteluun sekä käsitellään epäpelaajahahmojen tekoälyä ryhmätason sodankäyntiä kuvaavan pelin eräässä osassa. Viimeisessä osiossa pyritään tarkastelemaan skriptikielten etuja ja haittoja peliprojekteissa. Tarkastelussa pyritään ottamaan huomioon aiemmin käsiteltyjä tehovaatimuksia. Lisäksi katsotaan, minkä tyyppisiin projekteihin skriptikielen implementointi voi tarjota etuja. Yleisesti tässä seminaariaineessa pyritään käsittelemään skriptikielien ja tekoälyn perusteita johdattaen lukijaa aihepiiriin. Yksittäisiin skriptikieliin, peleihin tai toteutuksiin ei tarkemmin keskitytä, joskin esimerkkejä kustakin pyritään antamaan. Skriptikielistä kiinnostuneelle eräs tarkastelemisen arvoinen peli voi olla amerikkalaisen Epic Gamesin Unreal-peli ja sen jatko-osat, joissa käytetystä skriptikielestä löytyy dokumentaatiota wiki-muodossa [Unr07]. Alkuperäisen pelin skriptikielellä toteutetut tekoälyvastukset tulivat aikanaan tunnetuiksi skaalautuvuudestaan ja taktisista kyvyistään [Toz02].

5 2 Pelitekoälystä 2 Osiossa käymme läpi muutamia aineessa käytettäviä peruskäsitteitä, kuten pelitekoälyn määritelmää. Lisäksi tutustumme tapaan, jolla tekoäly on perinteisesti liitetty osaksi pelejä. Osion lopuksi katsastamme, miten rajattu tietokoneiden ja pelikonsolien laskentateho vaikuttaa pelitekoälyyn. 2.1 Pelitekoälyn määrittely Mitä pelitekoäly oikeastaan on? Halutaanko itsenäisesti omia strategioitaan ja pelityylejään muodostava älykäs tietokonevastustaja vai ennalta ohjelmoitu kone, joka suorittaa tiettyjä operaatioita niille ennalta määrätyissä olosuhteissa. Tässä artikkelissa pelitekoäly määritellään tavalla, jota pääasiallisesti käytettäneen alan kirjallisuudessa [Mil06]. Tekoäly voidaan jakaa Russelin ja Norvigin tapaan seuraavanlaiseen nelikenttään: Systeemit, jotka ajattelevat kuin ihmiset Systeemit, jotka toimivat kuin ihmiset Systeemit, jotka ajattelevat rationaalisesti Systeemit, jotka toimivat rationaalisesti Kuva 1: Tekoälyn nelikenttä [RuN03]. Keskitymme näistä systeemeihin, jotka toimivat rationaalisesti. Pelitekoälyä ajateltaessa tärkeintä lienee lopputulos, jossa tekoälyn toiminta vaikuttaa pelaajan kannalta järkevältä. Tästä näkökulmasta tarkasteltuna termi tekoäly voi olla hieman harhaanjohtava. Termeinä agenttien suunnittelu tai käyttäytymisen mallintaminen voivatkin kuvastaa ongelmakenttää paremmin [Toz02]. Sana agentti tulee esiintymään aineessa myöhemminkin. Yksinkertaisesti sillä tarkoitetaan oliota, joka toimii pelin ympäristössä ja on vuorovaikutuksessa sen kanssa. Vaikka pelitekoälyn tavoite on usein aiemmin mainitun oloinen, voivat lopputulokset erota suurestikin. Esimerkiksi pelaajan näkökulmasta kuvatuissa ampumispeleissä (FPS rst-person shooter), saattaa pelitekoäly olla niin vakuuttava, että pelaa-

6 3 ja voi luulla hahmon liikuttajan olevan verkkoyhteyden kautta pelaava ihminen. Tämäntyyppinen lopputulos ei kuitenkaan useimmiten ole tavoitteena pelitekoälyä suunniteltaessa. On kuitenkin mainittava, että ihmisen toiminnalta vaikuttavaa pelitapaa on yritetty kehittää muun muassa osana tieteellistä tutkimusta [LaD01]. On myös tärkeää käsittää, että pelitekoäly on riippuvainen asiayhteydestään [Toz02]. Esimerkiksi tietyssä FPS-pelissä erinomainen tekoälyvastustaja voi toiseen FPSpeliin siirrettynä olla erittäin huono, johtuen pelien erityyppisistä aseistuksista, taktiikoista, kenttäsuunnittelusta jne., vaikka ohjelmakoodi sellaisenaan toimisi myös jälkimmäisessä pelissä. 2.2 Kovakoodattu tekoäly Perinteinen tapa pelitekoälyn toteuttamiseen on niin sanottu kovakoodattu tekoäly (hard-coded articial intelligence). Yksinkertaisimmillaan tämä voi tarkoittaa esimerkiksi Pac-Man-pelissä tehtyä painotettua satunnaisuutta, jonka perusteella Pac-Manin vastustajat valitsevat kulkusuuntansa saavuttuaan peliareenalla olevaan risteyskohtaan [Mil06]. Kovakoodatuksi tekoälyn tässä tapauksessa tekee se, että se on ohjelmoitu samalla ohjelmointikielellä kuin muut osat pelistä ja on sellaisenaan kiinteä osa pelin ohjelmakoodia. Kovakoodattu tekoäly sopii toteutustapana hyvin tekoälykomponentteihin, joita käytetään usein uudelleen. Esimerkki paljon uudelleenkäytettävästä komponentista on tekoälyhahmojen liikkumisalgoritmit. Suhteellisen yksinkertaisilla liikkumisalgoritmeilla voidaan toteuttaa useita tekoälyhahmojen liikkumistapoja, kuten hahmon seuraaminen, pakeneminen, väistäminen jne. [Mil06], jotka ovat edelleen sovellettavissa moniin tarkoituksiin. Laskentatehon kannalta myös laskennallisesti vaativat algoritmit on hyvä toteuttaa kovakoodattuina palaamme aiheeseen myöhemmin. 2.3 Tehovaatimukset pelitekoälylle Moderneille peleille on ominaista näyttävä 3d-graikka, jonkinasteisesti mallinnettu fysiikka ja muut runsaasti konetehoa vaativat ominaisuudet. Tästä johtuen pelin

7 4 tekoäly voi usein varata vain pienen osan peliin käytettävästä laskentatehosta. Yksistään pelin graikan pyörittäminen vaatii usein yli 50% prosessorin tehosta [Her03]. Monissa peleissä noin 20% prosessorin kapasiteetista voidaan varata kaikkeen pelin tekoälyn vaatimaan laskentaan [Mil06], joskin tämä voi vaihdella riippuen pelin tapahtumista, pelistä yleisesti ja pelin alustasta (pc, konsoli jne.) Tehovaatimukset asettavat pelitekoälylle merkittävän haasteen. Hyvää pelitekoälyä suunniteltaessa lienee siis hyvä ottaa huomioon käytössä oleva koneteho ja pyrkiä mahdollisimman tehokkaisiin ratkaisuihin kuhunkin ongelmaan. Optimointi- ja toteutustavoista riippumatta pelitekoälyssä esiintyy ongelmia, kuten reitinetsintä, joita ei voida ratkaista ilman merkittävää prosessoriresurssien käyttöä [Toz02]. 3 Lyhyt johdatus skriptikieliin Skriptikieli tai komentosarjakieli on ohjelmointikieli, joka on luotu yksinkertaistamaan monimutkaista tehtävää jollekin tietylle ohjelmalle [Ber02]. Itse peliohjelma voidaan puolestaan kirjoittaa jollain tavanomaisella ohjelmointikielellä, kuten C, C++ tai Java. Skriptikieltä käytetään siis valitulla ohjelmointikielellä kirjoitetun ohjelman yhteydessä jonkin sille soveltuvan tehtävän ratkaisemista varten. Skriptikielen rakenne koostuu tavanomaisesti kahdesta osasta: kielestä ja tulkista (scripting engine, virtual machine tai interpreter) [Ber02]. Kielellä määritellään syntaksi, jota ohjelmoija käyttää ohjatakseen tietokonetta suorittamaan jotakin tiettyjä operaatioita. Skriptikielet voivat muistuttaa hyvinkin paljon muita ohjelmointikieliä syntaksiltaan, jolloin skriptikielellä kirjoitettu koodi voi näyttää paljon esimerkiksi Javalta, C++:lta, tms. Joissakin skriptikielissä kirjoitettua ohjelmakoodia eli skriptiä (script) suoritetaan sellaisenaan tulkin avulla. Useimmissa peleissä käytetyissä skriptikielissä, mukaan lukien esimerkiksi Lua, TLC, Quake-peliä varten suunniteltu Quake-C, tai Unrealpelisarjan UnrealScript, kirjoitettu skripti käännetään tavukoodiksi ennen sen suorittamista [Mil06]. Skriptille joudutaan tällöin tekemään muutamia toimenpiteitä tavukoodiksi kääntämistä varten.

8 5 Ensimmäinen vaihe skriptin muuntamiseksi tavukoodiksi on skriptin selaus eli leksikaalinen analyysi. Tässä vaiheessa etsitään skriptin tekstistä erilliset elementit, kuten operaatiot, varatut sanat, merkkijonot jne. Esimerkkinä skriptissä voi olla seuraava merkkijono apu = 12; joka voidaan jakaa tekstialkioihin seuraavasti apu (teksti) <väli> (tulostumaton merkki) = (sijoitusmerkki) <väli> (tulostumaton merkki) 12 (kokonaisluku) ; (lauseen lopetusmerkki) Tekstialkiot syötetään edelleen jäsentäjälle. Jäsentäjä tuottaa kääntäjää varten abstraktiksi syntaksipuuksi tai syntaksipuuksi kutsutun tietorakenteen, joka kuvaa lähdekoodin syntaktista rakennetta [ALSU07]. Aiemmin teksitialkioiksi muuntamamme esimerkki voidaan muuntaa seuraavalla tavalla kuvattavaksi syntaksipuuksi: lauseke = apu 12 Kuva 2: Yksinkertainen syntaksipuu.

9 6 Abstrakti syntaksipuu lähetetään edelleen koodin generoijalle, joka muuntaa sen tavukoodiksi [ALSU07]. Tavukoodia voidaan tämän jälkeen suorittaa skriptikielen tulkilla [Ber02]. Koko prosessi skriptistä tulkattavaksi tavukoodiksi voidaan kuvata alla esitetyllä tavalla: kääntäjä selaus skripti jäsentäminen tavukoodi tavukoodin generointi ajonaikainen tulkki Kuva 3: Muunnos ihmisen kirjoittamasta skriptistä ajettavaan tavukoodiin. Käännösvaiheen jälkeen kielen tulkki suorittaa tavukoodiksi käännettyä ohjelmaa. Tavukoodiksi käännettävät skriptikielet muistuttavat siis hieman Javaa, jossa myös käännetään lähdekielinen ohjelma virtuaalikoneella pyöritettäväksi tavukoodiksi. Pienenä erona Javassa kuitenkin virtuaalikone edelleen kääntää tavukoodin konekieliseksi juuri ennen sen ajamista (ns. just-in-time compiling). Tätä tekniikkaa käytetään kuitenkin harvemmin skriptikielissä [Mil06]. Tällaisenaan tulkattavat skriptikielet eroavat merkittävästi esimerkiksi C-ohjelmointikielestä, jossa ohjelmakoodi käännetään usein suoraan konekieleksi. 4 Pelitekoälyä skriptikielillä Pelien kehittäjillä on monenlaisia vaihtoehtoja pelitekoälyn kehittämiseen skriptikielten avulla. Tarkastelemme esimerkkiä pelistä, jossa on käytetty skriptaamista taktisen tason tekoälytoiminnan toteuttamiseen. Lisäksi tutustumme triggerijärjestelmiin, yksinkertaiseen skriptikielillä toteutettavaksi soveltuvaan tekniikkaan.

10 4.1 Tekoälyn skriptaaminen 7 Tarkastellaan esimerkkiä vuonna 2006 tuotannossa olleesta, joskin mainitsemattomasta pelistä, joka käyttää hyväkseen tekoälyn skriptausta [Mil06]. Eräässä pelin osassa sotilasryhmän tarkoituksena on vallata huone. Pelin suunnittelussa keskityttiin siihen, että huoneen valtaaminen tapahtuisi amerikkalaisen sotilasohjeistuksen mukaan. Ohjeistuksessa yksi ryhmän sotilaista heittää huoneen oviaukosta käsikranaatin. Ensimmäinen sotilaista menee huoneeseen ja liikkuu seinää myöten huoneen nurkkaan. Toinen sotilas liikkuu huoneen toisella puolella olevaan nurkkaan. Kaksi jäljellä olevaa sotilasta liikkuvat oviaukon sisäpuolelle suojaamaan muuta ryhmää. Tarkastellaan valtaamisessa käytettyjä skriptejä: Liiku sijaintiin oven ulkopuolella Heitä kranaatti ovesta Liiku lähellä olevaan kulmaan huoneessa Suojaa oviaukon sisäpuoli Näitä toimintoja koordinoidaan edelleen ylemmän tason skriptillä. Skriptien onnistunutta suorittamista varten tarvitaan tietoa siitä, mitkä ovat oviaukkoa lähinnä olevat huoneen nurkat. Esimerkkipelissä huoneiden nurkat, oviaukon sijainti sekä odotuspaikat oven ulko- ja sisäpuolella oli selvitetty etukäteen. Koska huoneen valtaamista varten olennaiset sijainnit ovat tiedossa ennen skriptien ajamista, voidaan samaa menetelmää käyttää huoneen valtaamiseen sen muodosta riippumatta. Huone voi tällöin olla esimerkiksi viisi- tai kuusikulmainen, kunhan olennaiset pisteet oviaukon lähistöllä, sekä sitä lähimpänä olevat huoneen nurkat ovat tiedossa. Pisteiden selvittäminen voidaan tehdä etukäteen, kuten tässä esimerkissä, tai se voidaan suorittaa osana koordinointiin käytettävää ylemmän tason skriptiä. Tilanteissa, joissa ryhmän koko on aiempaa esimerkkiä pienempi (alle neljä), käytetään edelleen samoja toimintaan vaikuttavia skriptejä. Ainoa asia, joka muuttuu, on skriptien koordinoimiseen käytettävä ylemmän tason skripti. Esimerkiksi kolmen hahmon valtauksessa vain yksi hahmoista jäisi suojaamaan oviaukkoa (kahden aikaisemman mennessä huoneen nurkkiin).

11 8 Kuva 4: Huoneen vyöryttäminen neljällä hahmolla ryhmätason sotapelissä [Mil06]. Pelissä saatiin aikaan monimutkaiselta taktiselta kuviolta vaikuttava toiminta muutaman skriptin avulla. Skriptien käyttö tämän tyyppisiä tarkoituksia varten voikin olla hyvä ratkaisu, koska niiden avulla voidaan yksinkertaistaa monimutkaisempaa päätöksentekoprosessia. Esimerkin skriptit olivat myös melko hyvin uudelleenkäytettäviä, ja esimerkiksi vajaan ryhmän toimintaa ohjatessa ei jouduta kirjoittamaan kaikkea ryhmän toimintaa ohjaavia skriptejä uudelleen. Vaikkakin esimerkkipelissä toteutettiin skriptien avulla suhteellisen monimutkaista toimintaa, voidaan vastaavan tyyppisesti kirjoittaa yksinkertaisemmillekin tekoälyhahmojen toiminnoille sopivia skriptejä, kuten pelaajan hahmoa kohti ampumista, lääkepakkausten käyttöä jne. 4.2 Triggerijärjestelmät Triggerijärjestelmiä (trigger system) voidaan pitää yksinkertaisena tapana saada agentit toimimaan vuorovaikutuksessa muun pelimaailman kanssa. Triggerijärjestelmällä on kaksi pääasiallista tarkoitusta pelissä: pitää kirjaa pelimaailmassa olevista

12 9 tapahtumista, joiden kanssa agentti voi olla vuorovaikutussuhteessa, ja minimoida prosessointitarve, jota käytetään agenttien vuorovaikutukseen näiden tapahtumien kanssa. Triggeri (trigger) voi olla mikä tahansa agenttiin vaikuttava ärsyke pelissä, kuten ampumisen äänen kuuleminen, johonkin paikkaan saapuminen, tietty vahingoittumisen taso, jne. Edelleen kullekin agentille voidaan määritellä, mitkä triggerit vaikuttavat niihin [Ork02]. Katsastetaan esimerkkejä ärsykkeistä. FPS-pelissä pelaajan hahmo saattaa laukaista hälytyksen, joka toimii triggerinä. Esimerkissä kaikki hälytyksen kuulevat tekoälyhahmot pyrkivät triggerin kutsuman skriptin ohjaamana liikkumaan hälytyksen suuntaan. Toisena esimerkkinä tekoälyhahmo saattaa nähdä pelaajan hahmon ampuvan itseään kohti, jolloin tekoälyhahmo liikkuu jonkin suojan taakse. Suojan takaa tekoälyhahmo pyrkii heittämään käsikranaatteja pelaajan hahmoa kohti. Tässä voi olla kyseessä kaksi triggeriä: ensimmäinen on pelaajan hahmon havaitseminen, jonka seurauksena tekoälyhahmolle suoritetaan skripti, joka liikuttaa tekoälyhahmon aiemmin määriteltyyn suojapaikkaan. Toinen kytkimistä voi olla suojan takana oleminen, jonka seurauksena suoretaan skripti, jossa tekoälyhahmo vaihtaa käytössä olevan aseensa epäsuorasti heitettäviin kranaatteihin. Aiemmin mainitun tyyppistä käyttäytymistä voidaan saada aikaan myös ilman triggerijärjestelmää. Tämä voidaan toteuttaa suorittamalla kyselyjä (polling) tapahtumille kutakin agenttia kohden. Kyselyihin perustuva toteutustapa on ongelmallinen, koska kaikkien tapahtumien ja agenttien läpi käymiseen tarvitaan runsaasti prosessoriaikaa. Laskennan vaativuus kyselytoteutukselle on luokkaa O(n 2 )[Ork02]. Yleistetyssä triggerijärjestelmässä triggeri merkitään aktiiviseksi siihen liittyvät tapahtuman sattuessa. Jokaisessa triggerijärjestelmän syklissä käydään läpi kaikkien agenttien lista. Tässä ajetaan testejä, joiden avulla selvitetään, onko kyseinen agentti kiinnostunut mistään tällä hetkellä aktiiviseksi merkitystä triggereistä. Agentit puolestaan suorittavat prosessointia riippuen siitä, kuinka moni triggeri kyseistä agenttia kiinnostaa. Triggerijärjestelmä on mielenkiintoinen tekoälyratkaisu. Suhteellisen yksinkertaisella ärsykkeisiin reagoimisella voidaan aikaansaada illuusio siitä, että esimerkiksi tekoälypelaajat pystyvät monimutkaiseen taktiseen toimintaan (kuten suojaan hakeutumiseen ja siitä kranaattien heittelyyn) tai interaktioon pelimaail-

13 10 man kanssa (jääkaapille saapuva vartija juo maitoa kaapista). Sellaisenaan se sopii erinomaisesti pelitekoälyn tarkoitukseen: rationaaliselta vaikuttavan toiminnan aikaansaamiseen. Skriptaaminen voi puolestaan olla hyvä tapa toteuttaa triggerijärjestelmä, koska kieli itsessään voidaan määritellä kuvaamaan hyvin pelin tapahtumia. Kenttien suunnittelussa voidaan muokata triggerien skriptejä, ja liittää niitä pelikenttiin vaikuttamatta muun pelin ohjelmakoodiin. Jos pelissä käytettävä skriptikieli on suunniteltu sillä tavalla, että sen käyttämiseen ei tarvita erikoista ohjelmointitaitoa, voivat myös ohjelmointiin osallistumattomat kenttäsuunnittelijat luoda uusia triggereitä mielenkiintoisia pelitapahtumia varten. Mainitaan edelleen, että johdannossa esitelty Unreal-peli ja sen jatko-osat käyttävät hyväkseen triggerijärjestelmää pelien tekoälyn toteutuksessa [Unr07]. 5 Etuja ja haittoja Osiossa pyritään luomaan kriittinen katsaus skriptikielten käyttöön pelitekoälyä toteutettaessa. Tarkastelemme tekoälyn skriptikielellä toteuttamisen hyötyjä ja haittoja muun muassa laajennettavuuden, tehovaatimusten ja pelin myynti-iän kannalta. 5.1 Skriptikielet ja tehokkuus Tulkattavana kielenä skriptikielellä kirjoitetut ohjelman osat ovat huomattavasti hitaampia kuin konekieliset ohjelmat. Unreal-pelissä käytetyn UnrealScript-kielen nopeus on arvioitu noin 20 kertaa hitaammaksi kuin konekielisen ohjelman [Swe98]. Ero on erittäin merkittävä. Toisaalta on otettava huomioon, mihin pelin osiin skriptaamista käytetään. Pelin kriittisimmät osat ovat Unreal-pelissä toteutettu tehokkaammalla ohjelmointikielellä. Eräs tapa minimoida kalliiden skriptien suoritukseen tarvittavaa laskentatehoa on pyrkiä kirjoittamaan skriptejä, joita ei tarvitse suorittaa kaiken aikaa [Swe98].

14 11 Skriptikielen optimoinnilla voidaan saada aikaan hyviä parannuksia tehokkuudessa. Parhaimmillaan koodin pituutta voidaan lyhentää jopa 50%:lla optimoimalla generoitua tavukoodia [Her03]. Skriptikielinen ohjelman osa tulee silti olemaan huomattavan hidas, vaikka skriptikieli saataisiin parhaimmassa tapauksessa esimerkiksi vain 10 kertaa hitaammaksi kuin muu pelissä käytetty ohjelmakoodi. Useissa peleissä tarvitaan esimerkiksi reitinetsintäalgoritmeja, joiden avulla pyritään löytämään pelissä olevalle oliolle lyhin mahdollinen tie jostain pisteestä toiseen määriteltyyn pisteeseen. Reitinetsintäalgoritmeja on olemassa useita (esim. Dijkstran algoritmi tai A*), mutta niille on yleistä suurehkot laskentatehovaatimukset. Reitinetsintäalgoritmien ja muiden vastaavien laskennallisesti vaativien tekoälyalgoritmien toteuttaminen skriptikielellä lisää edelleen tarvittavaa laskentatehoa. Laskentatehoa tarvitaan enemmän, koska algoritmin skriptikielinen toteutus on auttamatta hitaampi, kuin esimerkiksi C- tai C++-kielinen toteutus. Eräs mielenkiintoinen tulkattaviin skriptikieliin liittyvä ominaisuus liittyy olennaisesti tehovaatimuksiin. Tulkattavilla skriptikielillä voidaan ajaa jotain tiettyä skriptiä, kun resurssit sallivat sen. Tilanteessa, jossa konetehoa vaaditaan muualle, kuten ruudun päivittämiseen, voidaan skriptin tulkkaaminen keskeyttää. Kun konetehoa on jälleen vapaana, voidaan saman skriptin tulkkaamista jatkaa siitä, mihin jäätiin. Tällä voidaan hillitä tulkattavien skriptikielten suurempaa tehon kulutusta, koska skriptien suorittamista voidaan mahdollisuuksien mukaan ajoittaa tilanteisiin, jossa konetehoa on enemmän vapaana. Aiempi tulkkaamisen keskeyttäminen voidaan edelleen yhdistää milloin vain -algoritmeiksi (anytime algorithms) tekoälytekniikkaan, joka voidaan integroida skriptikielen tulkkiin [Mil06]. Ajatus milloin vain -algoritmeissa on siinä, että algoritmin tulosta voidaan kysyä, ennen kuin algoritmi on lopullisesti suoritettu loppuun. Tarkastellaan esimerkkiä, jossa reitinetsinnällä pyritään löytämään hahmolle reitti kahden pisteen välillä. Jos reitinetsintäalgoritmi on toteutettu milloin vain -algoritmina, voidaan hahmon liikuttaminen pelimaailmassa aloittaa ennen kuin algoritmi on selvittänyt lopullisen reitin. Tämä on mahdollista kysymällä algoritmilta välituloksena tuotettua pistettä lähtö- ja maalipisteiden välillä, jota kohti hahmoa liikutetaan.

15 5.2 Laajennettavuus ja ei-ohjelmoijien skriptaus 12 Hyvin valitulla ja suunnitellulla skriptikielellä ohjelmoijat eivät välttämättä ole ainoita mahdollisia skriptien kirjoittajia. Skriptien kirjoittamiseen voivat osallistua esimerkiksi kenttien suunnittelijat tai pelin loppukäyttäjät. Mielenkiintoisesti useimmiten skriptien kirjoittajat eivät olekaan ohjelmoijia, vaan pelin suunnittelijoita [Poi02]. Tämä liittynee pelintekomalliin, jossa perinteisellä ohjelmointikielellä toteutettu pelikone erotetaan skriptikielillä toteutetusta pelin sisällöstä. Pelin sisällön erottaminen pelikoneesta on erityisesti suurissa peliprojekteissa esiintyvä tarve [Mil06]. Pelin suunnittelijat keskittyvät kehittämään sisältöä peliin helpommin omaksuttavalla skriptikielellä jättäen pelikoneen kehityksen siitä vastaaville ohjelmoijille. Skriptaamisen mahdollistaminen pelin loppukäyttäjille, eli pelaajille voi olla taloudellisesti kannattava ratkaisu. Tämä siitä syystä että se skriptaamisen mahdollistaminen voi synnyttää pelin ympärille ns. modauskulttuurin, jossa pelaajat muokkaavat osia pelistä muiden pelaajien käytettäviksi. Käytännössä tämä voi tarkoittaa pelin kehittäjän kannalta ilmaista lisäsisältöä pelille, joka voi edelleen vaikuttaa positiivisesti pelin myynti-ikään. Hyvän skriptikielen kehittäminen erityisesti ei-ohjelmoijia silmällä pitäen voi olla vaikeaa. Skriptikielen tulee tarjota mahdollisimman paljon ohjelmointimahdollisuuksia, mutta toisaalta kielen oppimisen tulee olla nopeaa. Eräs tapa helpottaa skriptikielen käyttämistä on tarjota skriptien kirjoittajille kirjasto hyvin dokumentoituja toimintoja, joita käytetään usein pelissä [Poi02]. Esimerkiksi peliä varten kehitetyn skriptikielen kirjastossa voi olla valmiiksi kirjoitettuna pelihahmojen liikkumiseen käytettäviä skriptejä. Tässä tapauksessa skriptin kirjoittaja joutuu pikemmin koordinoimaan liikkumiseen käytettävien skriptien kutsumista, kuin ohjelmoimaan itse liikkumiseen tarvittavia algoritmeja. Laajennettavuuden kääntöpuoli voi ilmetä väliohjelmistoja tekeville tekoälykehittäjille. Toisaalta peliin saatetaan haluta ostaa valmis tekoälyratkaisu. Väliohjelmistojen kehittäjillä on harvemmin mahdollisuutta vaikuttaa peleissä käytettäviin skriptikieliin, joten kehittäjän tekoälysysteemi on yleisimmin varminta ohjelmoida samaan

16 13 tapaan kuin esimerkiksi fysiikkamoottorit, so. jollain tehokkaalla ohjelmointikielellä. Tällöin tekoäly voidaan rinnastaa fysiikkamoottorin tyyppiseksi osaksi pelikonetta. Pelien kehittäjät voivat kuitenkin haluta tekoälysysteemiin laajennettavuutta ja käyttäjien muuntelumahdollisuuksia, jotka skriptikielet voivat tarjota. Lopputuloksena voi olla, että skriptausmahdollisuus joudutaan keinotekoisesti lisäämään muuten kauniisti suunniteltuun tekoälysysteemiin tai se on voitu toteuttaa toisella skriptikielellä kuin muu pelin mahdollinen skriptaus. 5.3 Skriptikielen valinta Peliin käytettäväksi skriptikieleksi on olemassa useita vaihtoehtoja. Tehdäänkö oma, juuri peliin soveltuva kieli vai valitaanko jokin valmis kieli, kuten Lua, Tcl, Python jne. Monet pelit käyttävät nimenomaan juuri niitä varten suunniteltua skriptikieltä, kuten aiemmin mainittu Unreal-pelin UnrealScript (jonka muunneltua versiota myös pelisarjan myöhemmät pelit käyttävät). Kutakin pelia varten räätälöity skriptikieli noudattaa näkökulmaa, jonka mukaan skriptikielen pääasiallinen tarkoitus on yksinkertaistaa jonkin ongelman ratkaisua. Oman kielen kirjoittaminen voi kuitenkin olla melko vaativa tehtävä, erityisesti jos kieltä ei suunnitella riittävän huolellisesti, ottaen huomioon myös sille tulevaisuudessa esiintyvät vaatimukset. Tämän tyyppisiä vaatimuksia voi kokemattoman kehittäjän olla vaikea ennakoida, ja niiden lisäksi on skriptikieli suunniteltava mahdollisesti myös ohjelmointia taitamattomien pelaajien ja pelisuunnttelijoiden käytettäväksi. Joidenkin pelinkehittäjien mukaan ainakaan omaa jäsentäjää skriptikielelle ei kannata kirjoittaa, vaan on järkevämpää käyttää apuna kääntäjätyökaluja, kuten lex ja yac [BrD02]. 6 Yhteenveto Pelitekoälyssä pyritään luomaan pelaajalle illuusio siitä, että pelin hahmot toimivat rationaalisesti. Kyse ei ole siitä, että pyritään huijaamaan pelaaja luulemaan pelaavansa ihmisiä vastaan.

17 14 Useimmat peleissä käytettävät skriptikielet ovat tulkattavia kieliä. Tämäntyyppisissä kielissä kirjoitettu skripti tulee selata ymmärrettäviksi tekstialkioiksi. Tekstialkiot jäsennetään edelleen loogiseen muotoon syntaksipuuksi. Syntaksipuu muunnetaan tavukoodiksi, jota skriptikielen tulkki suorittaa. Skriptikieliä käytetään jollain muulla kielellä ohjelmoidun pelin yhteydessä suorittamalla tulkilla tilanteeseen sopiva, usein tavukoodina oleva skripti. Skriptikieliä voidaan käyttää monipuolisesti erilaisten tekoälyratkaisujen toteutustapana. Aineessa tarkastelimme monimutkaiselta vaikuttavan ryhmätason sotilaspelissä esiintyvän huoneiden valtaamista neljän yksinkertaisen skriptin ajamisen yhdistelmänä. Lisäksi kävimme käsitteiden tasolla läpi triggerijärjestelmää, jonka avulla pelissä toimivat tekoälyhahmot voivat olla yhteydessä pelimaailman tapahtumiin ilman jatkuvaa kyselyiden tarvetta. Pelinäkökulmasta skriptikielen mukaan ottaminen tai pois jättäminen ei ole itsestään selvä ratkaisu. Toisaalta skriptikielet tarjoavat tiettyjä etuja, kuitenkin mahdollisesti monimutkaistaen peliä kokonaisuuden tasolla ja lisäämällä pelin tehovaatimuksia. Oman käsitykseni mukaan on tärkeää nähdä, että skriptikielten käyttö tai käyttämättä jättäminen pelitekoälyssä ovat valintoja, jotka liittyvät pelin arkkitehtuuriin, eivät sen käyttämiin algoritmeihin. Tällöin siis pelitekoälyssä tarvittavat algoritmit ovat samoja riippumatta siitä, toteutetaanko ne kovakoodattuina tai liitetäänkö ne peliin skriptikielen avulla. Skriptikielen mukaan ottaminen, valinta ja muut vastaavat ratkaisut lienee parasta tehdä tapauskohtaisesti kutakin peliä suunniteltaessa. Tekoälyn toteutustapana skriptikielet soveltuvat esimerkiksi peleihin, joissa tekoäly halutaan erottaa pelikoneesta osaksi pelin sisältöä, jota pelisuunnittelijat ja harrastelijat voivat muokata. Toisaalta vaativaa laskentaa suorittavat tekoälyalgoritmit, kuten reitinetsintäalgoritmit voi olla järkevämpää toteuttaa skriptaamistakin hyväksi käyttävissä projekteissa kovakoodattuna huomattavasti paremman tehokkuuden varmistamiseksi. Näitä tehokkaammin toteutettuja algoritmeja voidaan edelleen käyttää kirjastojen avulla skriptikielellä toteutettavissa tekoälykomponenteissa.

18 Lähteet ALSU07 Ber02 BrD02 15 Aho, A., Lam, M., Sethi, R., Ullman, J. Compilers: principles, techniques & tools, second edition. Addison-Wesley Berger, L. Scripting: overview and code generation. AI game programming wisdom, sivut , Cengage Delmar Learning Brockington, M., Darrah, M. How not to implement a basic scripting language. AI game programming wisdom, sivut , Cengage Delmar Learning Her03 Herz, A. Optimized script execution. AI game programming wisdom 2, sivut , Cengage Delmar Learning LaD01 Mil06 MLAKS04 Ork02 Poi02 RuN03 Laird, J., Duchi, J. Creating human-like synthetic characters with multiple skill levels: A case study using the soar quakebot. AAAI Spring Symposium on Articial Intelligence and Computer Games, sivut 54-58, Millington, I. Articial intelligence for games. Elsevier Science & Technology Books Magerko, B., Laird, J., Assanie, M., Kerfoot, A., Stokes, D. AI characters and directors for interactive computer games. Proceedings of the 2004 Innovative Applications of Articial Intelligence Conference, AAAI Press Orkin, J. A general-purpose trigger system. AI game programming wisdom, sivut 48-54, Cengage Delmar Learning Poiker, F. Creating scripting languages for nonprogrammers. AI game programming wisdom, sivut , Cengage Delmar Learning Russell, S., Norvig, P., Articial intelligence: a modern approach. Prentice Hall 2003.

19 16 Sco02 Scott, B. The illusion of intelligence. AI game programming wisdom, sivut 16-20, Cengage Delmar Learning Swe98 Sweeney, T. UnrealScript language reference. Toz02 Tozour, P. The evolution of game AI. AI game programming wisdom, sivut 3-15, Cengage Delmar Learning Unr07 Unreal wiki: the Unreal engine documentation site.

Skriptikielten käyttö pelitekoälyssä

Skriptikielten käyttö pelitekoälyssä Skriptikielten käyttö pelitekoälyssä Reima Halmetoja Helsinki 20.3.2008 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto

Lisätiedot

Selainpelien pelimoottorit

Selainpelien pelimoottorit Selainpelien pelimoottorit Teemu Salminen Helsinki 28.10.2017 Seminaaritutkielma Helsingin yliopisto Tietojenkäsittelytiede ! 1 HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta

Lisätiedot

arvostelija OSDA ja UDDI palveluhakemistoina.

arvostelija OSDA ja UDDI palveluhakemistoina. Hyväksymispäivä Arvosana arvostelija OSDA ja UDDI palveluhakemistoina. HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto Fakultet/Sektion Faculty/Section Laitos Institution

Lisätiedot

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä olevilla komponenteilla? Voisiko jollakin ohjelmointikielellä

Lisätiedot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Aika/Datum Month and year Kesäkuu 2012

Aika/Datum Month and year Kesäkuu 2012 Tiedekunta/Osasto Fakultet/Sektion Faculty Laitos/Institution Department Filosofian, historian, kulttuurin ja taiteiden tutkimuksen laitos Humanistinen tiedekunta Tekijä/Författare Author Veera Lahtinen

Lisätiedot

Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages

Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages Tiedekunta/Osasto Fakultet/Sektion Faculty Laitos Institution Department Tekijä Författare Author Työn nimi Arbetets titel Title Oppiaine Läroämne Subject Työn laji Arbetets art Level Aika Datum Month

Lisätiedot

! #! %! & #!!!!! ()) +

! #! %! & #!!!!! ()) + ! #! %! & #!!!!! ()) + Tiedekunta/Osasto Fakultet/Sektion Faculty Humanistinen tiedekunta Laitos Institution Department Taiteiden tutkimuksen laitos Tekijä Författare Author Matti Pesonen Työn nimi Arbetets

Lisätiedot

Pro gradu -tutkielma Meteorologia SUOMESSA ESIINTYVIEN LÄMPÖTILAN ÄÄRIARVOJEN MALLINTAMINEN YKSIDIMENSIOISILLA ILMAKEHÄMALLEILLA. Karoliina Ljungberg

Pro gradu -tutkielma Meteorologia SUOMESSA ESIINTYVIEN LÄMPÖTILAN ÄÄRIARVOJEN MALLINTAMINEN YKSIDIMENSIOISILLA ILMAKEHÄMALLEILLA. Karoliina Ljungberg Pro gradu -tutkielma Meteorologia SUOMESSA ESIINTYVIEN LÄMPÖTILAN ÄÄRIARVOJEN MALLINTAMINEN YKSIDIMENSIOISILLA ILMAKEHÄMALLEILLA Karoliina Ljungberg 16.04.2009 Ohjaajat: Ari Venäläinen, Jouni Räisänen

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Hyvä ohjelmointitapa. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen

Lisätiedot

Koht dialogia? Organisaation toimintaympäristön teemojen hallinta dynaamisessa julkisuudessa tarkastelussa toiminta sosiaalisessa mediassa

Koht dialogia? Organisaation toimintaympäristön teemojen hallinta dynaamisessa julkisuudessa tarkastelussa toiminta sosiaalisessa mediassa Kohtdialogia? Organisaationtoimintaympäristönteemojenhallinta dynaamisessajulkisuudessatarkastelussatoiminta sosiaalisessamediassa SatuMariaPusa Helsinginyliopisto Valtiotieteellinentiedekunta Sosiaalitieteidenlaitos

Lisätiedot

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi Solidity älysopimus ohjelmointi Sopimus suuntautunut ohjelmointi Merkle puu Kertausta eiliseltä Solidity on korkean tason älysopimus ohjelmointikieli Muistuttaa olio-ohjelmointia Javalla Sopimuskoodi on

Lisätiedot

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 1 TIE-20100 Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 2 Lähteet Luentomoniste pohjautuu vahvasti prof. Antti Valmarin vanhaan luentomonisteeseen

Lisätiedot

Maailman muutosta tallentamassa Marko Vuokolan The Seventh Wave -valokuvasarja avauksena taidevalokuvan aikaan

Maailman muutosta tallentamassa Marko Vuokolan The Seventh Wave -valokuvasarja avauksena taidevalokuvan aikaan Maailman muutosta tallentamassa Marko Vuokolan The Seventh Wave -valokuvasarja avauksena taidevalokuvan aikaan Pro gradu -tutkielma 31.1.2012 Helsingin yliopisto Humanistinen tiedekunta Filosofian, historian,

Lisätiedot

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen GIS-automatisointi ja ohjelmointi/skriptaus Harri Antikainen Mistä nyt puhutaan? Automatisointi: Mikä tahansa tapa teettää tietokoneella asioita ilman että käyttäjän tarvitsee tehdä muuta kuin laittaa

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

Ohjelmointi 1. Kumppanit

Ohjelmointi 1. Kumppanit Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op FT Ari Viinikainen Tietokoneen rakenne Keskusyksikkö, CPU Keskusmuisti Aritmeettislooginen yksikkö I/O-laitteet Kontrolliyksikkö Tyypillinen Von Neumann

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

ohjelman arkkitehtuurista.

ohjelman arkkitehtuurista. 1 Legacy-järjestelmällä tarkoitetaan (mahdollisesti) vanhaa, olemassa olevaa ja käyttökelpoista ohjelmistoa, joka on toteutettu käyttäen vanhoja menetelmiä ja/tai ohjelmointikieliä, joiden tuntemus yrityksessä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Nollasummapelit ja bayesilaiset pelit

Nollasummapelit ja bayesilaiset pelit Nollasummapelit ja bayesilaiset pelit Kristian Ovaska HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Seminaari: Peliteoria Helsinki 18. syyskuuta 2006 Sisältö 1 Johdanto 1 2 Nollasummapelit 1 2.1

Lisätiedot

Luonnontieteiden popularisointi ja sen ideologia

Luonnontieteiden popularisointi ja sen ideologia Luonnontieteiden popularisointi ja sen ideologia Tapauksina Reino Tuokko ja Helsingin Sanomat 1960-luvulla Ahto Apajalahti Helsingin yliopisto Humanistinen tiedekunta Suomen ja Pohjoismaiden historia Pro

Lisätiedot

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmistojen mallintaminen. Luento 11, 7.12. Ohjelmistojen mallintaminen Luento 11, 7.12. Viime viikolla... Oliosuunnittelun yleiset periaatteet Single responsibility eli luokilla vain yksi vastuu Program to an interface, not to concrete implementation,

Lisätiedot

Katsaus korruption vaikutuksesta Venäjän alueelliseen talouskasvuun ja suoriin ulkomaisiin investointeihin

Katsaus korruption vaikutuksesta Venäjän alueelliseen talouskasvuun ja suoriin ulkomaisiin investointeihin INSTITUUTIOTTALOUSKASVUNEDELLYTYKSENÄ KatsauskorruptionvaikutuksestaVenäjänalueelliseentalouskasvuunjasuoriin ulkomaisiininvestointeihin2000 2010 AshekMohamedTarikHossain HelsinginYliopisto Valtiotieteellinentiedekunta

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015 TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2015 Sisällys t Väitöstilaisuus 4.12.2015 kello 12 vanhassa juhlasalissa S212 saa tulla 2 demoruksia

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

OHJ-2710 Peliohjelmointi. Syksy 2012 Timo Kellomäki

OHJ-2710 Peliohjelmointi. Syksy 2012 Timo Kellomäki OHJ-2710 Peliohjelmointi Syksy 2012 Timo Kellomäki timo.kellomaki@tut.fi Käytännön juttuja Kurssihenkilökunta koostuu Timo Kellomäestä Luennot torstaisin salissa TB223 klo 12-14 2. viikko harkkatyöinfo,

Lisätiedot

Arkkitehtuurinen reflektio

Arkkitehtuurinen reflektio Arkkitehtuurinen reflektio Toni Ruokolainen Toni.Ruokolainen@cs.helsinki.fi Helsinki 6.10.2003 Tiivistelmä HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla ALKUHARJOITUS Kynän ja paperin avulla peilaaminen koordinaatistossa a) Peilaa pisteen (0,0) suhteen koordinaatistossa sijaitseva - neliö, jonka

Lisätiedot

13/20: Kierrätys kannattaa koodaamisessakin

13/20: Kierrätys kannattaa koodaamisessakin Ohjelmointi 1 / syksy 2007 13/20: Kierrätys kannattaa koodaamisessakin Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy

Lisätiedot

Harjoitustehtävät ja ratkaisut viikolle 48

Harjoitustehtävät ja ratkaisut viikolle 48 Harjoitustehtävät ja ratkaisut viikolle 48 1. Tehtävä on jatkoa aiemmalle tehtävälle viikolta 42, missä piti suunnitella älykodin arkkitehtuuri käyttäen vain ennalta annettua joukkoa ratkaisuja. Tämäkin

Lisätiedot

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

Pelisuunnittelua tulevaisuudessa. Karoliina Korppoo / Colossal Order

Pelisuunnittelua tulevaisuudessa. Karoliina Korppoo / Colossal Order Pelisuunnittelua tulevaisuudessa Karoliina Korppoo / Colossal Order Puhuja Karoliina Korppoo Game Designer Lead designer projektissa Cities: Skylines Medianomi, Tampereen Ammattikorkeakoulu Filosofian

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit. 3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen

Lisätiedot

Virtuaalikoneiden generointi Vmgen-kääntäjällä

Virtuaalikoneiden generointi Vmgen-kääntäjällä Virtuaalikoneiden generointi Vmgen-kääntäjällä Risto Saarelma Helsinki 18.4.2005 Ohjelmointikielten kääntäjät -kurssi HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 1 Johdanto 1 Virtuaalikoneet ovat

Lisätiedot

3. Muuttujat ja operaatiot 3.1

3. Muuttujat ja operaatiot 3.1 3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.

Lisätiedot

TIE Principles of Programming Languages CEYLON

TIE Principles of Programming Languages CEYLON TIE-20306 Principles of Programming Languages CEYLON SISÄLLYSLUETTELO 1. YLEISTIETOA KIELESTÄ JA SEN KEHITTÄMISESTÄ... 1 2. CEYLONIN OMINAISUUKSIA... 2 2.1 Modulaarisuus... 2 2.2 Tyypit... 2 2.3 Muita

Lisätiedot

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 811122P (5 op.) 12.12.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin? Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin? 2013-2014 Lasse Lensu 2 Algoritmit ovat deterministisiä toimintaohjeita

Lisätiedot

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana Muilla kielillä: English Suomi Pong-peli, vaihe 2 Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana Laitetaan pallo liikkeelle Tehdään kentälle reunat Vaihdetaan kentän taustaväri Zoomataan

Lisätiedot

Lisää pysähtymisaiheisia ongelmia

Lisää pysähtymisaiheisia ongelmia Lisää pysähtymisaiheisia ongelmia Lause: Pysähtymättömyysongelma H missä H = { w111x w validi koodi, M w ei pysähdy syötteellä x } ei ole rekursiivisesti lueteltava. Todistus: Pysähtymisongelman komplementti

Lisätiedot

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

Tiedekunta/Osasto Fakultet/Sektion Faculty Valtiotieteellinen tiedekunta

Tiedekunta/Osasto Fakultet/Sektion Faculty Valtiotieteellinen tiedekunta Tiedekunta/Osasto Fakultet/Sektion Faculty Valtiotieteellinen tiedekunta Laitos Institution Department Politiikan ja talouden tutkimuksen laitos Tekijä Författare Author Virta, Mikko Antero Työn nimi Arbetets

Lisätiedot

.NET ajoympäristö. Juha Järvensivu 2007

.NET ajoympäristö. Juha Järvensivu 2007 .NET ajoympäristö Juha Järvensivu juha.jarvensivu@tut.fi 2007 Käännösprosessi C# lähdekoodi C# kääntäjä CILtavukoodi JITkäännös Ajettava natiivikoodi Kehitysympäristössä ohjelmoijan toimesta Ajonaikana.NET

Lisätiedot

Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta.

Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta. Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta. Vastauksia kysymyksiin Miten hahmon saa hyppäämään? Yksinkertaisen hypyn

Lisätiedot

TIE448 Kääntäjätekniikka, syksy 2009. Antti-Juhani Kaijanaho. 7. joulukuuta 2009

TIE448 Kääntäjätekniikka, syksy 2009. Antti-Juhani Kaijanaho. 7. joulukuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 7. joulukuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio Arvostelukappale

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Luento

Lisätiedot

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Graafit ja verkot Suuntamaton graafi: eli haaroja Joukko solmuja ja joukko järjestämättömiä solmupareja Suunnattu graafi: Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Haaran päätesolmut:

Lisätiedot

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Hahmon etsiminen syotteesta (johdatteleva esimerkki) Hahmon etsiminen syotteesta (johdatteleva esimerkki) Unix-komennolla grep hahmo [ tiedosto ] voidaan etsia hahmon esiintymia tiedostosta (tai syotevirrasta): $ grep Kisaveikot SM-tulokset.txt $ ps aux

Lisätiedot

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, mallintaminen ja UML 582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti

Lisätiedot

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet Koka Ryhmä 11 Juuso Tapaninen, Akseli Karvinen 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet 1 1. Taustoja Koka on Daan Leijenin ja Microsoft:n kehittämä

Lisätiedot

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest). 1 Virtualisoinnin avulla voidaan purkaa suora linkki suoritettavan sovelluksen (tai käyttöjärjestelmän tms.) ja sitä suorittavan laitteiston välillä. Näin saavutetaan joustavuutta laitteiston käytössä.

Lisätiedot

Peliteoria Strategiapelit ja Nashin tasapaino. Sebastian Siikavirta sebastian.siikavirta@helsinki.fi

Peliteoria Strategiapelit ja Nashin tasapaino. Sebastian Siikavirta sebastian.siikavirta@helsinki.fi Peliteoria Strategiapelit ja Nashin tasapaino Sebastian Siikavirta sebastian.siikavirta@helsinki.fi Helsinki 11.09.2006 Peliteoria Tomi Pasanen HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö

Lisätiedot

Osa 7: Hahmojen ohjelmointi ja hienosäätö

Osa 7: Hahmojen ohjelmointi ja hienosäätö 1 Osa 7: Hahmojen ohjelmointi ja hienosäätö Tässä luvussa käymme läpi perusohjelmoinnin alkeita. - Ensimmäisenä koduhahmon ohjelmointia. 1. Program -osiossa tapahtuu itse se koodin kirjoitus, missä määrätään

Lisätiedot

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Muilla kielillä: English Suomi Pong-peli, vaihe 3 Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Jaetaan ohjelma pienempiin palasiin (aliohjelmiin) Lisätään peliin maila (jota ei voi vielä

Lisätiedot

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen

Lisätiedot

Ampumahiihto. Hiihto. Pelihahmon piirtäminen. Jos tahdot animoida hiihtämisen, Peli muodostuu kahdesta erilaisesta osasta: ensin

Ampumahiihto. Hiihto. Pelihahmon piirtäminen. Jos tahdot animoida hiihtämisen, Peli muodostuu kahdesta erilaisesta osasta: ensin Ampumahiihto 1 Peli muodostuu kahdesta erilaisesta osasta: ensin hiihdetään ammuntapaikalle rämpyttämällä nuolinäppäimiä ja sen jälkeen yritetään ampua maalitaulut mahdollisimman nopeasti aikasakot välttäen.

Lisätiedot

Loppuraportti. Virtuaali-Frami, CAVE-ohjelmisto. Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu. Versio

Loppuraportti. Virtuaali-Frami, CAVE-ohjelmisto. Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu. Versio 1 Loppuraportti Virtuaali-Frami, CAVE-ohjelmisto Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu Versio 1.0 15.1.2006 2 Sisällys Tiivistelmä... 3 1 Johdanto... 4 1.1 Dokumentin tarkoitus...

Lisätiedot

Oppimateriaalin kokoaminen ja paketointi

Oppimateriaalin kokoaminen ja paketointi Oppimateriaalin kokoaminen ja paketointi Pekka Simola Helsinki 14.4.2004 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto

Lisätiedot

Pelimatematiikka ja ohjelmointi ATMOS, Mikkeli - 16.11.2012

Pelimatematiikka ja ohjelmointi ATMOS, Mikkeli - 16.11.2012 Pelimatematiikka ja ohjelmointi ATMOS, Mikkeli - 16.11.2012 Teemu Saarelainen, lehtori teemu.saarelainen@kyamk.fi GameLab gamelab.kyamk.fi & facebook.com/kyamk.gamelab Sisältö Miksi pelimatematiikkaa?

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen

Lisätiedot

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

Lisätiedot

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2

Lisätiedot

Board Game Lab. 7 Pelimekaniikat ja -systeemit. Materiaalit CC-BY 4.0 Mikko Lampi

Board Game Lab. 7 Pelimekaniikat ja -systeemit. Materiaalit CC-BY 4.0 Mikko Lampi Board Game Lab 7 Pelimekaniikat ja -systeemit Materiaalit CC-BY 4.0 Mikko Lampi Sisältö Alustus 1. Mekaniikat ja niiden tehtävät 2. Miten valitsen tai suunnittelen mekaniikkoja? 3. Pelimekaniikat ja -systeemit

Lisätiedot

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi Älysopimusten kehittäminen Sopimus suuntautunut ohjelmointi There are currently 5,000 blockchain developers. By 2020, we project a global need for over 500,000 - ConsenSys Älysopimus alustat q Ethereum

Lisätiedot

Taktiikan opettamisen tulee tukeutua pelaajien lajitaitoihin ja siihen, että valmentajalla on selvä kuva käyttämästään pelisysteemistä.

Taktiikan opettamisen tulee tukeutua pelaajien lajitaitoihin ja siihen, että valmentajalla on selvä kuva käyttämästään pelisysteemistä. Taktiikka yleisesti Sanalla taktiikka tarkoitetaan sitä, kuinka käytetään oman joukkueen vahvuuksia ja vastustajan heikkouksia hyväksi valmistauduttaessa otteluun sekä sen aikana valmentajan tekemiä muutoksia

Lisätiedot

Uudelleenkäytön jako kahteen

Uudelleenkäytön jako kahteen Uudelleenkäyttö Yleistä On pyritty pääsemään vakiokomponenttien käyttöön Kuitenkin vakiokomponentit yleistyneet vain rajallisilla osa-alueilla (esim. windows-käyttöliittymä) On arvioitu, että 60-80% ohjelmistosta

Lisätiedot

Kontrollilaitteet. Arsenaali

Kontrollilaitteet. Arsenaali Arsenaali Kontrollilaitteet Tietokonepeleissä käytettäviä kontrollilaitteita on valtava määrä Kaikilla alustoilla, joilla pelejä pelataan on jokin vakio kontrolleri PC: Hiiri ja näppäimistö Konsolit: Controller

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen

Lisätiedot

Kieliversiointityökalu Java-ohjelmistoon. Ohje

Kieliversiointityökalu Java-ohjelmistoon. Ohje Kieliversiointityökalu Java-ohjelmistoon Ohje 2/6 SISÄLLYSLUETTELO 1 YLEISTÄ OHJELMASTA... 3 2 PÄÄ-IKKUNA...4 3 YLÄVALIKKO... 4 3.1 TIEDOSTO... 4 3.2 TOIMINTO... 4 3.3 ASETUKSET... 5 3.4 OHJE... 5 4 VÄLILEHDET...5

Lisätiedot

Tutkittua tietoa. Tutkittua tietoa 1

Tutkittua tietoa. Tutkittua tietoa 1 Tutkittua tietoa T. Dybå, T. Dingsøyr: Empirical Studies of Agile Software Development : A Systematic Review. Information and Software Technology 50, 2008, 833-859. J.E. Hannay, T. Dybå, E. Arisholm, D.I.K.

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. lokakuuta 2016 Sisällys n tunnistin Jay : An Efficient Context-Free Parsing Algorithm. Communications of the

Lisätiedot

Kahoot - kyselytyökalu

Kahoot - kyselytyökalu Kahoot - kyselytyökalu Kahoot on pelimäinen työkalu kyselyiden, keskusteluiden ja tiedon kartoitukseen. Se on täysin ilmainen ja sitä voivat käyttää niin opettajat kuin opiskelijatkin. Kyselyitä on tarkoitus

Lisätiedot

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet

Lisätiedot

Dynaaminen kääntäminen ja Java HotSpot

Dynaaminen kääntäminen ja Java HotSpot Dynaaminen kääntäminen ja Java HotSpot Jukka Eskola Kimmo Kulovesi Tatu Säily Helsinki 11.4.2005 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö 1. Johdanto...1 1.1 JIT-kääntäjän ongelmat...2

Lisätiedot

Sukelluskeräily, Pelihahmon liikuttaminen. Tee uusi hahmo: Pelihahmo. Nimeä se. Testaa ikuisesti -silmukassa peräkkäisinä testeinä (jos) onko jokin

Sukelluskeräily, Pelihahmon liikuttaminen. Tee uusi hahmo: Pelihahmo. Nimeä se. Testaa ikuisesti -silmukassa peräkkäisinä testeinä (jos) onko jokin Versio 1.0 1 Sukelluskeräily Tässä pelissä keräilet erilaisia aarteita ja väistelet vihollista. Tämän lisäksi pelaajan pitää käydä välillä pinnalla hengittelemässä. Peliin lisätään myös häiriötekijäksi

Lisätiedot

Jypelin käyttöohjeet» Ruutukentän luominen

Jypelin käyttöohjeet» Ruutukentän luominen Jypelin käyttöohjeet» Ruutukentän luominen Pelissä kentän (Level) voi luoda tekstitiedostoon "piirretyn" mallin mukaisesti. Tällöin puhutaan, että tehdään ns. ruutukenttä, sillä tekstitiedostossa jokainen

Lisätiedot

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki Malliperustainen ohjelmistokehitys - MDE 25.9.2007 Pasi Lehtimäki MDE Miksi MDE? Mitä on MDE? MDA, mallit, mallimuunnokset Ohjelmistoja Eclipse, MetaCase Mitä jatkossa? Akronyymiviidakko MDE, MDA, MDD,

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

Lisätiedot

Impedanssitomografia-peli

Impedanssitomografia-peli Impedanssitomografia-peli Avainsanat: inversio-ongelmat, päättely, satunnaisuus Luokkataso: 3.-5. luokka, 6.-9. luokka, lukio, yliopisto Välineet: kynä, paperia, 2 pelinappulaa, 4 kolikkoa tai kolikonheittokortit

Lisätiedot

PIENI KAMPANJAKOULU. Ohjeita onnistuneen kampanjan toteuttamiseen 1 PIENI KAMPANJAKOULU

PIENI KAMPANJAKOULU. Ohjeita onnistuneen kampanjan toteuttamiseen 1 PIENI KAMPANJAKOULU PIENI KAMPANJAKOULU Ohjeita onnistuneen kampanjan toteuttamiseen 1 PIENI KAMPANJAKOULU PIENI KAMPANJAKOULU Sana kampanja on peräisin ranskalaisesta sanasta campagne ja tarkoittaa että, pyritään vaikuttamaan

Lisätiedot

S09 04 Kohteiden tunnistaminen 3D datasta

S09 04 Kohteiden tunnistaminen 3D datasta AS 0.3200 Automaatio ja systeemitekniikan projektityöt S09 04 Kohteiden tunnistaminen 3D datasta Loppuraportti 22.5.2009 Akseli Korhonen 1. Projektin esittely Projektin tavoitteena oli algoritmin kehittäminen

Lisätiedot

4. Luokan testaus ja käyttö olion kautta 4.1

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot