Végtelen térkép generálás bármely irányba 2017. október 1., vasárnap - 23:03


Ahogy visszanéztem gyorsan, ez az első tényleg programozással kapcsolatos bejegyzésem. Amikor a blogot kezdtem, úgy voltam vele, hogy itt mindenféle elmélet és megoldás lesz ezen belül. És gondoltam, hogy azért előtte lesz pár bejegyzés, de hogy 51 bejegyzést írjak előtte (több, mint 1 éven át), amiből csak pár darab hajazott a programozásra.. :D (A node.js szenvedésem is csak hasonló volt, de ott a telepítésen volt a hangsúly, nem a használatán.)

Bevezető off.
Szóval:

Ahogy a cím is mutatja - a napokban elkezdtem a szabadidőmben (amikor épp nincs semmi fontos egyéb) egy Minecrafthoz hasonló, de 2D játékot csinálni. Mindezt természetesen multiplayer formába öntve, hiszen mit ér az alkotás, ha nem láthatja senki az eredményt? Mariocraft a kódneve, mert egyébként - jobb híján - Mario a főkarakter, egyelőre.
( Meg hát egy hálózaton játszható játék külön fényévekkel jobb, a legtöbb esetben. )


(Jobbra a kicsit újabb, árnyékos verzió látható.)

És ha már ilyen Minecraft-Terraria típusú játékba kezdtem, eszembe jutott egy olyan téma, amiről szívesen hallanám mások véleményét, megoldási módjait, hátha tanulhatok és/vagy van jobb, mint amit én ismerek. A Facebookos Amatőr játékfejlesztők csoportban feltettem a kérdésem, ami egy elég jó kis közösség - és pár aktív tagja között igazán nagy koponyák vannak, akik nagyon régóta űzik az ipart.


Kaptam is jó néhány választ, néhány még új információ is volt – tehát megérte a kérdést feltenni. Tanulhattam kicsit.

Összefoglalva: a kérdés, téma lényege az, hogy a legtöbb egyszerű játékban elég az, ha a játéktér térképe egy kétdimenziós tömb (főleg a csempéből felépülő játékoknál - erről van egy nagyon jó tutorial itt. Leír mindent, hogy miért jó ez, miért hasznos.).

Ez annyit tesz, hogy csak "egyirányúan" bővíthető a tér. A számítógépen a leggyakoribb módszer a 2D játékoknál (top-down view "felülnézetes", sidescroller "platform, mászkálós"), hogy a nullpont a bal felső sarok. Onnan indul ki a térkép összerakása, és tart egészen a jobb alsóig.
Ez pont kézenfekvő, hiszen a térképet tömbben szokás tárolni, a tömbök indexelése 0-tól indul, és tart N-ig. A tömb dinamikus is lehet, tehát nem lehetetlen, hogy akár játék közben IS nőhessen a pálya mérete. De csak (az előbbit alapul véve) jobbra, és lefelé.

És mi van, ha én egy Minecrafthoz hasonló játékot akarok, de oldalnézetből? Vagy valami katonás, akármilyen játékot felülnézetből? És mondjuk hasonló, generált térképpel, hogy az az érzésem legyen, hogy bármerre mehetek?

Erre több megoldás is van.

Volt, aki azt mondta pl. (Oli volt, csekkoljátok az oldalát, rengeteg jó játékot csinált már! Java és HTML5 főként. Az én kedvencem pl. a JAVA minigolf játéka.),
hogy ez megoldható azzal, ha a tömb elejére szúrunk be új elemeket (ha a mínusz irányokba haladunk), és/vagy csúsztatjuk a tömb elemeit (inkább ezt írta, csak nekem elsőre beszúrás ugrott be, de az sem butaság, amennyiben feljegyezzük, hogy mennyivel lett csúsztatva a pálya, és ezt minden koordinátájához hozzáadjuk. Akkor ránézésre nem mozdul semmi sehova, de mégis nő a pálya mérete.) Ha csak csúsztatunk az elemeken, és ami kicsúszik, az elvész, akkor nem jó az ötlet egy dinamikus pályával rendelkező játékhoz, de egyébként igen.

Volt, aki hasonló, indexeléses módszert írt, seed alapon generálással (így simán csak ugyanazt generálja a játék az adott helyen, ha visszatérünk oda). Ez akkor nem jó, ha változtatható a pálya. Mint jelen esetben.

Kaptam egy Circular buffer nevű módszert, amit még nem olvastam el részletesen, de ez is új infó nekem, ennek egy változatát már használtam, anélkül, hogy tudtam volna róla, meg arról, hogy mi ez.

