Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Osaatko ohjelmoida pelejä?

Sivun loppuun

kwanttitatti [02.09.2007 08:08:48]

#

Eli ketkä kaikki osaavat täällä ohjelmoida pelejä?Millä kielellä osaat?Miten opit?Itseä kiinnostaa asia kovasti mutta on hieman opas hakusessa.Jos joku sattumoisin tietää jonkun Java peliohjelmointi oppaan mielellään suomeksi voisitko pistää linkin?

TsaTsaTsaa [02.09.2007 13:03:33]

#

Osaan, olen tehnyt monta peliä, tässä muutama esimerkki:
- Tekstiseikkailu (Dossin shelliscriptinä)
- Haluatko miljonääriksi? (QB)
- Numeron arvaus (QB/VB/C++/Perl/Python/kaikki kielet joita kokeillut)
- Kivi/sakset/paperi (QB)
- Matopeli (VB)
- ASCII-tasoloikka (FB)

Oppiminen lähti siitä, kun isot pojat näyttivät, kuinka saa koneen käynnistyksen yhteydessä tulostettua ruudulle "Tappara is the best" tai jotain vastaavaa. Sittenhän piti piirrustella kaikkea "hienoa" ASCII-grafiikkaa DOS-scripteillä ja laittaa autoexec.battiin muiden koneenkäyttäjien kiusaksi. Sitten jossain vaiheessa törmäsin jossain jonkun tekemään valikkoon, josta sai näppärästi numeroa painamalla käynnistettyä halutun pelin, ja kopioin sen itselleni ja sitä soveltaen tein tekstiseikkailupelin.

Joskus kaveri näytti, kuinka QB:lla saa soitettua musiikkia, eli tutustutti minut PLAY-käskyyn. Se oli hauskaa, mutta ei sitä kauan jaksanut, takaisin .bat-ohjelmiin. Sitten meille tuli internet (olin noin neljännellä luokalla) ja
rupesin miettimään, että ehkä QB:llä voisi saada jotain muutakin aikaan ja etsiskelin joitakin oppaita ja pelejä. Oppaista en puoliakaan ymmärtänyt, mutta sain kyhättyä yksinkertaisia pelejä ja jopa Haluatko miljonääriksi -pelin! Siinä ei tosin ollut TV:stä tuttuja oljenkorsia, mutta muuten toimiva peli. QB:llä sitten yritin jotain väsätä, mutta eihän siitä mitään tullut kun en mistään mitään ymmärtänyt.

Yläasteella valitsin ohjelmointikurssin. Se oli eri perseestä. Kopioitiin C++:aa paperilta koneelle. Mitään meille ei selitetty. Siitä huolimatta asensin kotona C++-kääntäjän ja yritin tehdä jotain. Sain aikaan korkeintaan numeronarvauspelin, mutta onhan sekin toki jotain.

Lukion ohjelmointikurssi oli vastaavanlainen, mutta kielenä taisi olla Pascal (en ole ihan varma) ja käytössä joku VB:n tyylinen IDE, missä sai lyödä ohjelmaan nappeja ja kaikkia tuosta noin vain.

Lukion aikana jossain vaiheessa hommasin VB:n ja väsäilin jotain turhanpäiväistä. Sitten aloin tehdä matopeliä. Sain sen tehtyä siihen pisteeseen, että se toimi muuten, mutta mato oli vain yhden palan kokoinen eikä kasvanut ollenkaan. Se oli hieno.

