Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Opasprojekti: Python + pygame

Sivun loppuun

Antti Laaksonen [28.07.2009 19:18:56]

#

Olen alkanut suunnitella Ohjelmointiputkaan laajaa opassarjaa, joka käsittelee Python-ohjelmointikieltä ja peliohjelmointiin sopivaa pygame-kirjastoa. Tavoitteena on kirjoittaa nykyaikainen johdatus ohjelmointiin kohdeyleisönä peruskouluikäiset ohjelmoinnin aloittajat. Aiheesta on keskusteltu aiemmin täällä.

Ennen kirjoitustyön aloittamista haluaisin kuulla, mitä asioita oppaissa olisi mielestänne järkevää käsitellä ja mitä muita ajatuksia projekti herättää. Seuraavassa on opassarjan alustava suunnitelma, jossa olevista puutteista saa mielellään huomauttaa.

Opassarja jakaantuu kolmeen osaan, joista jokainen muodostuu monista oppaista. Ensimmäinen osa käsittelee ohjelmoinnin perusasioita komentoriviohjelmien kautta. Toinen osa esittelee peliohjelmointia pygame-kirjastolla. Kolmannessa osassa tehdään kokonainen peli aiempien osien oppien avulla.

Osa I: Ohjelmoinnin perusteet

Opas 1: Johdanto
- ohjelman rakenne
- tekstin tulostus
- syötteen luku
Opas 2: Muuttujat
- lukuarvot, merkkijonot
- laskutoimitukset
Opas 3: Ehdot
- if-lause
- vertailut, and ja or
Opas 4: Silmukat
- while
- for (range)
- break, continue
Opas 5: Listat
- alkion lisäys, muutos, haku, poisto
- käsittely silmukoilla
Opas 6: Aliohjelmat
- kutsuminen, parametrit, palautusarvo
Opas 7: Tiedostot ja virheet
- tiedostojen käsittely
- virheiden käsittely
Opas 8: Moduulit
- lisämoduulien käyttö
- esimerkkejä:
- merkkijonot, matematiikka, satunnaisluvut

Osa II: Peliohjelmointi

Opas 1: Graafinen ohjelma
- grafiikkaikkuna
- piste, viiva, laatikko, ympyrä
- tekstin piirtäminen
Opas 2: Kuvien käsittely
- kuvan lataus ja piirto
- animaatio
Opas 3: Syöttölaitteet
- näppäimistön käsittely
- hiiren käsittely
Opas 4: Äänet ja musiikki
- ääniefektien soitto
- taustamusiikin soitto

Osa III: Peliprojekti

- tehdään alusta loppuun matopeli

aaämdee [28.07.2009 19:52:32]

#

Kuullostaa varsin hyvältä idealta. Olisin kyllä itsekin ohjelmointia aloittaessani mielelläni kahlannut tälläisen oppan lävitse. Matopelin koodamisen jälkeen varmaankin ymmärtää pythonia sen verran hyvin, että on helppo ruveta vääntämään jotain hienompaakin.

Osa I: Opas 8 kommentoisin siten, että kannattaa varmaan kirjoittaa myös omien moduulien tekemisestä, kun se pythonissa onnistuu suhteellisen helposti.

Mobel [28.07.2009 20:39:39]

#

Tuli näin äkkiseltään mieleen, että on varmasti hyvä kirjoittaa myös pygamen asentamisesta nopea step-by-step -opas linkkeineen ja muineen. Etenkin kohdeyleisön huomioon ottaen suomenkielestä etua. Vaikka moni varmasti osaisikin sen asentaa itsekin, ei siitä varmasti haittaa ole.
Linkki suomenkieliseen ohjeeseen ajanee saman asian.

os [28.07.2009 21:56:09]

#

Vaikuttaa hyvältä oppaalta :)

Mielestäni eräs asia, jonka käsittelyyn voisi kiinnittää erityistä huomiota joko II tai III osiossa on yksinkertaisen (reaaliaikaisen) pelin tai "pelimoottorin" rakenne - siis se, mitä jokaisella "framella" tehdään (ja mitä ei). Esimerkiksi näin:

