Fog of War ötlet
Már nem is tudom mióta csücsül itt ez draft verzióban, de akkor most kiposztolom.
Volt egy ötletem, meg is valósítottam, csak még nem tudom mibe fogom beleépíteni. Egyszerűen arról van szó, hogy nem látjuk a pálya egészét, mint ahogy sok stratégiai játékban sem. Ezzel is nehezítve/izgalmasabbá téve a dolgokat.
Még nem túl kifinomult a módszer, így csak fekete-fehérben működik, de kiterjeszteni színesre már nem olyan nagy dolog. A látható rész színes, minden más fekete-fehér.
Az ötlet maga pofon egyszerű. Egymára rajzoljuk a rétegeket és így az látszik, ami legfelül van. Értelem szerűen a következő sorrendben érdemes felrajzolni a canvasra a rétegeket: fekete háttér, fehér kör (ahol látszanak a dolgok), majd feketével a minták.
Egyelőre még nem vettem hasznát ennek az apró ötletnek, már azon túl persze, hogy megírtam a példaprogit. Amit meg is lehet nézni, sőt ki is lehet próbálni. Appletes cucc, egy újabb kísérlet. Ide wordpressbe nem sikerült beágyazni, nem nagyon hagyta magát, de van link, természetesen. Itt lehet megtalálni a cuccot.
Csak zárójelben mondom, hogy a wordpress szolgáltatása iszonyat lassú (fél perc mire betölti ezt a szerkesztő felületet, pedig nem szar a net itthon). Nem tudom, hogy ez a motor hibája-e, vagy a wordpress.com nem tud normális sebességet produkálni. Nem is érdekel. Lehet, hogy váltok valami jól beváltra. Saját domain nem kell, jó valami ilyen közösségi és ingyenes oldal.
Chrome extensions
Mai nap hivatalosan is elindították. Már eddig is elérhető volt a fejleszői változatot használók részére, de ma a nagyközönség számára is megnyílt. Rögtön rá is vetettem magam, mert már csak ez hiányzott, hogy tényleges alternatívája legyen a Firefoxnak. Már régóta használom a Chrome-ot, mert a sebességet előbbre tartom a funckionalitásnál, de most ez a hátránya is megszűnt.
Egyelőre még nem túl nagy a választék, de a fontosabb dolgokat már lefedik az eddig megjelent pluginnek. GMail és GReader figyelő, delicious, adblock, mouse gestures. Az életben maradáshoz szükségesek szerencsére már megbízhatóan működnek.
A pluginnek használatához Chrome 4.0.x verziójú szükséges, ami jelenleg beta állapotú, de nálam megbízhatóan fut már pár napja. Eddig egyszer sem omlott össze, ha a gép ki van nyitva, akkor állandóan fut a böngésző (és sajnos/nem sajnos ez elég sok üzemórát jelent).
Telepíteni és használni gyerekjáték a Chrome pluginneket. A fejlesztésbe eddig még nem kóstoltam bele, de a jövőben ez sem kizárt. A Google erősen épít a felhasználóira és az önkéntes fejlesztőire, szóval kellő segítséget találunk, ha bele akarunk vágni.
További infókat a Chromium blogon és a Google Chrome hivatalos blogján találunk. Ja, és persze a legfontosabb: az extension library.
Duplabufferelés
Dobjunk fel a formunkra egy rajzvásznat (vagy nevezzük canvasnak, ha úgy tetszik), rajzoljunk rá valamit, majd töröljük le. Tegyük ezt meg újra és újra, sokszor egymás után. Ha csak kicsit változik a kép, és ezt elég sűrűn teszi, akkor úgy tűnik, minhta mozognának az alakzatok a vásznon. Innen már csak egy ötlet és kitartás kérdése, s már is egy egyszerű kis játék büszke szerzői lehetünk.
Az örömünk mégsem teljes, mert a kép furcsán villódzik. Érthető is ez, mert ha csak a másodperc tört részére, de akkor is letöröljük a képernyőt és ezalatt csak a nagy fehérség látszik, aztán megint a kép, amit mutatni szeretnénk. Idegesítő jelenség, de szerencsére a megoldást tálcán nyújtják felénk csak el kell fogadni.
Pong – határidő
Ma van a házi leadási határidő, így kénytelen voltam néhány kompromisszumot kötni, hogy elkészüljek időben. A kimaradt feature-ket lehet, majd még később megvalósítom, de egyelőre be kell érni annyival, ami van.
A tovább után képekkel, jó hosszan.
Mi fán terem az MVC?
Néha ilyen elméletet tárgyaló cikkek is lesznek, már amennyire tőlem telik. Nem lesz tudományos színvonal, de azért érthető lesz.
Elsőnek az MVC-t veszem elő, ha már a Pong projekt kapcsán úgyis beleütköztem és használtam. Az MVC feloldása a Model-View-Control. Ez egy tervezési minta, aminek a lényege, hogy három elkülönülő részre bontjuk a programunkat. Modellre, a megjelenítőre és a vezérlőre. Ezen tervezési minta használatának több előnye is van. Az egyes részek fejlesztése teljesen elkülöníthető, csak az interfészek ismerete szükséges. Egy modellhez több egymástól független megjelenítő és vezérlő is kapcsolható és ezek akár különbözhetnek is (pl. konzolos vagy grafikus megjelenítés).
A modell a nevéből adódóan a modellt tartalmazza. Ez a program “lényegi” része, ide pakoljuk bele az üzleti logikát, azaz itt kap értelmet a puszta adat. Az adatokat sokszor adatbázisban tároljuk, az adatelérés is a modellhez tartozik (az MVC nem különböztet meg külön adatelérési réteget). A Pong program esetében ez például a pályát és a rajta lévő egységeket menedzselő rész. Nyilvántartja, hogy mi hol van a pályán, mekkora a sebessége a labdának, vagy éppen azt számolja ki, hogy a labda a következő lépésnél visszapattanjon, vagy haladjon tovább egyenesen.
A view, azaz a megjelenítő az adatok megjelenítéséért felel. Nem kell semmit tudnia a modell működéséről, csak az adatokat kell elkérnie tőle. Innentől már mindent megold maga. A Pong esetében egy Canvas-ra rajzoljuk ki a pályát és a rajta lévő elemeket.
A control, azaz a vezérlő egység interakciót biztosít a felhasználó számára. Jellemzően eseményeket dolgoz fel és válaszol rájuk.
A három rész együttes működését az alábbi ábra mutatja:
Beérkezik egy esemény, amit a vezérlő feldolgoz. Ezután értesíti a modellt és a megjelenítőt a változásokról. A modell elvégzi a saját feladatát, majd értesíti a megjelenítőt, s elküldi neki az új adatokat. A megjelenítő frissíti magát, majd minden kezdődik előröl, mikor egy másik esemény üt be.
Fontos megjegyezni, hogy a view nem fér hozzá közvetlenül a modellhez, és fordítva. A kapcsolatot a controller tartja fenn.
A teljes elszaparálást nagyon nehéz fentartani, ez megmutatkozott a Pong fejlesztése közben is. Viszont érdemes törekedni rá, mert ha csorbul az egyes részek szuverenitása, utána nehezebb új megjelenítőt vagy vezérlőt csatlakoztatni a modellre.
Bugfix: labda beragadás
Ma egészen sokat haladtam a Ponggal. Már csak csinosítgatni kell, a váz már teljes. Egyedül a szintlépés és az újrakezdés hiányzik a lényegi funkciók közül.
A téglák színkódolása kész, ezzel együtt az is, hogy mindig olyan színük van, ahányszor meg kell ütni őket. 3 különböző pályát is építettem a programba, de a végtelenségig lehet játszani, mert a 4. szinttől generál magának véletlenszerű pályákat. A téglákat is helyre tettem, így már mindig jól pattan vissza róluk a labda, s nem képes tarolásra.
A mai legfontosabb eredmény mégis a labda beragadásának kiküszöbölése. Az oka elég trükkös és nem két perc ment el vele, míg rájöttem mi és miért történik.
Nem szinkronizációs probléma okozta, de nem is a feltételek voltak rosszak. A probléma gyökere abban keresendő, hogy az érzékelés felbontása túl nagy volt, azaz túl sűrűn mozdult a labda, így egyszerre csak nagyon keveset haladhatott (néhány pixel), hogy még követhető maradjon. Ennek következtében a labda ugyan visszapattant, de nem került elég messze az ütőtől. Az ütő mozdulhatott és mozdult is míg a labda mozgott, és így a labda újra belekerült az ütő hatókörébe. Ekkor megint irányt változtatott a labda, de már rossz irányba (eddig távolodott volna az ütőtől), és ezért indult el az ütő belseje felé.
A fenti ábrán a beérkező állapot látható. Az ütő körül a labda r sugarú környezetét ellenőrizzük. Ha ide belép a labda középpontja, akkor pattan vissza. (Sajnos az ábra nem méretarányos. :)) A lenti ábrán már a kilépés látható, de az ütő mozdulása következtében még mindig a hatókörön belül van. A sebesség megfordul, és így irány az ütő belseje.
A megoldás viszont tényleg nagyon egyszerű. A labda tudja magáról, hogy visszapattant-e az ütőről. Mikor visszapattan a hitByRacket boolean változó igaz lesz, s majd csak akkor válik megint hamissá, ha valami máshoz is hozzáért (fal, tégla, esetleg kiesett a pályáról). A visszapattanás előtt ellenőrizzük, hogy kétszer ne pattanhasson vissza a labda (hitByRacket igaz-e) az ütőről. Ezzel garantáljuk, hogy nem ragad be sohasem.
Projekt: Pong – a kezdetek
Elsőként, az éppen futó Pong projektet kezdem ide felvezetni. Egyetemi házi feladat, főleg a nyelvi elemek elsajátítása céljából.
Feladat: egyszerű faltörő játék. Ennél pontosabb feladatkiírás nem volt, csupán néhány technológiai elvárás a feladattal kapcsolatban, ezért rendes specifikáció nem készült. Bár az “egyszerű faltörő játék” már egészen jól leírja miről is van szó.
Chromium OS
Mielőtt beleugranék az éppen futó projektembe, vessünk néhány pillantást a most bejelentett Google operációs rendszerre, a Chrome OS-re.
Elindulunk
Ezt is megértük. Elindulunk végre. Most még bizakodó királyi többes van, mert ha talán egyszer beindul a dolog, majd csatlakoznak még szerzők; ezt előlegezem meg most.
Tetszik ez a WordPress motor, a szolgáltatás egyetlen hibája, hogy néhány funkcióért fizetni kéne, amihez nincs kedvem és forrásom se. Szóval fapados marad a dizájn például.
Így az elején még sok ötletem van, és még lendületben is vagyok, szóval várható értelmes tartalom is, de ahogy a tagline is mondja, rendszertelen frissülésre lehet készülni. :)