Még páran írtak, egy elég jó kis beszélgetés lett belőle.

Az én módszerem annyi, hogy adott egy (Minecraft megnevezéssel) chunk, egy darabka, egy részlet a pálya egészéből. Ez magába foglal N*N további kis játékelemet, "csempét" (tile-t). A Minecraftban ez 16x16x16 méretet jelent (mert 3D), de a mérete mindegy. Lényegében ezen chunkoknak is van egy koordinátája, ami ugyanúgy 0, 1, 2, stb., de egy ilyen koordinátán N*N elem található. Úgy is mondhatjuk, hogy az 1/N-ed része a pályának egy chunk.
Bár a pályát, a chunkok tartalmát tömbökben tárolom én is, de magukat a tömböket objektumok értékeként. A tulajdonság pedig egy string, egy szöveg, ami tartalmazza a chunk koordinátákat is.
Mivel ez egy szöveg, ez mehet negatív egész számba is, hiszen az is szöveg. Hivatkozásképp van használva, kicsit úgy, mint egy asszociatív tömb. Így nem is lassít semmit (érzékelhetően), annak ellenére, hogy string.

Ez kicsit zagyva lehet, de épp ezért gyorsan megírtam működőben is, hogy tesztelhető, látható legyen, mire gondolok. Így nem elég, hogy "negatív indexbe", mármint koordinátára is mehetünk a játékon belül, de ez generálható a végtelenségig, mert ugyanúgy dinamikus, és még a tömböket sem kell birizgálni, ha újabb tér tárul fel, így nincs plusz processzorhasználat sem.

Ide kattintva megnézhető a kis tesztem.
Az irányítás is egyszerű: a kurzorbillentyűk a vörös téglalapot mozgatják. A WASD pedig az egész nézetet, amit csak látunk.

A vörös téglalap mutatja a játékos képernyőjét; ha ez egy játék lenne, azt a területet látná be a játékos. Ahogy látható, mindig előre betöltődik annyi, amennyi szükséges, a chunkokból. A kirajzolás persze nem így történne, hiszen ez nem túl takarékos, de a bemutató célja nem is az volt.
A két kék vonal szimbolizálja a nullpontot, az X és Y tengelyt, amitől "jobbra" és "lefelé" szokás a pályát építeni alapesetben - de itt ugye átléphető minden irányba, bármekkora távolságra.



Egyébként a barátommal beszélgettem, miközben beugrott egy sokkal egyszerűbb módszer is, ami ugyanezt eredményezi.


Ez pedig annyi, hogy négy térkép tömb van, ami tárolja a pályát. Általában egy van, de ha vesszük a két tengelyt, akkor az 4 részre osztja a pályát, és pont az a gond a tömbbel, hogy nincs negatív index.
De ha van egy topright, bottomright, bottomleft és topleft tömböm, amik a négy teret szimbolizálják, akkor már más a helyzet. A bottomright-ot használjuk ugyanúgy, mint alapból szokás. Az összes többi pedig a tükörkép. Mielőtt dolgoznánk a tömbünkben, előtte egy vizsgálat eldönti, hogy melyik tömbben dolgozunk a 4 közül. Ha negatív az X, akkor értelemszerűen left lesz, különben right. Ha az Y negatív, akkor pedig top lesz, különben bottom. És már csak annyi az extra, hogy a tömbhöz használt index-számot, ami egyébként koordináta (valószínűleg), annak az abszolút értékét használjuk, bármelyik tömbben is dolgozunk. Így a mínuszból plusz lesz, és egy sokkal egyszerűbb módszert kapunk a 4 irányba való generáláshoz, szintén végtelenségig (hiszen dinamikus ugyanúgy lehet mind).

De ezt most nem valósítom meg, el lehet képzelni. :)

Ezért szép a programozás, végtelen megoldás van ugyanarra a "problémára", még ha némelyik nem is a legjobb.

Randomcoin bányászat 2017. szeptember 24., vasárnap - 20:33


Akit érdekel, keressen rá részletesen, hogy mi ez, mire jó. Én is csak félig vagyok informált, mert annyira nem érdekel, hogy utánaolvassak. Annyit tudok, hogy ez valami virtuális, lenyomkövethetetlen pénznem, ami átváltható valós pénzre. Sok fajtája van. (A legelterjedtebb a bitcoin talán, mert azt látni a legtöbb helyen.)

