Tästä on varmasti jo monta aihetta, mutta haluan saada itselleni vielä varman vastauksen kysymykseen.. Eli olen kiinnostunut peliohjelmoinnista, joten mistä kannattaisi lähteä liikkeelle, eli millä ohjelmointikielillä pelejä ohjelmoidaan? Olen lähtenyt liikkeelle lukemalla C++ opasta, mutta odotan teiltä vielä vastausta.
Toivottavasti ei aivan väärään paikkaan mennyt tämä viesti..
Opettele kieli kunnolla, opettele DX/OGL, opettele lukiomatematiikka. :)
Pidempää ohjeistusta; Kun C++ on hanskassa, suosittelen siirtymistä esimerkiksi ensin SDL:n pariin (oppaita löytyy mm. täältä putkasta, samoin koodivinkeissä on monia esimerkkejä) ja sitten OGL:n pariin, joka on hyvin dokumentoitu ja suhteellisen helppo oppia - http://nehe.gamedev.net/ on aloittelijaystävällinen paikka, tosin kannattaa varoa tiettyjä vanhentuneita asioita, joita kyllä pyritään korjaamaan, kuten etusivulla olevista uutisista käy ilmi.
Mikäli ei ole ihan selvää:
SDL on kirjasto, jolla onnistuu mm. näppäimistön lukeminen, näyttötilojen asettaminen, 2D grafiikan piirto ja vastaavat pikkujutut. Se on melko helppo ymmärtää.
DX on Windowsille oleva kirjastohärpäke, josta löytyy näppäimistöjutut, näyttötilojen asetus, musiikin soitto ja tärkeimpänä 2D-graffan lisäksi tuet näyttiksen 3D-kiihotuksille.
OGL on vain grafiikan (2D, 3D) piirtoon tarkoitettu kirjasto - Mutta porttautuva, toisinkuin DX. Ja joidenkin (kuten itseni) mukaan helpompi oppia.
Mutta tärkeintä peliohjelmoinnissa lienee loppujen lopuksi matematiikka. Ja kirjastoja on turha katella jos ei oman kielen perusasiat ole hanskassa.
EDIT: Vastaus alkuperäiseen kysymykseen: Pelejä voi ohjelmoida lähes kaikilla kielillä, nykyään käytetyimpiä lienee C++. Muitakin kieliä näkee, toki. Mutta kieli ei minusta ole se tärkein asia, vaan kirjastot + matematiikka. Lähes millä tahansa järkevällä kielellä voi ohjelmoida "kunnollisia" pelejä.
Opettele matematiikkaa ja logiikkaa. Niitä tarvitaan varmasti.
Suunnittele peli kunnolla, päätä selkeästi kaikki perusasiat kuten kuvakulma ja tarvittavat ominaisuudet yleisellä tasolla. Harkitse tarkasti ja ole varma päätöksistäsi tähän asti. Suunnitelmaan voivat kuulua vaikkapa tällaiset asiat: "Objektit törmäävät paikallaan oleviin seiniin ja muihin liikkuviin esineisiin. Ne voivat törmätessään kimmota, aiheuttaa vahinkoa toisiinsa tai (toisen ollessa hahmo) tulla poimituiksi. Kaikkiin objekteihin vaikuttaa painovoima. Objektit noudattavat dynamiikan peruslakeja." Vieläkin tarkemmin kannattaa suunnitella, ja ohjelmointivaiheessa kannattaa pitää suunnitelma mielessä, jottei koodaa itseään umpikujaan.
Valitse sopivat kirjastot (grafiikka, äänet, ...) ja tutustu niiden perusominaisuuksiin ja yhteensopivuuteen kunnolla esimerkiksi Wikipedian ja kirjaston oman esittelyn ja FAQ:n avulla. Valitse näin vaikkapa muutama lupaavalta vaikuttava vaihtoehto, jotka tuntuvat kuvauksen perusteella sopivan tarkoituksiisi. (Huomaa: kuvausten, ei koodiesimerkkien! Tässä vaiheessa olennaista on tietää, mitkä tehtävät kirjasto voi hoitaa.) Harkitse tarkoin ja joka kantilta, mitä tarvitset, esimerkiksi millaisia graafiikka- ja ääniominaisuuksia pelissä tarvitaan. Valitse kirjastoja, jotka riittävät mutta jotka eivät ole liikaa.
Valitse kieli. C++ on toki varma valinta, muttei muitakaan kannata sulkea pois. Tarkista kirjastojen saatavuus ja opettele niiden perusasiat. Tässä vaiheessa voit vielä vaihtaa kieltä, jos kirjastoa ei löydykään, tai kirjastoa, jos se ei miellytä.
Sitten koodaamaan, ja järki mukaan!
Tämän sepustuksen keskeinen ajatus: ensin kunnon suunnitelmat loppuun asti, ennen ei riviäkään koodia (oikeaa; toki kieltä saa harjoitella ja kirjastoihin tutustua, ja myös yleispätevät apufunktiot hyväksyttäköön, siis sellaiset, jotka voisi lähettää koodivinkkeinä Putkaan).
Latasin tuon Dev-C++ kääntäjän ja -ohjelmistoympäristön. Versio 5 beta. Oliko hyvä valinta vai onko jotakin parempaa ilmaista tiedossa? Pitää kirjastosta käydä lainailemassa oppaita jne. Kiitos.
Jon31 kirjoitti:
Latasin tuon Dev-C++ kääntäjän ja -ohjelmistoympäristön. Versio 5 beta. Oliko hyvä valinta vai onko jotakin parempaa ilmaista tiedossa? Pitää kirjastosta käydä lainailemassa oppaita jne. Kiitos.
Tarpeeksi hyvä.
Suosittelen ohjelmointiputkan omaa C- ja SDL -opasta.
Eroaako nuo C++ -oppaat paljonkin toisistaan "käytännöissään", kun katselin esim. ohjelmointiputkan opasta ja kahta muuta opasta: http://www.nic.funet.fi/c opas/ ja http://fi.wikibooks.org/wiki/C++/Moderni_C++ , niin materiaali näytti poikkeavan toisistaan siinä mielessä, että toisessa oppaassa käytettiin tekstin tulostamiseen pelkkää "cout" (määritystä, tai mikä lie) ja toisessa taas tämä ilmaistiin "std::cout" ja ohjelmointiputkassa oli vielä joku eri tapa.. Miksi näin? Kiitosta. Pitää alkaa opiskelemaan:)
Tuo ei ainakaan ole suuri ero.. std on vain käytettävä nimiavaruus, jonka voi korvata kirjoittamalla ohjelman alkuun
using namespace std;
Jon31 kirjoitti:
Eroaako nuo C++ -oppaat paljonkin toisistaan "käytännöissään", kun katselin esim. ohjelmointiputkan opasta ja kahta muuta opasta: http://www.nic.funet.fi/c opas/ ja http://fi.wikibooks.org/wiki/C++/Moderni_C++ , niin materiaali näytti poikkeavan toisistaan siinä mielessä, että toisessa oppaassa käytettiin tekstin tulostamiseen pelkkää "cout" (määritystä, tai mikä lie) ja toisessa taas tämä ilmaistiin "std::cout" ja ohjelmointiputkassa oli vielä joku eri tapa.. Miksi näin? Kiitosta. Pitää alkaa opiskelemaan:)
"Hassun Hauska C++" opas on auttamattoman vanhentunut ja Ohjelmointiputkassa ei ole C++-opasta, vain C-opas. Suosittelen sitä C-opasta, jonka jälkeen C++ on vähän helpompi sisäistää - Siinä kun toimii suurin osa C:n ominaisuuksista ja syntaksi on sama C:n osalta. C++ vain tuo joitakin uusia asioita kuten oliot.
Minusta "Päivi Hietasen C++ ja olio-ohjelmointi"-kirja on laadukas. Löytynee kirjastostasi. Ehkä. :)
Ei kannata alussa liikaa tuosta kielestä huolehtia, C++ on ihan hyvä valinta. Kuten on moneen kertaan todettu, kun yhden kielen osaat, niin toisen opettelu on jo huomattavasti helpompaa.
Tosiaan opettele sen valitsemasi kielen perusasiat hyvin, tee niitä kirjojen tehtäviä, vaikka tuntuisivatkin tylsiltä/helpoilta. Helpommin ne asiat sinne päähän siirtyy ja jää tekemällä kuin vain lukemalla.
Osoitteesta http://www.cplusplus.com/ löytyy mukavasti infoa opiskelun ja ohjelmoinnin tueksi. Kannattaa käydä katsastamassa.
En ole peliohjelmoija, mutta heidän kertomuksiaan kuunneltuani olen saanut käsityksen, että C++ on aika lailla pakollinen kieli menestyvälle pelintekijälle. Sitä ei voi välttää, jos ikinä haluat tehdä pelin, jota voidaan pelata useammalla alustalla; esim. yleisillä konsoleilla. Muilla kielillä tehtyjä pelejä ei yksinkertaisesti voi siirtää kaikille alustoille yhtä hyvin.
Tämä tarkoittaa, että jää $$$ saamatta myynnistä, eikä koko projekti ehkä alun perinkään saa rahoitusta. Toisin sanoen, ei tuu peliä, jää vain haave.
Erityisillä alustoilla (kuten kännyköissä ja taskukoneissa) käy kieleksi Java. Jos joku tietää menestyneistä pöytäkonepeleistä Javalla tai C#:lla, pyydän kertomaan meille kaikille (luulisi sen olevan mahdollista, en vain ole seurannut alaa tarkasti). Nettiin tehdään pelejä Flashilla, kuten varmasti hyvin tiedät. Harrastelijana (joka olet, jos et aio tehdä peleilläsi rahaa) taas voit valita minkä tahansa kielen, joka toimii kohderyhmäsi koneissa, ja soveltuu jotenkin pelin tekoon. En tiedä, haluatko alan ammattilaiseksi vakavissasi, mutta jos haluat, lisää tietoa saa parhaiten muilta alan ammattilaisilta.
Ennen oli yleinen kieli C, ja sitä ennen assembly. Vielä 1990-luvulla tehtiin assemblylla kokonaisia pelejä, mutta nykyään se on harvinaista. Esim. joku laaja 90-luvun lentosimu (hatara pää unohti jo nimen) oli kokonaan asmia, ja se oli silloin menestyvä peli. Nykyään käsitys on, että C++ lisää sen verran ohjelmoijan tuottavuutta, että se on näitä kahta parempi valinta myös pelialalla. Tarpeen mukaan voi osia tehdä assembyllakin, jos todella tarvitsee sitä. C++ taas tarvittaessa toimii olennaisesti samalla tavalla kuin C. Toisaalta nykyään eräiltä huipputason pelintekijöiltä kuulee, että "we never use assembly" (Tim Sweeney [1]).
C++:n lisänä käytetään erinäisiä skriptikieliä, kuten Pythonia tai Luaa. Civilization IV on osittain tehty Pythonilla ja WoW:n skriptaajat tuntevat Luan hyvin. Näillä kahdella on paljon muitakin käyttäjiä, ja jotkut firmat tekevät omat kielensä skriptaustarkoituksiin. Pari firmaa, kuten Naughty Dog, on myös käyttänyt Schemeä ja Lispiä kehitysprosessin apuna, mutta tämä taitaa olla verraten harvinainen valinta tällä alalla. Oleellistahan on, että apukielenä voi käyttää mitä tahansa, mitä itse osaa tehokkaasti soveltaa. Lopullisessa tuotteessa C++ on tarpeen yllä mainituista syistä.
Mielestäni Python on aika hyvä tapa aloittaa peliohjelmointi, koska siihen saa hyviä kirjastoja, ja se on helpohko oppia. Pygame tai Pyglet käyvät hyvin opetteluun, ja niillä voi saada aika hyvääkin jälkeä aikaiseksi. Pythonin tehot eivät nykyisellä toteutuksella kuitenkaan riitä tekniseltä tasolta huipputason pelin tekemiseen. Jos haluat monen monituista örkkiä ruudulle kerralla ja näyttävät 3D-grafiikat, C++:n tasoinen tehokkuus on välttämätön. Et kuitenkaan osaa tehdä näitä ekaan peliisi, joten Pythonista on siksi täysin mahdollista aloittaa.
Pelin suunnittelun ja ohjelmoinnin lisäksi jonkun pitää tehdä grafiikka, äänet ja musiikki peliisi, sekä jonkun pitää markkinoida ja myydä sitä. Luultavasti et yksin selviä koko tästä urakasta, joten kannatta keskittyä oppimaan jokin oleellinen kokonaisuus tästä ja valmistautua maksamaan palkkaa muille siitä, mitä he tekevät sen oikean myytävän pelisi eteen sitten joskus; sitten joskus tarkoittaa aikaa, kun olet tarpeeksi taitava tekemään sen huippupelisi hyvin. Älä hoppuile heti kaikista haastavimpien projektien kanssa, sillä kaikkien pitää aloittaa perustasolta. Kuuluisa iD Softwarekin on tehnyt joskus shareware-tasohyppelypeliä (Commander Keen!) ihan vakavissaan ennen Doomeja ja Quakeja.
Loppumiete: Ota mallia niistä, jotka tekevät pelejä samalla tavalla kuin itse haluat oppia tekemään. On myös monta vähemmän 3D-räiskintöihin verratuna julkisuutta saavaa peligenreä, kuten puzzlepelit, joista voit löytää sen omimman alueesi.
[1]: "The Next Mainstream Programming Languages" (huom! PDF) http://www.st.cs.uni-sb.de/edu/seminare/2005/advanced-fp/docs/sweeny.pdf
Pekka Karjalainen kirjoitti:
lisäksi jonkun pitää tehdä grafiikka, äänet ja musiikki peliisi
Rogueliket? Mudit? Tekstiseikkailut?..
-Grey-
No ei siin aluks tarvii olla mitään hienoja musiikkeja ja kuvia, kunhan saa grafiikan piirron toimimaan sun muut ekaks... :P
Grey kirjoitti:
Pekka Karjalainen kirjoitti:
lisäksi jonkun pitää tehdä grafiikka, äänet ja musiikki peliisi
Rogueliket? Mudit? Tekstiseikkailut?..
-Grey-
Ei mitkään näistä, vaan kyseessä olivat vain kaupalliset pelit. Mainitsemasi kaltaiset pelit, vaikka mukavaa ajanvietettä ovatkin, eivät ole niitä, jotka nykyään myyvät, valitettavasti. Onhan se epähienoa puhua rahasta, menestyksestä tms. vulgaarista, mutta suomalainen peliteollisuus saa aikaan melko isoja myyntilukuja verrattuna esim. musiikkiin, joten se kyllä ansaitsisi enemmän huomiota mediassa. Varsinkin kun aika yksinkertainenkin tietokonepeli on juoneltaan IMHO kiinnostavampi kuin tyypillinen keskinkertainen Hollywood-elokuvaräpellys, joka sisällönsä puolesta lienee suunnattu heikkopäisille (ei lapsille ainakaan, koska silloin niissä pitäisi olla viisivuotiaan mielestä järkevä juoni). :D
Niin ja.. joku sen fontin siihen tekstikonsoliinkin muuten on tehnyt :)
# # # # # # . . $ $ $ # . @ . . D # . . . . . #
"Hui, lohikärmes!"
Jos lopetan viestini vakavasävyisesti, niin todettakoon, että omaa peliä tehdessä ei sitä grafiikkaa tosiaan heti tarvita. Voi tehdä hyvän pelin, josta tulee hieno sitten, kun siihen hankkii sen asianmukaisen grafiikan myöhemmin. Pelattavuus on päivän sana, joka päivä.
Sitä minäkin, ensin "moottori" kuntoon ja sit siihen niit graffoja ja ääniä.. :P
vehkis91 kirjoitti:
Sitä minäkin, ensin "moottori" kuntoon ja sit siihen niit graffoja ja ääniä.. :P
Lisättäköön tähän vielä että kunnon idea (tarina/juoni?), sillä ilman sitä hienoakaan peliä ei jaksa pelata. :)
Kun alkaa hahmottua se oma hyvä osaamisalue, niin joko rakentaa yksin jotain pientä, tai kasaa pienen porukan (kuten me kavereiden kanssa tehtiin) ja jaettiin tehtävät. Näin ei tarvitse ohjelmoijan tehdä musiikkia ja syntikkakeisarin ei tarvitse miettiä partikkeleita ja matriiseja (paitsi muutamissa vst-synissa, mutta se on jo toinen asia).
Eli etsi se oma osaamisalueesi ja treenaa myös muita alueita, koska ei siitä voi olla haittaa.
Kielistä suosittelen kliseisesti C++:aa ja C:tä. On tietysti muitakin loistavia kieliä, mutta nuo on semmoisia, joista on varmasti hyötyä, jos oikein alalle tahtoo.
Olen lukenut läpi pari c++ opasta ja tehnyt niiden harjoitustehtävät onnistuneesti, tajunnut kaiken ja muistiinki jäänyt melekeimpä kaikki jne. Lainasin myös tuon "Päivi Hietasen C++ Olio-ohjelmointi" kirjan ja olen sitä lueskellut. (100s. from 700s. huolella) Pitää tuo koko kirja lukea ja sitten vielä kerrata läpi uudelleen, mutta nyt on sellainen pieni perustieto jo päässä..
Ajattelin, että kannattaisiko harjoitella välillä SDL -kirjaston käyttöä tässä sivussa.. (onko suomenkielisiä oppaita muualla, kuin ohjelmointiputkassa?)
Ja sitten kun SDL opittu, niin OGL vai prjäiskö pelkällä tuolla SDL:llä, kun haluaisin vain testailla käyttöä jne..?
Onko tuo DX oma kirjastohärpäkkeensä vai liittyykö se jotenkin OpenGL:ään ja pitäisikö sekin opetella? Vai pärjääkö pelkällä SDL ja OGL:n käytöllä? (tietenkin riippuu tarpeista, mutta onko siitä nyt niin montaa uutta ominaisuttaa..?)
En ole nyt mitään peliä tekemässä, tekisi mieli vain testailla noita kirjastoja ja niiden käyttöä jne, sitten kun c++ paremmin hallussa..
Dx ei _todellakaan_ liity opengl:n muulla tavoin kuin että ne ovat kumpikin grafiikkakirjastoja(tosin dx on hieman muutakin)
dx on täysin microsoftin kehittämä ja nykyisin(dx10 eteenpäin ilmeisesti) windowsiin sisään rakennettu, ja kaiken lisäksi yhteensopimaton minkään muun kuin windowsin kanssa.
opengl on taas open source -menetelmällä kehittyvä ilmaiskirjasto(se on hyvä, älä anna ilmaisen hämätä) mikä taas on yhteensopiva miltei kaikkien linux distrojen, maccien, winukoiden + kymmen muun alustan kanssa
opengl:stä sen verta että sillä on monen kinuxillekkin julkaistun uutuuspelin grafiikat hoidettu, ja ellen ihan väärin muista wow:in mac versio pyörii opengl:llä
sitten kun luin kysymyksen hieman tarkemmin, niin vastaus varsinaiseen kysymykseen:
sdl+opengl riittää paremmin kuin hyvin, esim. siinä missä sdl käyttää muutaman koodirivin kuvan piirtämiseen, dx vaatii 10-20 ikkunan luomiseen..
tältä kannalta sdl on aloittelija ystävällisempi, mutta toisaalta ei opengl:kään ihan vähittä riveittä selviä..
joten siis tiivistettynä kannattaa aloittaa sdl:stä(itsellä on kokemusta, yritin aloittaa directx:stä, mutta luovutin ja aloin tutustumaan sdl:llään)
tässäkin siis paljon omaa mielipidettä, saa vapaasti olla erimieltä, ja tietysti jos joku valtavan virheen huomasi, voi korjata ;)
Kannattaa muistaa ettei nykyaikana tarvitse osata c++:aa ohjelmoidakseen pelin.
On olemassa monia pelinteko-ohjelmia ja mikkihiiri-kieliä, esim. Adoben Flashillä saa nopeasti pelin aikaiseksi ilman mitään suurempaa enginen koodailua (ääni, graffa ja animaatiorajapinta löytyy). Pelinteko-ohjelmilla ja näillä mikkihiiri-kielillä ei tietenkään mitään seuraavaa WOWia koodata, mutta niillä pääsee oikeasti nopeasti asian ytimeen.
Menestyvistä peliohjelmoijista en tiedä, mutta kyllä sitä esim. flashillä pärjää melko pitkällekin ihan coffe-break/casual pelien koodailussa.
Peliohjelmointi -aiheeseen hieman liittyen Juuso "Jusso" Hietalahden kirjoituksia:
http://www.gameproducer.net/2007/04/06/are-you-a-game-developer-or-game-engine-developer/
http://www.gameproducer.net/2007/04/15/are-you-a-game-developer-or-game-engine-developer-take-2/
Jon31 kirjoitti:
Ja sitten kun SDL opittu, niin OGL vai prjäiskö pelkällä tuolla SDL:llä, kun haluaisin vain testailla käyttöä jne..?
Moni ohjelmoija on pärjännyt ihan hyvin, vaikka ei tiedä kummastakaan kirjastosta yhtään mitään. Saatat tälläkin hetkellä käyttää jonkin tällaisen ohjelmoijan tekemää ohjelmistoa.
Ei ole kovin mielekästä opetella rajapintoja, jos sinulla ei ole mitään oikeaa projektia, mihin aiot niitä käyttää. Tekemällä oppii soveltamaan, mikä on aika oleellinen osa ohjelmointitaitoa.
Jos pelien teko kiinnostaa, niin tee pelejä. Ei se ole häpeä aloittaa Tetriksestä tai Suutaan aukovasta miehestä (pakupaku-man alkuperäiskielellä). Kun sinulla on joku pieni peliprojekti tai pari tehtynä, osaat itsekin jo ottaa selvää, mitä hyötyä eri pelikirjastojen, rajapintojen, engineiden yms. opettelusta olisi. Mutta emme me täällä Putkassa voi päättää, mitä sinä haluat ohjelmoida. Se on sinun asiasi.
Jos haluat aloittaa helposta päästä, lue tämä. Ensin tietenkin putkan QBasic-opas.
ftp://ftp.idsoftware.com/idstuff/source/quake3-1.32b-source.zip
Tuolta löytyy Quake3 (id Tech 3) pelimoottorin lähdekoodit, jonka avulla pystyy tekemään vaikka mitä jos vaan taitoa löytyy. Ja siitä saa varmasti apua, kun suunnittelee omaa moottoria. Helpoin tapa on aloittaa esim. tekemällä muutoksia/parannuksia valmiiseen koodiin ja tutkia miten ne vaikuttavat lopputulokseen. :-)
Aihe on jo aika vanha, joten et voi enää vastata siihen.