Olemme tekemässä harrastelijavoimin yksinkertaista iOS-peliä, johon on tulossa myös nettimoninpeli. Peli on vuoropohjainen ja tarvittavat laskut tehdään itse laitteissa, mutta jotenkin pitäisi saada palvelin siirtoja välittämään.
Onko vinkkejä, miten tällainen kannattaisi toteuttaa? Minkälainen servu, mikä ohjelmointikieli? Entä jos jotain high score -listoja halutaan toteuttaa, mikä olisi paras tapa säilöä tulokset?
Tietojen säilömiseen tietokanta on yleensä aika hyvä.
Palvelimeen on kaksi tapaa: joko yhteys pidetään jatkuvasti auki tai siirrot lähetetään yksitellen ja vastapuolen siirtoa kysellään ajoittain. Ensiksi mainittu tapa vaatii oman palvelinohjelman ja on alttiimpi katkoksille mutta toisaalta vähentää viivettä. Jälkimmäinen tapa onnistuu vaikka tavallisella HTTP-palvelimella ja sopii hyvin peleihin, joissa siirtojen välillä on usein pitkä aika.
Kielellä ei sinänsä ole väliä, kannattaa valita ihan omien kykyjen mukaan.
Oma projektini on selainpohjainen ja laskut tehdään selaimessa JavaScriptin voimin.
Jos et ole tekemässä selainpohjaista peliä, jokin Javan avulla toteutettu voisi olla ehkä hyvä.
Teethän pelisi myös sitten Androidilla toimivaksi!
High-scoret johtavat siihen, että joku poloinen haluaa huijata päästääkseen ykköseksi ennätystaulussa. Tämä on kumma ja käsittämätön ilmiö, mutta valitettavasti sitä ilmenee toisinaan. Voit estää yleisimmät väärinkäytökset suunnittelemalla pelisi sopivasti.
Jos on mitenkään mahdollista lukea serverin ja asiakasohjelman välistä kommunikaatiota, joku kyllä tekee sen. Hän saa selville kaiken tiedon, mitä serveristä tulee. Johtopäätös on, ettei kannata lähettää mitään, mitä pelaaja ei muutenkin saisi tietää. (Tällä voi olla merkitystä esim. sotapeleissä, joissa kaikkien joukkojen liikkeistä ei saa tietää kaikkea. Joissakin peleissä taas näkee aina kaiken.)
Asiakasohjelman hakkeroinnilla voi vaikuttaa tuloksiin, joita se antaa pelitapahtumista. Jos serveri luottaa kaikkeen, mitä asiakkailta saa takaisin, on tässä toinen selvä huijausmahdollisuus. Mikäpä estäisi ahkeraa huijaria esimerkiksi korvaamasta satunnaislukugeneraattoria itselleen edullisemmalla? Asiakasohjelmaan luottamisen sijasta kaiken oleellisen laskennan voi tehdä serverissä tai ainakin tarkistaa siellä, jolloin tällainen huijaaminen ei ole mahdollista. Tietysti tässä on se puoli, että se lisää serverin kuormitusta.
En tiedä kuinka yleistä huijaus ja sen yrittäminen ovat, mutta koska yksikin huijari voi viedä maun pelistä monelta, kannattaa etukäteen tehdä huijauksen estämiseksi kaikki järkevä. Yleiset periaatteet lienevät, että kaiken liikenteen voi aina lukea ja asiakasohjelman käyttämiseen sellaisenaan ei voi koskaan luottaa (vaan se voi olla huijarin itselleen muokkaama versio).
Eikä tietenkään kannata tehdä mitään, mikä haittaa rehellisiä pelureita enemmän kuin niitä harvoja huijareita.
Aihe on jo aika vanha, joten et voi enää vastata siihen.