Az elmúlt napokban minden FB programozói csoportban erről van szó. Röviden: ez a gyökér coin-hive.com (és még ki tudja milyen oldalak) JS formájában beépíthetőek a weboldalba.

Ez azt jelenti, hogy pénzt keresnek az oldalt látogató emberen, akik ezt használják.
Kb. mintha reklámok lennének az oldalon. A reklám megtekintése miatt az oldal tulajdonosa zsebeli a sok pénzt (nem sokat, de pl. 1 millió ember után 1 Ft is egy milla...).

Sajnos a sok (jól működő) reklámblokkoló beépülő modul ennek keresztbe tett. És úgy tűnik, most ez lesz az új módszer. Ez a kriptovaluta bányászat izé.

Mi ezzel a probléma? Te jól jársz, mert az oldalon ott van, amit keresel (filmezz.eu-n vettem észre én pl. elsőként), és az oldal is, hisz neked semmibe nem kerül a dolog, de ők is pénzt keresnek vele.. Frászt.

Két baj van. Az első, hogy pörgeti a géped processzorát 100%-on. Ez hamar károsodáshoz vezethet (hosszú távon), de legalábbis mindenképp negatív hatása van. Másrészt amíg foglalja a procit a sz@ros weblap, addig egy mappát nem fogsz tudni megnyitni, olyan lassú is lehet a géped. Jobb esetben átadja az erőforrást a böngésző más dolgoknak, de az előző dolog még mindig elég baj..


Ha van adblock a böngésződben, hozzáadható kivételként az egész coin-akármi weblap.
Nyisd meg a szűrőbeállításokat, majd ott Saját szűrők, Szűrő csoport felvétele gomb. Adj valami nevet, mondjuk "rohadtCoinShit", vagy hasonló.. Mindegy.
Katt a létrehozott szűrő izédre, és a másik sávban Szűrő hozzáadása gomb.
Ha nincs ilyen gomb, CTRL+R-t nyomj, vagy jobb kattintás, és Szűrők megjelenítése/elrejtése gomb.
Végül írd be ezt: https://coin-hive.com/*
Ugyanígy ezt is írd be: https://coinhive.com/*
(A két oldal ugyanaz, de mivel más a domain cím, mindkettőt tiltólistára kell tenni, hogy mindkettőt tiltsa. Értelemszerűen..)

És végül is kész. Ha most mész erre a weboldalra (katt ide), és az egész kizárólag fehér alapon fekete szöveg (esetleg kékes aláhúzott hivatkozásokkal), és minden bal oldalt van, akkor jól csináltad. Innentől nem tölt be semmit erről az oldalról, pl. a gépedre nézve ártalmas kódokat a böngésződ..


Még annyit - a filmezz.eu-n sincs ám mindenhol ott ez a f0sc0in bányászat. Csak azon a részén, ahol az indítható film is megjelenik. Van azért eszük. Így úgy tűnik, mintha a film foglalná a gépet.. Ja, 100%-ot folyamatosan. Valószínű is..

Továbbá ez most (ahogy gyors körbenéztem)  igaz minden illegális tartalmat futtató weboldalra, amit nem hatalmas cég üzemeltet. Értendő: ahol sok film, zene található ingyen pl. (ugyanis ez nem legális, még akkor sem, ha csak más oldalról idézi be önmagára őket, és lista-szerűen kigyűjtögetve van rá).
Tehát az Indavideo az nem káros valószínűleg, mert az Index üzemelteti, ellenben a sorozatbarát az igen. És a többi..

További részletes információk itt.

IV. Pákász Futam 2017. szeptember 24., vasárnap - 8:55


Ez volt tegnap. Nagyon hülyén jött össze az egész, mert én az egész versenyről tegnapelőtt dél környékén szereztem tudomást. Vagyis arról, hogy most lesz. Tavaly kihagytam, szóval idén szerettem volna indulni rajta.

Úgy értesültem elsőre, hogy 3000 Ft a nevezési díj, de mint kiderült, 4000, ha huszadika után jelentkezünk (pl. a helyszínen). Sebaj.

Már lényegében hónapok óta nem futottam (utoljára a IV. Megye futáskor [április 1. környéke]). Legfeljebb ilyen 1-2 km-es távokat, ami nem túl sok (és azt sem manapság). Szóval felkészülésem nem volt, és így időm sem rá (jó, hát nem néztem utána, hogy mikor lesz, majd legközelebb.. fene számított rá).