- tarvittavat kirjaston alustuskutsut
- lataa kuvat ja äänet
- alusta pelin tila

while !lopetusehto:
	- lue syöte (miten?)
	- päivitä pelin tila (+ajastus), ääniefektien päivitys (miten?)
	- piirrä kuva & päivitä näyttö

eikä esimerkiksi näin (vastaavia on varmasti nähty)

while 1:
	- odota käyttäjän syötettä (esim. jokin normaali STDIN-lukuoperaatio)
	- liikuta ukkoa
	- lataa ukon kuva tiedostosta
	- piirrä ukko ja päivitä näyttö
	- soita ääni synkronisella kutsulla
	- liikuta toista ukkoa
	...

Jälkimmäisen kaltaisella koodilla ei nimittäin pitkälle pötkitä ja syyt tähän saattavat mahdollisimman helpolla tasolla etenevässä oppaassa jäädä epäselviksi. Ehkä toisaalta riittää, että esimerkkiprojektin runko on kunnossa ja tärkeimmät pointit mainitaan matkalla. Myös hyvän esimerkkiprojektin päälle rakentamalla (oppaan koodin käyttö tällaiseen tarkoitukseen sallittaneen) saattaa saada aikaan vaikka mitä.

Contraband [29.07.2009 00:00:12]

#

Erittäin hyvä opasidea! Mukavan tiiviiksi olet saanut sisällysluettelon; tällaisessa oppaassa on eduksi, että päästään suhteellisen nopeasti grafiikan piirtoon yms. näyttävään. Innokas aloittelija haluaa nopeasti 'saada jotain aikaan', jotta motivaatio riittää oppaan loppuun lukemiseen.

Dictionaryjen lisäämistä esim. oppaaseen 5 (osa I) voisi harkita. Itse huomaan käyttäväni niitä todella tiuhaan, ja niiden helppo käytettävyys onkin mielestäni yksi keskeisistä Pythonin eduista.

Lisäksi aloittelevan Python-ohjelmoijan tueksi olisi hyvä kertoa dir- ja help-funktioista, jotka tulevat apuun, mikäli ei satu muistamaan jonkin funktion tarkkaa nimeä. Noiden avulla koodaa itselle ennestään tuntemattomallakin kirjastolla (=moduulilla), vaikkei nettiyhteyttä tai erillistä manuaalia olisi käsillä.

JP_94 [29.07.2009 16:33:25]

#

Hyvä opasidea. Grafiikkaohjelmoinnista pygamella ei olekaan liikaa suomenkielisiä oppaita.
Osa II opas 1: Tuohon voisi ottaa mukaan myös monikulmioiden piirtämisen.

Chiman [29.07.2009 17:44:26]

#

Oikein hyvä opasaihe.

Pythonin ominaisuuksien käsittelyn rajaaminen Antin viestin esittämälle tasolle taitaa olla hyvä päätös. Dictionary ja joukko (set) ovat erittäin hyödyllisiä ja käytän niitä itse usein, mutta ehkä ne on parasta jättää perusteista pois, jotta oppaan laajuus pysyy kohtuullisena. Ne sopisivat mahdolliseen jatko-osaan, kuten omien moduulien tekeminenkin.

Tiedostonkäsittelyosiossa voisi käsitellä pickle-moduulia, koska sillä pystyy lukemaan ja tallentamaan monimutkaisiakin tietorakenteita yhdellä koodirivillä (poislukien virheenkäsittely). Siten se sopii esim. pelin pistetaulun tallentamiseen.

Muoks: Mainitulla jaolla pickle sopisi sittenkin Moduulit-osioon.

Metabolix [29.07.2009 19:46:27]

#

Voisiko ensimmäinen opas korvata nykyisen Python-oppaan? Minusta olisi hyvä, jos noista kolmesta tulisi toisistaan erilliset opassarjat, joista yksi kertoisi Pythonista, toinen pygamesta ja kolmas varsinaisesta pelinteosta. Kahden ensimmäisen sisältökin voisi olla huomattavasti matopelin tarpeita laajempi.

