Olen omaksi ilokseni ja oppiakseni ohjelmointia tekemässä muinaiseen Lähi-Itään sijoittuvaa roguelike-peliä. Käytän C-kieltä ja ncurses-kirjastoa.
Miten kannattaisi "piirtää" valmiit kartat, esim. pelihahmon kotikylä, joka piirretään aina samalla tavalla? Olen pari karttaa piirtänyt siten, että olen tehnyt 20-rivisen ja 80 merkin levyisen tekstitiedoston, jossa eri numerot vastaavat erilaisia maastonkohtia. Esim. 0 tarkoittaa kivilattiaa, 1 harmaata seinää (#), 2 nurmikkoa, 3 vettä jne. Jos 10 erilaista karttakohdetta ei riitä, voisi ottaa kirjaimet ja muut merkit avuksi.
Minulla on sitten kaksi funktiota: toinen lukee karttatiedoston ja tekee siitä kaksiulotteisen taulukon, toinen piirtää kartan matriisissa olevien numeroiden perusteella.
Miten olette muut piirtäneet valmiit kartat? Arvelen, että oma tapani piirtää ja lukea kartta ei ole kätevin mahdollinen.
Käyttämäsi tapa on mielestäni toimiva pienessä mittakaavassa ja helppo muokata, mutta jos haluat toisen tavan, suosittelen kokeilemaan seuraavaa:
Funktion esittely:
void piirraruohoa(int x, int y) { //tähän sitten miten ruoho piirretään ja tapahtumien käsittely }
Funktion kutsu:
piirraruohoa(1, 5);
Anteeksi jos syntaksi on huonoa, en käytä yleensä c:tä.
En ihan ymmärtänyt, mitä kysymyksellä haettiin. Ei kai sitä karttaa voi lukea tiedostosta kovin monella tavalla? Jos nykyinen toimii, en näe siinä ongelmaa. Piirtämisen suhteen sama juttu.
Jos jokaisella maastotyypillä on ruudullakin eri merkki, olisi selkeämpää käyttää tiedostossakin samoja merkkejä. Vai kumpaa puolta seuraavasta on sinusta helpompi muokata tekstieditorilla?
#####1111 #...#0001 ###.#0111 #.#.#0101 #....0001 #####1111
Toki jos esität vaikka kivilattian ja nurmikon samalla merkillä ja vain eri värillä, numeroratkaisu on osittain perusteltu. Tästä huolimatta valitsisin tiedostoon kuvaavampia merkkejä, vaikka isot kirjaimet esteille ja pienet lattialle ja tietenkin tyypin mukaan (esim. kivi, puu).
Tämä on kuitenkin vain pieni yksityiskohta; kuten hunajavohveli sanoi, järkeviä ratkaisuja ei ole kovin monta.
Kiitos vinkeistä. Ajattelin, että #-seinä esiintyisi eri värisenä sen mukaan, onko kyse esim. puisesta tai kivisestä seinästä.
Voit tehdä samasta kartasta useamman kerroksen, joissa yhdessä on tieto pohjamateriaalista tai tyypista ja toiseen vastaan karttaa tallennetaan sitten lisäinformaatiota. Tätä voi tietysti laajentaa myös useampaan kerrokseen. Tämä tietysti vain, jos karttaa pitää pystyä käsin muokkaamaan. Jos tuohon tekee hyvän karttaeditorin voi kartan tietysti tallentaa optimaalisempaan binäärimuotoon, jossa jokaisen ruudun kaikki informaatio on tallennettua peräkkäin johonkin tietueeseen.
Ajattelin vielä, että jokaisen karttalaatan tiedot voisi todella tallentaa tietueeksi (struct), josta selviäisi esim. onko ovi lukittu tai ansoitettu, onko ruutu läpi käveltävä vai este yms.
Mielestäni voisi olla järkevää yhdistää aloitusviestissä ja Veinin mainitsemia tapoja. Eli perusmaasto tekstitiedostona ja sitten erikoisemmat kohdat voisi määritellä yksityiskohtaisemmin. Toisaalta jos tekee ihan editorin karttojen tekemiseen niin sitten se olisi lie turhaa
Aihe on jo aika vanha, joten et voi enää vastata siihen.