Haetaan koodi- tai linkkivinkkiä, miten toteutetaan nettiyhteyden kautta moninpelattava numeronarvauspeli tai reaaliaikaisuutta korostaakseni vielä parempi olisi matopeli. Ei vissiin vaadi montaa riviä koodia* mutta tietoa vähän enemmän. En keksinyt googeliin montaa hyvää suomenkielistä(!) hakusanaa.
Jos joku vaivautuu tämmösen kirjoittamaan, niin kommentointia / dokumentaatiota sitten liiankin kanssa. Tälläkin sivustolla oli joitain aihetta sivuavia viestejä, joita ei oltu tarkoitettu opiskelua varten ja kommentointi oli sen mukaista.
* Saa oikaista jos on tarvetta.
Kielellä ei ilmeisesti väliä..
Ymmärtääkseni kielellä on väliä, muttei minulle. Jos saan ehdottaa niin suomi tai pseudo tai joku ohjelmointikieli jota keskiverto harrastelija osaa käyttää tai kääntää yleensä käyttämälleen kielelle. Itte olen tottunut eniten pythoniin, c-sukuisten syntaksi on minulle hyvin hidasta luettavaa.
Sä osaat varmaan itte vastata kysymykseesi paremmin kuin mä. :)
ps. ei brainfuck
pistäppä kuukkeliin hakusanaksi php multiplayer tutorials ja läheppä siitä liikkeelle
Ei mulle ole kielellä väliä. Mutta joo, suomi tai pseudo kuulostaa hyvältä..
Ajattelisin, että esimerkiksi TCP-pohjaisessa matopelissä yksi kone voisi toimia palvelimena (samalla koneella toki voi toimia myös yksi asiakas). Eli peli koostuisi kahdesta erillisestä "tehtävästä"
--Palvelin--:
Alustus (vaihe 1, pelaajien kerääminen):
- Alusta tyhjä pelaajalista
- Kuuntele porttia x
Yhteyspyynnön saapuessa:
- Hyväksy yhteyspyyntö
- Lähetä clientille palvelimen tunniste
- Odota clientin tunnistetta ja pelaajanimeä
- Lähetä clientille aikaisemmin saapuneiden pelaajien lista
- Lähetä aikaisemmin saapuneille pelaajille tämän uuden nimi
- Jatka datan vastaanottamista kultakin clientilta
Jonkun clienteista lähettäessä pelin aloituskommennon:
- Arvo pelaajille alkupisteet
- Lähetä kaikille clienteille tieto että peli on alkanut
- Vastaanota clienteiltä tietoa suunnanvaihdoksista
- Kerran sekunnisa (tms) päivitä kunkin pelaajan matoa clientiltä viimeksi tulleeseen suuntaan. Päivitä kaikkien matojen tiedot kaikille clienteille. Jos tiellä on toinen mato tai seinä, lähetä tieto, että peli ko. pelaajan osalta päättyi
Kun vain yksi mato jäljellä:
- Lähetä clienteille tieto voittajasta
- Palaa odottamaan pelin aloitusta
--Clientti--:
- Kysy pelaajan nimi
- Ota yhteys palvelimeen
- Tarkista että palvelimen vastaus on kelvollinen
- Lähetä clientin tunniste ja pelaajan nimi
- Vastaanota palvelimelta pelaajalista ja näytä pelaajat käyttäjälle
- Siirry odottamaan pelin alkamista
Pelin alkua odottaessa:
- Jos käyttäjä valitsee aloituksen, lähetä aloituspyyntö palvelimelle
- Jos tulee uusia käyttäjiä, lisää käyttäjälle näkyvälle listalle
- Jos palvelin ilmoittaa että peli on alkanut, siirry pelitilaan
Pelitilassa:
- Jos käyttäjä painaa nuolinäppäintä, lähetä tieto palvelimelle
- Päivitä madot näytölle palvelimen antamien tietojen mukaan
Pelin päättyessä omalta osalta:
- Näytä "Game over" ja jatka ruudun päivittämistä muiden matojen osalta
Pelin päättyessä kaikkien osalta:
- Jätä ruudulle lopputilanne ja siirry pelin alun odottelu-tilaan.
Tuo oli aika korkealla tasolla, mutta kieliagnostisesti on aika vaikeaa mennä tuon matalammalle tasolle, kun nuo näytön piirtämiset, näppäimistön lukemiset sekä TCP-yhteyksien muodostamiset ja kuuntelut riippuu niin paljon kielistä ja kehitysympäristöstä.
Joo kiitos Grez, toi on kerrottu lukuisissa nettitutoriaaleissa varmaan kaikille kielille. Mutta mitä sitten pitää tehdä kun noi on koodattu.
Esim mato.py clientille, matoserveri.py serverille, ja käytetään Apachea.
No tuossa minun ehdotuksessa ohjelmat käynnistetään ja clientin käsketään ottaa yhteyttä serverille (ja Apachea ei siinä tarvita mihinkään). Ja sitten vaan pelataan.
Aijaa. Jos mulla on omalla koneella client- ja serveriohjelma, niin nekö keskustelee sitten vaan käyttämällä kahta eri porttia? Ja jos meiän äiskällä on samanlainen clienttiohjelma, niin sen pitää ottaa yhteyttä mun iipeeseen ja samaan porttiin kuin mitä serveriohjelma käyttää, jotta me päästään pelaamaan?
Niin, serveri kuuntelee porttia x, ja clientit ottaa yhteyden serverin porttiin x. Clientit yhteyttä ottaessaan arpoo yleensä itselle jonkin vapaan portin 1024 ylöspäin, mistä ottavat yhteyttä, mutta tällä ei ole merkitystä ja käytännössä ohjelmoijan ei tarvitse siitä välittää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.