|
Linux-kurssin projekti-ehdotus:
prototyyppi moninpelattavasta reaaliaikaisesta strategiapelistä
Muunnelma moninpelattavasta formulapeli-ehdotuksesta.
Perusajatus
Reaaliaikainen moninpelattava 2D strategiapeli, tyyliin Dune, Total
Annihilation, jnejne.
(Sellaisia ei linuxille taida olla yhtään, korkeintaan jotain
puolivalmiita projekteja.)
Tarkoituksena ei ole tehdä täydellistä julkaisukelpoista peliä,
koska sellaista ei tässä ajassa ehtisi tehdä, vaan vain aivan
välttämättömät perusominaisuudet sisältävä prototyyppi.
Jäsenet
- Marko Grönroos (magi@iki.fi)
(Projektia ei vielä ole hyväksytty, eikä päätetty toteutettavaksi
ennen kuin riittävä määrä, eli vähintään kolme pystyvää osallistujaa
on kasassa).
Peruspiirteet
- Kenttä N*M peliruutua.
Kommentti: Tavallaan olisi hienoa, jos kenttä olisi ruuduton, mutta
karkean ruudukon käyttö helpottaa monia asioita (kenttien teko,
reitinetsintä, AI, jne.). Jos (eli kun) yksiköiden halutaan
liikkuvan "pehmeästi" ruutujen välillä, se lienee helppoa
toteuttaa.
- Jatkuva (eli ei diskreetti) aika. Tästä voidaan tinkiä,
esimerkiksi käyttämällä korkearesoluutioista diskreettiä aikaa.
- Kentän ruudut voivat olla eri maastoja, ainakin
avoin ja läpikulkematon. Muut maastot
laajennuksia.
Kommentteja: Maastoilla voi olla toissijaisia ominaisuuksia, kuten
materiaali, kovuus, jne. Maasto voitaisiin määritellä osittain
3D:ksi siten, että ruuduilla on
korkeus-attribuutti. Yksinkertaistus-optio: ei maastoa lainkaan,
jolloinka FOV-algoritmi (kts. alla) yksinkertaistuu.
- Taisteluyksiköitä voi olla monia erilaisia, aluksi
kuitenkin vain kaksi: tankki ja rakentaja.
Yksiköiden liikuttelu mahdollisimman triviaalisti (ei mitään
kehittynyttä reitinetsintää): GUI:ssa hiirellä klikataan yksikköä,
dragataan määränpäähän, ohjelma näyttää siirtolinjan, tai virheen,
jos ei onnistu.
- Pelissä on rakennuksia. Alussa kuitenkin vain kaksi:
tehdas ja puolustustorni. Puolustustorni rakennetaan
rakentajalla, valitsemalla sen valikosta ko. rakennus.
- Liikkuvia taisteluvaunuja ja rakentajayksiköitä
valmistetaan tehtaassa. Rakentajayksikkö valmistaa
puolustustorneja ja tehtaita.
- Ammukset ovat erillisiä olioita, joiden käsittely
erikseen. Alkuversiossa vain yksi ammustyyppi: laser (helppo
toteuttaa).
- Rakennukset, yksiköt, aseet ja ammukset määritellään
tekstimuotoisissa konfiguraatiotiedostoissa. Vrt. Total
Annihilaation yksikkökonfigurointi.
- Resurssienkäsittely voisi alussa olla 'dummy', eli resursseja
saadaan tasaista vauhtia.
- Tässä protoversiossa koko kartta olisi kaikille näkyvä,
tyyliin xpilots. Myös GUI:n grafiikka olisi triviaalia,
esim. vektoripalloja, -kolmioita, jne. Tai bitmappeja, jos yhtä
helppoa.
- Toteutuskieli C++. Peruskirjastoina joko ei mitään tai Qt (MagiClib on
myös käytettävissä). GUI-kirjastona Qt + kdelib.
Rakenne
Peli jakaantuisi seuraaviin funktionaalisiin osiin:
- Peruskirjasto
- sisältää palvelimelle ja asiakkaille yhteiset tietorakenteet
- jotkin osat, kuten yksiköiden, rakennusten ja aseiden
funktionaalisuus mahdollisesti dynaamisesti ladattavina moduleina
- kommunikaatio
- havaintosysteemi, joka kertoo olioille, mitä ne "näkevät"
- sisältää ohjelman "monimutkaisimman" algoritmin, joka tutkii
käyttäen Korkeaa Matematiikkaa, mitkä oliot näkevät toisensa.
No, FOV voidaan ehkä toteuttaa jotenkin triviaalistikin.
Tätä algoritmia tarvitaan myös ammusten käsittelyyn.
- perus-maastot, -yksiköt, -rakennukset, -aseet, -ammukset
- Palvelin
- maailman ja yksiköiden välinen vuorovaikutus
- kommunikaatio asiakkaiden välillä
- Asiakasohjelma
- GUI toteutettuna Qt:llä + mahd. KDE-laajennuksilla (varmaan
KDevelop-IDE:llä). Periaatteessa voinee toteuttaa myös Gtk:lla,
jos GUI:n tekijä ehdottomasti haluaa.
- yksiköiden liikkuminen voisi hätätapauksessa olla ruuduittain
hyppivääkin, mutta pikselitason smooth-siirrot olisivat hyvä
juttu.
- Jokin triviaali äänituki
- Tämä pitäisi voida olla myös esimerkiksi ulkoinen AI, tms.
- Toteutus mahdollinen vasta ydinkoodin ja serverin
perustoiminnan hahmotuttua.
Kunnollisista synkronisoinneista ja latensseista ei tässä välttämättä
kannattaisi välittää, sillä niiden ongelmien ratkaiseminen voi olla
liian työlästä.
Muuta
- Henkilömäärä: 3-6
- peruskirjasto (oliot, rajapinnat, kommunikaatio): 2-3
- palvelin: 1-2
- GUI: 1
- ylimääräiset maasto-, rakennus-, yksikkö- ja asemodulit: 0-1
- dokumentaatio: 0.25
- Vaatimustaso tekijöille on: C++:n hyvähkö osaaminen ja
kokemusta, Unix/Linux-ohjelmointikokemusta (esim. socketit,
jne). GUI:n tekijälle Qt-osaaminen olisi hyvä juttu. Projekti on
vaativa, erityisesti ydinosiensa osalta.
- Rakenteellisia vihjeitä kannattaa ottaa joistain
olemassaolevista moninpelattavista peleistä, kuten xpilots, jne.
- Varmaankin CVS-kehitys.
- Työnimenä vaikka WarWorld, tms.
Last modified: Fri May 16 03:35:49 EEST 2003
|