Python on siitä erityisen miellyttävä kieli, että se pakottaa sisentämään siististi. Ehkä tämä vähentää foorumilla huonosti sisennettyjen, vaikealukuisten koodien esiintyvyyttä ja säästää auttajien hermoja näiltä...

Grez [29.07.2009 19:53:18]

#

Mitäs jos noi koodinvärittäjät laittaisivat myös sisennykset automaagisesti kuntoon (siis muissa kielissä). Toisaalta joissakin editoreissahan sisennykset tulee muutenkin automaagisesti (esim. uudet Visual Studiot)

Antti Laaksonen [30.07.2009 13:14:03]

#

Kiitos hyvistä ehdotuksista (ja lisää saa mielellään lähettää). Opassarjan liitteeksi tulee Pythonin ja pygamen asennusohje. Pelimoottorin rakenne ansaitsisi tosiaan kenties oman oppaan. Sanakirjoja ja joukkoja täytyy vielä harkita sen mukaan, millaisiksi oppaat muodostuvat. Kuitenkaan tarkoituksenani ei ole esitellä kattavasti Python-kieltä vaan keskittyä ohjelmoinnin perusasioihin.

pipo [04.08.2009 13:40:22]

#

Chiman puhuu asiaa. Ei ehkä kannata sekoittaa kyseisen kohdeyleisön päätä monella tietorakenteella. Jos ymmärtää hyvin, miten yhtä käytetään, on hyvät edellytykset itseopiskella joku muu. Luokkia ja olioitten käyttöä etsin tuolta sisällysluettelosta. Kuuluuko ne tohon johdantoon?

Viivojen, pisteiden ja monikulmioiden piirtämisen sijasta painoa voisi olla kuvien käytöllä. Paletin käyttö olisi hyvä, kun itte en löytänyt selkeää ohjetta mistään joskus taannoin.

Mun mielestä ei kannata mainita mistään pelimoottorista koko oppaassa, kun otetaan lukijan ymmärrys huomioon. Prosessorin käytön hillitsemisestä on kyllä tarpeen kertoa.

Internetin käyttö moninpeliä / vast varten olisi myös lukijaa varmasti kiinnostavaa. Eihän kukaan hullu tietokoneella yksin pelaa. Paitsi en ole varma opetetaanko nykyään peruskoulussa internet-ohjelmointia :)

jalski [04.08.2009 18:01:58]

#

Oma ehdotukseni olisi korvata peliprojektin matopeli jollain simppelillä kahden pelaajan verkkopelillä. Joskus pikkupoikana tuli kaverin luona pelailtua Amstradilla peliä, jossa ohjattiin kokoajan pitenevää viivaa ja vältettiin osumasta omaan sekä kaverin ohjaamaan viivaan ja pelialueen reunoihin. Olisikohan pelin nimi ollut Ansa?

Ajatuksissa on ollut toteuttaa kyseinen peli Infernon Limbolla ja laittaa tänne esimerkkinä koodivinkkeihin tai oppaisiin.

tgunner [04.08.2009 21:39:06]

#

jalski kirjoitti:

Oma ehdotukseni olisi korvata peliprojektin matopeli jollain simppelillä kahden pelaajan verkkopelillä.

Hieman aiheen ulkopuolella, ja muutenkin varsin vaikea aihe toteuttaa. Verkko-ominaisuudet ovat tarpeeton lisä pelikirjastoa käsittelevässä oppaassa.

Metabolix [05.08.2009 08:46:49]

#

Reaaliaikaisen verkkopelin ohjelmointi on valitettavasti monin verroin mutkikkaampaa kuin reaaliaikaisen yksinpelin. Verkkopeliohjelmoinnista voisi olla hyvä kirjoittaa aivan erillinen opassarja. Jotta siitä olisi hyötyä, lukijalla pitäisi olla hyvät pohjatiedot peliohjelmoinnista ja toivottavasti myös kyky lukea muulla kuin omalla kielellä kirjoitettuja esimerkkikoodeja ja soveltaa niitä oman kielen tarjoamiin verkkokirjastoihin. (Ei olisi järkevää kirjoittaa samoista yleisistä periaatteista erikseen joka kielellä.)

