Eevert Saukkokoski, 7.12.2008

Studio Wars

Yleiskuva

Studio Wars on vuoropohjainen strategiapeli, jonka lähin innoittaja on Nintendon Advance Wars. Tarkoituksena on toteuttaa sekä kaksinpeli että ottelu tietokonevastustajan kanssa usean eri kenttä- ja yksikkötyypppien kyydittämänä. Peliä pelataan karttaruudulla neliökoordinaatistossa, jossa näkyvät pelaajan hallitsemat yksiköt ja muut resurssit. Yksikköä klikkaamalla tulee näkyviin ruudukko, jolta ilmenevät mahdolliset liikkumis-, hyökkäämis- tai muut kohteet, joihin pelaaja voi yksikön ohjata. Peli etenee siten, että kukin pelaaja liikuttaa vuorollaan kaikkia haluamiaan yksiköitä ja luovuttaa sitten vuoron seuraavalle.

Tekninen toteutus

Pelin käyttöliittymä toteutetaan enimmäkseen Swingillä, mutta tukena saatetaan käyttää jotakin apukirjastoa kuten LWJGL:ää.

Pelilogiikan toteuttavat luokat tehdään TDD:tä soveltaen. Testaukseen käytetään JUnitia ja testausystävällisen koodin aikaansaamiseen Googlen Guicea, mikäli tarvetta automatisoidulle dependency injection -ratkaisulle ilmenee.

Lopputuloksesta ei tule Appletia, sillä viime vuosituhannelle kuuluvan teknologian tukeminen ei innosta. Sen sijaan julkaisen Java Web Start -version, joka tuo netistä käynnistettävyyden mukavuudet ilman juurikaan huonoja puolia.

Vaikein toteutettava asia on tekoälyvastustaja. Gamasutran artikkeli tarjoaa hyvän pohjan, mutta algoritmin toteuttaminen matalalla tasolla ei tule olemaan triviaalia: algoritmi olettaa, että voidaan tehdä korkean tason havaintoja kuten "vihollisen yksikkö uhkaa tukikohtaa". Jos mahdollista, minimaxin soveltaminen saattaisi johtaa mielenkiintoisiin tuloksiin. Algoritmin pohja on kuitenkin tehtävien tunnistamisessa, priorisoimisessa ja toteuttamisessa, eikä sitä voi lähteä hienostelemaan ennen kuin aivan lopuksi.

Yksiköiden liikutteluun vaaditaan jonkinlainen reitinhakualgoritmi. Lähtökohtainen implementaatio on Dijkstran mukainen, mutta siihen tulee luultavasti pieniä optimointimuutoksia jotka ottavat huomioon yksiköiden rajalliset nopeudet.

Tärkeimpiä luokkia

Pelitilanne sisältää snapshotin kartasta ja muista tiedoista. Pelitapahtumat näkyvät aina viimeisimmässä pelitilanteessa, ja vuoron vaihtuessa pelitilanne pistetään talteen. Näin voidaan tarvittaessa kelata niin monta vuoroa taaksepäin kuin halutaan. Toisaalta voidaan vaikkapa esittää pelin päätteeksi pelin eteneminen pikaesityksenä.

Kartta sisältää tiedot maastotyyppien, yksiköiden ja muiden resurssien sijainnista. Kultakin koordinaatilta voidaan tiedustella sen maastotyyppiä ja siinä olevaa yksikköä (korkeintaan yksi ruutua kohden).

Yksikkö sisältää tiedot yksikön liikkumis-, hyökkäys- ja puolustuskeinoista. Kuvauksia ei tehdä suoraan tähän luokkaan, vaan yksikkö ainoastaan kokoaa yhteen ominaisuuksia kuvaavat oliot.

Toiminta toteuttaa annettuja komentoja kuten liikkuminen ja hyökkääminen. Huolehtii siitä että yksikön ilmoittavat kyvyt (esim. vahva hyökkäys tietynlaista puolustusta vastaan) tulevat otetuksi huomioon.

Projektisuunnitelma

Projekti on tarkoitus toteuttaa vaiheittain:

  1. Pelilogiikka, kartat (1-2kpl), yksiköt (2kpl): testaus ja koodaus (20h)
  2. Käyttöliittymän prototyyppi ja kaksinpeli (20h)
  3. Tekoäly (20h)
  4. Käyttöliittymän viimeistely; parannetut grafiikat (10h)
  5. Lisää karttoja; lisää yksiköitä (10h)

Tavoitetahti työskentelylle on 20 tuntia viikossa alkaen viikolla 50.