Valamint busz és vonat sem volt igazán, szombati nap lévén.. :D Volt egy reggel 7-es busz, meg egy 10-es vonat, utána már csak d.u. 2 óra utáni busz-vonat volt (oda), ami már nem jó, hiszen 2-kor kezdődött a futás. Szóval bringával mentem Szeghalomra. 11-kor indultam, gondoltam lesz időm bőven kipihenni magam, ha délre odaérek. ~23 km távolság otthonról kb. a szeghalmi könyvtárig.

De ez semmi. Ugyanis út közben összefutottam Szeghalomra beérvén a BSI futónagykövetével, Tóth Lászlóval. Ő a Megye futás megalkotója, így már pár alkalommal futottam vele, meg beszéltünk. Szóval bekísértem. Megemlítette, hogy egyébként Békéscsabáról futva jött ide Szeghalomra (50 km). ^^ ( Hát, hú. Szóval én meg sem mukkanok a kis 20 km bringázásért. )

Haladtunk a könyvtár felé
Odaértünk, már egész nagy tömeg volt szétszórva, pedig még korán volt.
Nekem ugye ez még az első versenyem volt, így nem voltam mindennel tisztában, de végül is le tudtam rakni a biciklim, és átvettem a rajtszámomat is, kaptam egy kezdőcsomagot. Volt benne jó pár reklámpapír (K&H pl.), a támogatóktól. De aminek örültem, egy Hell is volt benne (meg egy müzli szelet, és egy kis víz).

A csomagmegőrző is működött, oda vissza is rakattam mindenem.
Negyedmaratont vállaltam be (10,5 km), ami két kört jelentett a pályán. Felkészülés nélkül nem volt a legjobb ötlet, de az 5 km az túl rövid lett volna..


Volt családi futás is (500 m), a sok kicsi ügyesen futott. Volt gyerektáv, 1.2 km. Aztán közösen indult az 5km+ távon futó tömeg 14:00-kor.

Volt egy-két érdekesség. Az egyik, hogy egy srác a kutyájával futott. :D Egy nő pedig a kisgyerekével a karjában. És pár katasztrófavédelmis (tűzoltó) teljes menetfelszerelésben lefutotta az 5 km távot.
Az összes induló hihetetlen kitartással, állóképességgel adott bele mindent, gratulálok mindenkinek. Durván ösztönző volt, hogy milyen jól bírják.

A második köröm végéhez közeledve (kb 1 km volt hátra a 10-ből) utolért Tóth Laci, próbáltam tartani vele a tempót (és akkor ő már lefutott 50 + 9 km-t), egy kis ideig sikerült, aztán végül lemaradtam, 4-en meg is előztek, megálltam picit. Hát, már végem volt, mondhatjuk. De aztán a 10 másodperces pihenő után azt a 4 embert visszaelőztem, az utolsó 100 méterig. Így végül Laci után értem be a "célba" (ő ugyan futott tovább, még volt 2 köre), 50 méter távolsággal.

Az eredményeket nem nagyon vártam meg, ugyanis nekem még haza is kellett tekerni, mert barátnőm másnap (ma) indul vissza az egyetemre, szóval nem sok időnk van közösen. Kikerült a negyedmaratont futó férfi abszolút eredmény, 12. helyezett lettem. (Férfi korcsoportban még nem tudom, még az is lehet, hogy első, mert nem nagyon volt előttem velem kb. egykorú-fiatalabb fiú, lány viszont igen.. ^^)

Edit: itt a lista, ha a honlapon nincs is fent (még). Végignézegettem, ez alapján a férfi korcsoportomban 2. vagyok negyedmaratonon, a vegyes korcsoportomban (fiúk+lányok 14-20 közt) negyedik.


Az egész apropója hazafelé a bogarak voltak. Tízesével fújta a képembe a szél őket, kis muslicaszerű valamiket. Meg a ruhámra, meg a hajamba... Pfhejj.. Már máskor is jártam így, sőt, a futás napján odafelé bringázva is megjártam velük. Csak hazafelé még Ladány után meg is áztam, aztán abbamaradt az eső, csak szembe szél volt. Az is elég kegyetlen volt, de mire Ványára beértem, meg is száradtam..

Jó kis első negyedmaraton volt.

Egyéb: azt hiszem ideje lesz jövőtavaszra tényleg beruháznom egy JÓ futócipőre és zoknira. A mostani cipőm belsejében a talpa már össze-vissza van gyűrődve, ezt már kezdtem érezni az első kör vége felé is.
Itthon pedig láttam is, mi lett az eredménye:

[ Katt, ha akarsz lábfejeket látni.. ]