Lukion jälkeen armeijaan, taukoa koodauksesta, armeijan jälkeen opiskelemaan alaa, jes. Heti ensi töikseni kun koulu alkoi, asensin VB:n ja aloitin matopeliprojektin uudestaan. Lueskelin oppaita (taisi olla putkan peliohjelmointi VB:llä tai vastaava) ja ymmärsin asioita jonkin verran paremmin. Sain tehtyä toimivan matopelin, jossa useampi pelattava taso! Sitten alkoi ohjelmointikurssit koulussa ja kielenä C++. Siellä sitä sitten tuli opittua asioita, jotka jo luulin osanneeni ja paljon muutakin. Putkassa törmäsin SDL:lään ja pitihän sitä kokeilla. Sain aikaiseksi yksinkertaisen pelin, jossa ukkoa liikutetaan sivuttain, taivaalla lentää lintuja ja hiirtä klikkaamalla ukko ampuu tulipallon ja pitää yrittää ampua lintuja. Jotain muutakin olen meinannut tehdä, mutta on jäänyt tekemättä.

Tulipa elämänkerta, kahvikin varmaan jo ihan kylmää :(

Markus [02.09.2007 14:04:02]

#

kossupullo kirjoitti:

Itseä kiinnostaa asia kovasti mutta on hieman opas hakusessa.Jos joku sattumoisin tietää jonkun Java peliohjelmointi oppaan mielellään suomeksi voisitko pistää linkin?

Kyseessä ei nyt ole Java-opas, mutta lue teoreettiseksi pohjatiedoksi (ellet jo ole lukenut) artikkelisarjani: "Kuinka tietokonepeli toimii".

Osa 1: Johdatus ohjelmoitavuuteen:
http://www.suomipelit.com/index.php?c­=naytaartikkeli&id=71&s=1

Osa 2: Fyysistä tietokonetta rakentamassa:
http://www.suomipelit.com/index.php?c­=naytaartikkeli&id=88&s=1

Osa 3: Kohti korkeampaa abstraktiotasoa
http://www.suomipelit.com/index.php?c­=naytaartikkeli&id=89&s=1

Antti Laaksonen [02.09.2007 14:10:35]

#

Pelien ohjelmoinnissa pätevät samat asiat kuin muussakin ohjelmoinnissa. Eli ei ole oikein mahdollista, että osaa kyllä ohjelmoida, mutta ei osaa tehdä pelejä. Lisäksi jos osaa tehdä pelejä yhdellä kielellä, niin osaa kyllä toisellakin.

Pelin lajista riippuu, kuinka vaikeaa sen tekeminen on. Jos ohjelmoi vaikka tietokilpailun tai korttipelin, ei pitäisi tulla ongelmia. Mutta jos peli on reaaliaikainen (esim. tasohyppely), täytyy mm. miettiä, kuinka grafiikan saa piirrettyä riittävän nopeasti ja miten ajan kuluminen ja käyttäjän näppäilyt vaikuttavat pelihahmon liikkeeseen.

Pekka Karjalainen [02.09.2007 15:15:58]

#

Markus kirjoitti:

Osa 3: Kohti korkeampaa abstraktiotasoa
http://www.suomipelit.com/index.php?c­=naytaartikkeli&id=89&s=1

Sivu 2 kirjoitti:

Tulkki eroaa kääntäjästä siinä että, se kääntää ohjelmaa lennossa sen suorituksen aikana, sitä mukaa kuin tarvitaan. Haittana tietenkin se, että ohjelman kääntäminen sen suorituksen aikana hidastaa ohjelman suoritusta valtavasti.

Ehdottaisin: Tulkki eroaa kääntäjästä siten, että se luo eräänlaisen virtuaalikoneen, jossa tulkattua kieltä suoritetaan. Haittana tietenkin on, että kaikki toiminnot, joita tulkissa ei ole valmiina, ovat tulkkauksen takia yleensä selvästi käännettyjen ohjelmien toimintoja hitaampia.

(Esim. merkkijonon kääntäminen takaperin voi Pythonissa olla suunnilleen yhtä nopeaa kuin C-kielessä, jos se vain kutsuu C-kielistä funktiota tulkin sisällä.)

Sivu 2 kirjoitti:

Tulkkaamisen hitauden vuoksi tulkattavia kieliä ei käytetä juuri pelien tekoon.

Aika moni pelintekijä käyttää jotain tulkattavaa kieltä ja C++:aa pelien tekoon. Esimerkiksi EVE Online tai Civilization IV käyttävät Pythonia. Hitaus ei ole ongelma, kun koko peliä ei tehdä tulkattavalla kielellä.

Ehdottaisin vaikkapa, että sanoisit, ettei pelkällä tulkatulla kielellä voi tehdä suorituskykyä vaativaa peliä. Ne ovat hyviä aputyökaluja myös pelien tekijöille, mutta kieli kuten C++ tarvitaan tekemään tehokkuutta vaativat osat.

Sivu 2 kirjoitti:

Funktionaaliset ja logiikkakielet - - [on] lähinnä tarkoitettu tiettyihin erityistarkoituksiin. Kyseiset kielet ovat lisäksi usein miten tulkattavia

On olemassa yleiseen käyttöön suunniteltuja funktionaalisia kieliä. Usein näihin kieliin on saatavilla sekä tulkattu toteutus nopeaan ohjelmankehitykseen, että kääntäjä lopullisen julkaisuversion tekoon.

Lisäksi myös C++ on funktionaalinen kieli, jos käyttää sopivaa kirjastoa: http://www.cc.gatech.edu/~yannis/fc /

Ehdotus: Funktionaaliset ja logiikkakielet eivät ole suosittuja muutamia erikoisaloja lukuunottamatta. Yleensä niiden kääntäminen tehokkaaksi konekieleksi on vaikeaa, ja kääntäjät eivät ole yhtä tehokkaita kuin C- tai C++-kielissä.

(Voi näillä kielillä pelejäkin tehdä -- ja onkin tehty --, mutta ei kaupallista tasoa vielä. Erikoisaloja ovat mm. toisten funkkiskielten kääntäjien tekeminen ja pankkiala.)

Jos vielä joku protestoi, voit sitten viitata vaikkapa Aliothin benchmark-tilastoon, jossa sekä C että C++ ovat jonkin verran edellä mm. Clean-kääntäjää ja yleensäkin kaikkia kisaan osallistuvia funkkiskieliä. (Clean on laiska funktionaalinen ohjelmointikieli, joka yleensä pärjää luokassaan parhaiten perus-benchmarkeissa.)

Eipä ole virheellisiä väittämiä jutussa sitten. Joten, tässä olivat nöyrät korjausehdotukseni. Funkkiskielten nimittäminen outolinnuiksi oli minusta hauskaa :-)

