HTML

Survive Developement

Itt olvashatod a Survive! nevű játék fejlesztésének állapotát, lépéseit. És mi is lesz a játék? Egy zombis-túlélős játék, ahol elsősorban a csapatmunkára építkezve kell megpróbálni életben maradni egy kihalt városban. A terep teljesen a tietek, nincsenek szabályok: éljetek túl, ahogy tudtok!


Küldj e-mailt nekünk:
gilgamesco@gmail.com

Sikolyok

Ettől tépjük a hajunkat:

Friss topikok

  • Sir Butcher: A gyors mozgású ütközés-érzékelés majd a lövésnél lesz topic :D A második esetben teljesen igaza... (2012.04.05. 16:38) Ütközésérzékelés
  • _fpeti_: Halad ez. (2012.04.04. 22:01) Gravitáció
  • Sir Butcher: Az sem rossz, az tény :D Szerencsére egyelőre annyi különbözőt kell csinálnom, hogy esélyem sincs ... (2012.02.20. 21:48) Scenery - Még több látvány
  • Sir Butcher: Na, ideírom: obj-nél megoldottam a csontokat. Melléktermékként összejöttek, extra számítás nélkül ... (2011.12.02. 11:48) Model Animálás - a probléma, és a (vélt) megoldás
  • Burwor: "A tesztvárosban sétálgatva belefutsz egy házba, aminek hiányzik egy fala. Mit csinálsz?" Zárva a... (2011.11.10. 15:00) Sziduri - a grafmotor bemutatkozik

Város a szigeten + csúnya bug javítva

2012.02.15. 22:34 :: GizmoSDK

Amikor a program elkezd végtelen ciklusban adatokat gyártani a memóriában, egész hamar be tud telni az a szerény 1 GB RAM, amivel megáldott engem az anyatermészet (Butcher szerint 4 GB-t is sikerült gond nélkül kiakasztania :D). És hát a rectangle finder megtette nekem ezt a szívességet. Akit nem érdekel a blabla, az tekerjen le, akit érdekel, az figyeljen.

Mi is volt a probléma? Volt egy ilyen kódrészlet:rights = [fst centroid, fst centroid + unit..right]Ezt egy úgynevezett list comprehension (ne kérdezzétek, mi ennek a magyar megfelelője, viszont, ha tudjátok, mondjátok). A list comprehension a tömbök elemeinek egy rövid megadási formája. Jelen esetben egész számokat generálnánk, méghozzá a centroid (ami egy kételemű érték) első elemétől (erre utal az fst, mint 'first') a right értékig, unit lépésközzel. Példa:fst centroid = 5
unit = 3
right = 19
Ekkor a tömb így nézne ki:[5, 5 + 3, 5 + 3 + 3, ..., legnagyobbElemAmiMégKisebb19nél]vagyis[5, 8, 11, 14, 17]Mivel a következő elem (20) nagyobb lenne, mint a 19, ezért az már nem kerül bele a tömbbe.

Ez eddig mind szép és jó, ám vannak olyan esetek, amikor a right 0. Nézzük meg, mi történne ilyenkor:[5, 5 + 3, 5 + 3 + 3, ..., és ezt egészen addig, amíg el nem éri a 0-t]Tehát itt egy szép kis végtelen ciklust kapunk a nyakunkba. Elkezdi feltölteni a tömböt elemekkel, amíg le nem állítjuk a progit. Mindenesetre könnyű kis fix volt, csak a hiba okát volt nehéz megtalálni. A profiler először csak annyit mondott, hogy a rectangleFinder folyamatosan eszi a memóriát. Mikor részletesebbre állítottam, akkor már láttam, hogy a tömblétrehozás eszik sokat, aztán pár debugprinttel megbizonyosodtam arról, hogy végtelen ciklusba kerülünk. A fix egyszerű volt: ha nulla méretű telekben keresünk, akkor simán adjunk vissza egy 0x0-s téglalapot. (Úgyis újra lesz írva, és a végleges játékban terveim szerint a városgenerátor harmadik negyedik inkarnációja fog dolgozni azért, hogy a játékosok elégedettek legyenek :D)

És akkor kép a városról a szigeten: 

Szólj hozzá!

Címkék: városgenerálás haskell

A bejegyzés trackback címe:

https://survivedev.blog.hu/api/trackback/id/tr494115467

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása