Minulla on ollut jo jonkin aikaa valmisteilla tilepohjainen peliprojekti. Peli lataa kartat ja niiden tasot(layerit) omista tiedostoistaan.
Kartat ovat muotoa:
111111111111111 100000000000001 100000022000001 100000003000001 100000000000001 111111111111111 jne.
Sain hiljattain karttaeditorinkin valmiiksi, jolloin aloin miettiä ovien toteutusta. Ovista kulkeminen onnistuu, mutta ongelmaksi muodostuu karttojen muokattavuus. Eli teen kartan, jossa on ovi, ohjelma lukee kartan ja huomaa, että tuossa kohdassa on ovi piirtäen siihen oven tilen. Törmäystarkistus tarkistaa onko astuttu oven päälle, ja jos on, niin ladataan uusi kartta ja mennään sinne. Jos ollaankin kaupungissa ei ovesta tultaessa voidakaan aina aloittaa samasta paikasta, vaan olisi mukava aloittaa oven vierestä. Miten toteuttaisin ovista kulkemisen ja minne tallentaisin tiedot mihin ovesta tullaan niin, että kartan editoitavuus säilyisi? Olisiko oville tehtävä oma layeri?
Kielenä on Java, mutta sillähän ei ole merkitystä, sillä kysymys on lähinnä teoriatasoinen, eli ideaa lähinnä haen.
Toivottavasti onnistuin olemaan mahdollisimman epäselvä ja joudutte kysymään tarkennusta kysymykseeni! ^^
Yksi mahdollisuus on esimerkiksi merkinnät kartan jälkeen, eli muutat karttaformaattia esim näin:
15 6 111111111111111 100000000000001 100000022000001 100000003000001 100000000000001 111O11111O11111 [ovet] 10 6 kaupunki 22 17 4 6 kaupunki 16 17
Alussa olevat kaksi lukua kertovat kartan leveyden ja korkeuden.
Sitten tulee annetun kokoinen kartta, missä O on ovi.
[ovet]-kohta taas kertoo kaikkien ovien tiedot seuraavassa muodossa:
[oven x-koordinaatti] [oven y-koordinaatti] [kartta, mille pitää siirtyä ovesta mentäessä] [saapumispaikan x-koordinaatti uudella kartalla] [saapumispaikan y-koordinaatti uudella kartalla]
Tämä ei välttämättä ole selkein tai optimoiduin tapa tehdä tätä, mutta pitäisi ainakin olla toimiva ja kohtuullisen helppo toteuttaa.
Kiitoksia ehdotuksesta!
Toteuttamisen arvoinen idea ja vielä helppo koodata. Tietenkin jos muita ehdotuksia tulee otan niitä vastaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.