Alioth: http://shootout.alioth.debian.org/

tkarkkainen [02.09.2007 16:03:46]

#

Markus kirjoitti:

Kyseessä ei nyt ole Java-opas, mutta lue teoreettiseksi pohjatiedoksi (ellet jo ole lukenut) artikkelisarjani: "Kuinka tietokonepeli toimii".

Kirjoituksesi menevät mielestäni otsikon vierestä. Parempi otsikko olisi "Kuinka tietokone toimii".

lainaus:

Osa 2: Fyysistä tietokonetta rakentamassa:
http://www.suomipelit.com/index.php?c­=naytaartikkeli&id=88&s=1

Aika moni elektroniikkaan liittyvä asia on pielessä.

Sivu 2 kirjoitti:

Diodeista voidaan kasata ns. loogisia portteja. Ne ovat johtimien välisiä liittimiä, joissa on yksi ulostulo, ja yksi tai useampi sisäänmeno. Se tuleeko portista ulos virtaa, vai ei, riippuu jonkin logiikan mukaan siitä, kuinka moneen sen sisäänmenoon menee virta.

Ensinnäkin käytännön mikropiireissä portit kasataan yleensä diodien sijaan transistoreista. Diodeista ei nimittäin voida rakentaa NOT-porttia, jolloin logiikkaperhe jää vajaaksi. Lisäksi signaalit tuppaavat vaimenemaan jo muutaman portin jälkeen.[ Wikipedia ]