rautamiekka [05.08.2009 14:16:24]

#

Olen juuri aloittanut lukemaan Pythonia ja tämä voisi tulla hyödyksi. VB6 alkaa tuntumaan niin vastusteltulta ettei enää kannata laittaa vastaan.

jalski [06.08.2009 20:16:00]

#

Taitaapi tuo edellisessä viestissä mainitsemani kahden pelaajan Ansa verkkopeli olla hyvää matopeliä helpompi toteuttaa?

Nopeasti ajateltuna tarvitsee osata:

- Neliön piirtäminen (määritellään kahdella pisteellä: vasen yläkulma (x, y) ja oikea alakulma (x, y) ).
- Pelaajan ohjaama viiva koostuu edellä mainituista pienistä neliöistä.
- Viiva kasvaa aina yhden neliön verran lisää.
- Törmäystarkistus on helppoa: verrataan vain neliöiden nurkka pisteitä (esim. vasen ylä).
- Ohjaus: Viiva kasvaa aina yhden neliön verran lisää, eli aiemmin piirretyn neliön nurkka pisteeseen lisätään piste deltaxy = (neliön leveys, neliön korkeus). Nuolinäppäimiltä voi vaikuttaa pisteeseen deltaxy(x,y), eli onko x:n ja y:n lisäys plussaa vai miinusta.

- Ajastin: mahdollisimman yksinkertainen. Käytän varmaan omaa säiettä ja Limbon kanavia apuna.
- Verkko: siirretään deltaxy (voidaan siirtää näppäinkoodina, jolloin voidaan käyttää samaa ohjelmakoodia paikallisen ja etäpelaajan siirron käsittelyyn), kuittaukset siirroista ja pelin synkronointi.

Grez [06.08.2009 22:23:36]

#

jalski kirjoitti:

Taitaapi tuo edellisessä viestissä mainitsemani kahden pelaajan Ansa verkkopeli olla hyvää matopeliä helpompi toteuttaa?

Hyvin marginaalisesti. Eli käytännössähän tuo on matopeli, jossa madon pituus on ääretön, eli sen "häntää" ei tarvitse poistaa. Sanoisin, että puhutaan jostain 2% erosta.

pipo [07.08.2009 11:47:19]

#

Onko ´Osa I: Ohjelmoinnin perusteilla´ tarkoitus korvata putkan python-opas vai mitä ollenkaan tarkoittaa nykyaikainen johdatus ohjelmointiin?

Internetin käyttö ei oikein mahdu mihinkään noista kolmesta osasta eikä oppaan tarkoitukseen. Tarkoitin että se olisi oppaan jälkeen seuraava lukijaa kiinnostava asia jonne hänet kannattaa ehkä ohjata. Suur osa lukijoista varmaan haluaa alkaa tekemään 3d-pelejä seuraavaksi. Tämä (ihan mielenkiintoinen) keskustelu oppaan jatkosta ei taida olla ajankohtainen.

Osa II:kkoseen voisi sopia otsikot Törmäyksen tarkastelu ja Tekoäly. Liittyvät tietääkseni olennaisesti aiheeseen yksinkertaisimmissakin vastaavissa peleissä. Osa I:kköseen taas voisi harkita otsikkoa Virheen etsintä, joka siis kertoisi mitä pitää lukea/ajatella ensimmäiseksi kun tulee virheilmoitus. Ykköseen voisi sopia myös otsikkokohtaiset lyhyet kertaavat tehtävät ja kysymykset ilman vastauksia. Lähinnä siksi että tuntee ymmärtäneensä luetun asian ja että miksi luki sen.


Sivun alkuun

Vastaus

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

Tietoa sivustosta