» Keskustelu » Muu ohjelmointi » Nytkäys tilepohjaisessa pelissä

Nytkäys tilepohjaisessa pelissä

Poissa
max

max

Eli mulla on 9x9 tileä, reunoille piirretään "raamit" jotka peittävät joka sivulta yhden tilen. Tileille luetaan tiedostoista tiedot, tiedostot on nimetty tyyliin 5-4 jossa x suunta on tässä tapauksessa viisi ja y 4. Esim jos painetaan oikeaa nuolta kaikki tilet liikkuvat vasemmalle ja pelaaja pysyy paikallaa. Syntyy tunne siitä että pelaaja liikkuu, ja kun meinataan mennä tilen yli vaihdetaan ensimmäistä luettavaa tiedostoa tässä tapauksessa siis esim. 5-4:stä 6-4:n sekä siirretään kaikki tilet takaisin alkupaikkaan.

Tässä syntyy ikävä nitkahdus, ensin tilet siirtyvät nollaan koska uutta tietoa ei ole vielä ehditty lukea tiedostoista ja sitten tieto luetaan ja siirrytään tavallaan yksi tile eteenpäin hypäten.

Tässä siis kyseinen java appletti, serveri omalla koneellani joten ei välttämättä toimi aina. (Jouluaaton yön kuitenkin ainakin pitäisi olla päällä.)

Olen miettinyt pääni puhki miten tuon saisi rullaan pehmeesti? Toivottavasti sain nyt väsyneenä edes jotenkin selitettyä selkeesti tätä.

Hyvää joulua muuten.

-Retropikzel-

Tuossa appletissa on vain ne ruskeat reunat ja keskellä on valkoista.

The old version of Randati.
Poissa
max

max

Andu kirjoitti:

Tuossa appletissa on vain ne ruskeat reunat ja keskellä on valkoista.


Joo olin unohtanut sallia sisään tulevan liikenteen palomuurista. Nyt pitäisi toimia.

-Retropikzel-

ööh, miksi et lue kerralla koko karttaa muistiin ja sitten piirrä siitä vain näkyvää osaa?

Ilmiselvin selitys on, etta maailma on niin suuri, ettei ole jarkevaa pitaa kaikkea muistissa kerralla. Kuten tuossa roolipeliprojektissani Legend, jossa on 121 miljoonaa tilea, on kaytannossa pakko ladata maailma dynaamisesti tiedostoista. Tallaisessa kaytannossa olen kuitenkin huomannut sellaisen ongelman, etta tiedostojen kasittely ei aina onnistu kun niita availlaan jatkuvasti.

Lo que no mata, engorda.
Poissa
max

max

Joo juuri siitä syystä että maailma on suuri, tuossakin on nyt jotain 10 000 tiedostoa. Sen lisäksi tarkoitus olisi vähän niinkuin tehdä moninpeli, eli uutta tietoa on saatava tiedostoista aika usein. Toimihan tuo appletti? Eli ilmestyi harmaita neliöitä ja kivipolkua? Ainakin serveri sanoo että pari on käynyt, tälläkin hetkellä 6 eli taitaa olla jotain häikkää laskusysteemissäni.

-Retropikzel-

Joo toki suuri maailma kannattaa pilkkoa, mutta ei nyt ihan 9x9 -palasiin kuitenkaan, vaan loogisiin kokonaisuuksiin joiden välillä siirtyessä voi vähän odotella. Tällaisten kokonaisuuksien hallintakin on vähän helpompaa.

Poissa
max

max

arzi kirjoitti:
Joo toki suuri maailma kannattaa pilkkoa, mutta ei nyt ihan 9x9 -palasiin kuitenkaan, vaan loogisiin kokonaisuuksiin joiden välillä siirtyessä voi vähän odotella. Tällaisten kokonaisuuksien hallintakin on vähän helpompaa.