Toisekseen ykkösten ja nollien ilmaisuun ei niinkään käytetä virtaa vaan jännitettä. Johtimen päihin tuotu jännite kyllä aiheuttaa virran, mutta se on tässä tapauksessa sivutuote, jolla ei niinkään ole väliä. Virta yritetään pitää pienenä esimerkiksi tehonkulutuksen minimoimiseksi.

jlaire [02.09.2007 16:15:53]

#

En ohjelmoi pelejä, ongelmanratkaisu ja tekoälyt kiinnostavat paljon enemmän. Jos tulee joku peli väsättyä niin se on sitten Rubikin kuutio, miinaharava tai joku muu vastaava.

Kopeekka kirjoitti:

Jos vielä joku protestoi, voit sitten viitata vaikkapa Aliothin benchmark-tilastoon, jossa sekä C että C++ ovat jonkin verran edellä mm. Clean-kääntäjää ja yleensäkin kaikkia kisaan osallistuvia funkkiskieliä. (Clean on laiska funktionaalinen ohjelmointikieli, joka yleensä pärjää luokassaan parhaiten perus-benchmarkeissa.)

Noissa tilastoissa on vaan se huono puoli, että tuloksiin vaikuttaa paljon myös se, miten hyvin koodit on optimoitu. Esimerkiksi C ja C++ ovat niin yleisiä, että niiden ratkaisut ovat luultavasti todella hyvin tehtyjä, mutta joillain kielillä saattaa olla vain jotenkuten toimivia virityksiä. Kyllä tuolta saa ihan hyvän kuvan eri kielien tehokkuudesta, mutta ihan sokeasti ei kannata luottaa tuloksiin.

Dude [02.09.2007 16:31:21]

#

Mä oon ainaki jotai pelejä teheny. Tuliki tänään yks irean alaku peliin.

Pekka Karjalainen [02.09.2007 22:04:38]

#

funktio kirjoitti:

Kopeekka kirjoitti:

Jos vielä joku protestoi, voit sitten viitata vaikkapa Aliothin benchmark-tilastoon, jossa sekä C että C++ ovat jonkin verran edellä mm. Clean-kääntäjää ja yleensäkin kaikkia kisaan osallistuvia funkkiskieliä. (Clean on laiska funktionaalinen ohjelmointikieli, joka yleensä pärjää luokassaan parhaiten perus-benchmarkeissa.)

Noissa tilastoissa on vaan se huono puoli, että tuloksiin vaikuttaa paljon myös se, miten hyvin koodit on optimoitu. Esimerkiksi C ja C++ ovat niin yleisiä, että niiden ratkaisut ovat luultavasti todella hyvin tehtyjä, mutta joillain kielillä saattaa olla vain jotenkuten toimivia virityksiä. Kyllä tuolta saa ihan hyvän kuvan eri kielien tehokkuudesta, mutta ihan sokeasti ei kannata luottaa tuloksiin.

Se on ihan totta. Benchmarkit ovat hauska leikki, mutta ei niitä kannata ottaa tosissaan.

Kuitenkaan, eihän minulla ole mitään tarvetta perustella funktionaalisen ohjelmointityylin merkitystä. Google teki sen jo omalla outolinnullaan MapReducella. [1]

Oli vain niin hassua lukea, että pelejä tehdessä ei käytetä tulkattuja kieliä, kun juuri olin lukenut siitä, miten niitä käytetään. Lua ja Python ovat erityisesti pelintekijöiden suosiossa, ja melkein voisi sanoa pelialasta kiinnostuneille, että jompi kumpi kannattaa opetella heti C++:n jälkeen. Varmasti niistä on enemmän hyötyä kuin haittaa.

No, enpä kirjoita aiheesta enempää.

[1] http://labs.google.com/papers/mapreduce.html


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta