A NetAcademia "Bevezetés az objektumorientált világba: a SNAKE projekt" tanfolyamának kiegészítő kódtára
- egy kígyót irányítunk úgy, hogy a fejének az irányát szabjuk, a kígyó követi a fejét.
- a játékterületen megjelennek ételek, ezeket a kígyónak meg kell ennie.
- a játék célja az, hogy minél több ételt megegyünk.
- a játék vége akkor következik be, ha
- nekimegyünk a falnak
- beleütközünk a saját fakunkba
- minél több ételt eszünk meg, a kígyó
- annál hosszabb
- annál gyorsabb
Kezdőkép
+-------------------------------------------+
| |
| A játékszabályokat megjelenítjük az |
| indulásig |
| |
| |
| |
| |
| |
| |
| |
| ++ |
| ++ |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
+-------------------------------------------+
Játék közben
+-------------------------------------------+
| |
| |
Étel | +--------------------+ | A háttérben a játékinformációk
| | | | áttetsző betűkkel, nem zavaró
+-------> ++ | | <--------módon------+
| ++ | | | A megjelenítéskor animálhatjuk is
| | | |
| +--------------------+ |
| |
| |
| ^^ |
| || |
| || | Kígyó
| || |
| || <---------------------------+
| || |
| || |
| ++ |
| |
| |
| |
| |
| |
+-------------------------------------------+
Záróképernyő
+-----------------------------------+
| |
| |
| |
| |
| |
| A játékinformációk |
| megjelenítése |
| - játék időtartama |
| | kígyó hossza |
| - megevett ételek |
| . top 5 eredménylista |
| |
| |
| |
| |
| |
| |
| |
| |
| |
+-----------------------------------+
Az alkalmazásunk felépítése a következő lesz:
Képernyő (View) Alkalmazás logika (Model)
+---------------------------------------+ +-----------------------------------+
| | | |
| A megjelenítést végzi, illetve | | A feladata a játékmenethez |
| a felhasználó vezérlését fogadja. | | szükséges tudás birtoklása |
| | +---> | Fontos, hogy célunk szerint |
| | | nem tudja, hogy a megjelenítés |
| | <---+ | pontosan mi. |
| | | (Ezt nem tudjuk maradéktalanul |
| | | megoldani a jelenlegi |
| | | tudásunkkal, de egy nagy |
| | | lépést teszünk ebbe az irányba |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
+---------------------------------------+ +-----------------------------------+
- elkészíteni a képernyőt (View: MainWindows.xaml)
- tudnia kell megjeleníteni a kígyó fejét
- ehhez kell a játéktábla
- meg kell tudni jeleníteni a megevett ételek számát
- ehhez kell a játéktábla
- tudnia kell megjeleníteni a játékszabályokat
- tudnia kell elkapni a felhasználó vezérlőparancsait (billentyűleütések), és továbbítni a Model felé.
- tudnia kell megjeleníteni a kígyó fejét
- elkészíteni az alkalmazáslogikát (Model)
- tudnia kell átvenni a billentyűparancsokat
- tudnia kell elindítani a játékmenetet
- el kell tudnia tüntetni a játékszabályokat
- ezt a két réteget összekötni
Játékmenet programozása
- a kígyó megy amerre irányítjuk
- meg kell tudni jeleníteni az eltelt időt
- meg kell tudni jeleníteni a kígyó hosszát
- elgondolkodni az ütközések programozásáról
- csatlakozás a DotNet cápákhoz a facebookon
- meg kell tudni jeleníteni a kígyó hosszát
- a játék kezdetekor megmutatni a kígyót, "ahogy kibújik a kígyóveremből"
- a kígyó testét navigálni a kígyófej mögött
- a kígyó evés után nő
Áttekintő ábra
A kígyó feje
A kígyófarok eleje +------------> + (Head)
(Neck) | |
v v
++ ++ ++
++ ++ ++
^+
++ |
++ <--<----------------+
| |
++ | |
A kígyófarok vége +-----------> ++ <-+ +
(End) A kígyó farka
^ (Tail)
|
|
|
|
|
+
A legmesszebb ez az elem van a kígyó
fejétől, így ez került bele legrégebben
a listába (List<ArenaPosition> Tail),
ahova az új elemek
mindig a legvégére kerülnek, így ez az
elem értelemszerűen a legelső lesz
a listában mindig
- elgondolkodni az ütközések programozásáról
- ha ütközik a fallal vége a játéknak
- ha ütközik magával vége a játéknak
- étel megjelenítése és evés
- az étel megjelenítése
- egyszerre mindig egy étel
- evés
- az étel megjelenítése
- a kígyó evés után gyorsul
- a kígyó evés után nőjön
- helyezzük át a fodds.Remove hívása előtti ellenőrzést a Remove-ba, és az adja vissza, hogy: true=létezett és töröltem, false=nem létezik
- meg kell tudni jeleníteni az eltelt időt
- meg kell tudni jeleníteni a kígyó hosszát
- továbbfejlesztés: egyszerre több étel megjelenítése
- helyezzük át a fodds.Remove hívása előtti ellenőrzést a Remove-ba, és az adja vissza, hogy: true=létezett és töröltem, false=nem létezik
- az ismétlődések kiszervezése
- egy második megjelenítési típus befezetése (Canvas)
Tudnivalók
- A Canvas megjelenítéskor egy Children gyűjteményben rögzíti a megjelenítendő elemeket
- Amilyen sorrendben megjelennek ezek az elemek, olyan sorrendben kerülnek ebbe a gyűjteménybe
- ha törlök ezekből az elemekből, az indexelés megváltozik a tömbnek
Canvas
+-----------------------------------------------+
| |
| 3 |
| +----+ |
| | | +-------------------------------> Children
| +----+ | +---------------------+
| | + | |
| | | | +-----------------+ | 0
| 1 | | | +-----------------+ |
| +-----+ | | | |
| | | +-------------------------------------------> | | +-----------------+ | 1
| +-----+ | | | +-----------------+ |
| 2 | | | |
| +-----+ | | | +-----------------+ | 2
| | | +-----------------> | | +-----------------+ |
| +-----+ | | | |
| | | | |
+-----------------------------------------------+ | | |
| | |
| | |
| +---------+-----------+
| ^
| |
| |
v +-------------->+
Megoldási lehetőségek:
-
RemoveAt() : ehhez ismerni kell az indexet
- létrehozunk mi is egy listát, amiben ugyanazokat az elemeket nyilvántartjuk, mint amit a Canvas.Children nyilvántart. Tehát:
- ha felviszünk egy új elemet, akkor a mi listánkba is felviszünk egy új elemet,
- ha törlünk a Childrenből, akkor töröljük a listánkról is a megfelelő elemet.
- teszünk egyéb megkötéseket, például
- az ételeket mindig a 0. elemre tesszük, (az InsertAt függvény segítségével), így
- mindig az elején lesznek az ételek,
- és mindig a végén a kígyó
- az ételeket mindig a 0. elemre tesszük, (az InsertAt függvény segítségével), így
- létrehozunk mi is egy listát, amiben ugyanazokat az elemeket nyilvántartjuk, mint amit a Canvas.Children nyilvántart. Tehát:
-
Remove() : ehhez meg kell tartani az eredeti elemet
- Nyilván kell tudni tartani a kirajzolt elipsziseket a meglévő adatok mellé
Osztályok leszármaztatása, létrehozás
CanvasPosition ArenaPosition
+------------------------+ +-------------------------+
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | +-----------> | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
+------------------------+ +-------------------------+
A CanvasPosition leszármazottja az ArenaPosition-nek
vagy
Az ArenaPosition ősosztálya a CanvasPosition-nek
ez a kettő ugyanazt jelenti
Ebből az következik, hogyha mi létrehozunk egy CanvasPosition-t,
akkor mindig létrejön egy ArenaPosition példány, ő fogja mindazt
megoldani, amit az ArenaPosition tud.
Ebből az következik, hogy MINDIG tudnuk kell példányosítani egy
ArenaPosition-t.
- vissza kell tudni kapni a kereséskor azt az elemet, amit éppen törölni szeretnénk
- így tudjuk majd törölni a kirajzolt elemet a Canvas.Childrenből
- továbbfejlesztés: egyszerre több étel megjelenítése
- Záróképernyő
- Játék megállítása és újraindítása gomb
- meg kell tudni jeleníteni az eltelt időt
- meg kell tudni jeleníteni a kígyó hosszát
Továbbiak:
- C# lenyűgözö tanfolyam három alkalom
- DotNet Cápák ingyenes sorozat utolsó alkalmai
- A DotNet cápákon fejlesztett alkalmazás a githubon
mindenkit várok a következő tanfolyamon: étterem projekt illetve a Facebokon a dotnet cápák csoportban netacadémia blog: http://netacademia.blog.hu/
Minden nap kódoljatok!