Ideani on siis että joka tiedostossa on teksiä joka on eroteltavissa pilkuista, ensimmäinen tieto kertoo pelaajan nimen joka on ruudussa (jos ei ole niin siinä on esim. null tai 0) seuraava tavaran joka tilessä on ja sitten lattia joka kohdassa on. Oman pelaajan paikasta clientti lähettää serverille pyynnön saa serveriltä tiedostoista luetun mapin ja sen mukaan piirtää sitten. Eli tiedostoja luetaan jatkuvasti, siksi ei ole järkeä lukea kuin tarvittavat 9x9 kerrallaan.

-Retropikzel-
Poissa
lebe80

lebe80
Ylläpitäjä

Itselläni olikin hieman kokemusta tuollaisesta pelistä. Tosin java socket server pyörii vain erittäin harvoin päällä, joten testaaminen on oikeastaan mahdotonta muille kuin itselleni.


Eli itse tein kartan, jossa esim. kyliin/kaupunkeihin siirryttäessä ladataan kokonaan eri kartta. Jokainen kartta on kuin eräänläinen chät huone, eli vain sen sisällä oleville pelaajille lähetetään tietoa.

Pelikartta ja pelaajat ja tavarat käsitellään jokainen erillään. Itselläni kartat olivat staattisia "tiedostoja", ja jokainen pelaaja latasi kartan itsestään. Tämän jälkeen kylään saavuttaessa ladattiin jokaisen pelaajan tiedot, jotka olivat samassa kylässä (koordinaatit, graffa, nimi yms.). Tämän jälkeen aloitettiin pelaajalle peli, jossa hän voi liikkua. Joka kerta kun pelaaja liikahtaa, hän lähettää uudet koordinaattinsa tämän kaupungin muille pelaajille. He saavat uuden viestin, että pelaaja X on liikahtanut paikkaan P ja jos pelaaja oli näköpiirissä, hänen "ukkeliaan" liikutettiin paikkaan P.
Tämä toimenpide toimitetaan aina kun kuka tahansa pelaaja liikahtaa.

http://pelikoira.lepisto.info/

17.1.2003 --> +4000 viestiä
Poissa
max

max

Kuulostaa oikein hyvältä menetelmältä tuokin. Mutta halusin juuri tälläisen kuin itselläni on, sen etuna on esimerkiksi se että vaikka pelimaailma olisi 9999999999999^9999999999 silti pelaajalle siirretään vain niiden 81 tilen tiedot. Sen lisäksi haluaisin mahdolliseksi puiden kaadon, rakentamisen ynm. kivaa sitten kun siihen pääsen.

Vähän offtopikiksi on kyllä mennyt ja olen juuttunut tähän nytkähdykseen, jonkinlaisia ehdotuksia voi esittää mutta olen jo koittanut niin että ennenkuin siirretään tilet takaisin alkuperäiseen paikkaan niin tarkastetaan onko serveriltä saatu tieto sama kuin äsken. Se vain ei voi toimia jos muita pelaajia esimerkiksi liikkuu paikalla. Kaikenlaisia muitakin ehdotuksia otan ilomielin vastaan kunhan ne liittyvät tähän vaiheeseen jonka kanssa nyt työskentelen. Jonkinlainen fantasiapeli olisi varmaankin tulossa, kattoo ny sit.

-Retropikzel-

Suosittelisin kyllä tuota leben tapaa, että siirrät aluksi alueen tiedot ja sitten vain alueeseen tulleet muutokset. Pääset aika paljon vähemällä tiedonsiirrolla kuin siirteässäsi 81 tileä vähän väliä. Lisäksi jos muistissa on vain näkyvät tilet, miten toimisi tilanne jossa esim. 15 ruudun päässä oleva pelaaja ampuu toista?

Isompien alueiden lataaminen kerralla ei estä tekemästä rajattoman kokoista pelimaailma, se tarkoittaa vain että tietoa siirretään harvemmin ja isompia määriä kerralla.

Hyppää alueelle
Kaupallinen tiedote: