2. Beadandó feladat dokumentáció

Hasonló dokumentumok
1. Beadandó feladat dokumentáció

3. Beadandó feladat dokumentáció

2. Beadandó feladat dokumentáció

Eseményvezérelt alkalmazások fejlesztése II 8. előadás. Összetett WPF alkalmazások. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

3. Beadandó feladat dokumentáció

2. Beadandó feladat dokumentáció

2. Beadandó feladat dokumentáció

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

Komponens alapú szoftverfejlesztés 9. előadás. Grafikus felületű alkalmazások architektúrái. Giachetta Roberto

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

3. Beadandó feladat dokumentáció

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Cserép Máté

ELTE, Informatikai Kar december 12.

ReszlAd fájl, kitöltési útmutató:

Jelentkezési lap képző szervek részére

1. beadandó feladat: egyszerű grafikus felületű alkalmazás. Közös követelmények:

Eseményvezérelt alkalmazások fejlesztése II 7. előadás. WPF alkalmazások architektúrája. Giachetta Roberto

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

Sú gó az ASIR/PA IR Públikús felú lethez

DKÜ ZRT. A Portál rendszer felületének általános bemutatása. Felhasználói útmutató. Támogatott böngészők. Felületek felépítése. Információs kártyák

Eseményvezérelt alkalmazások fejlesztése II 11. előadás. Window Runtime specifikus alkalmazások megvalósítása. Giachetta Roberto

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Java Programozás 11. Ea: MVC modell

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

A program modelljéhez automatikusan futtatható egység-teszteket kell készíteni.

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Window Runtime alapismeretek, Modern UI alapú alkalmazások.

Szöveges fájlok szerkesztése Jegyzettömb használata

C#---Access adatbáziskezelési gyakorlat

Aromo Szöveges értékelés normál tantárggyal

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

Alkalmazott modul III 3. feladatcsoport. Közös követelmények:

Aromo Szöveges Értékelés

ContractTray program Leírás

Segédlet online felület használatához

LETÉTKEZELŐ NYILVÁNTARTÁSI RENDSZER

Diákigazolvány. Belépés> Adminisztráció> Iskolai oktatás képes menü> diákigazolvány> diákigazolvány igénylés

VARIO Face 2.0 Felhasználói kézikönyv

PwC EKAER Tool felhasználói leírás május

Kezdő lépések Outlook Web Access

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Window Runtime alapismeretek. Windows Runtime alapismeretek A Windows Runtime

Eseményvezérelt alkalmazások fejlesztése II 4. előadás. Windows Forms alkalmazások architektúrája és tesztelése. Giachetta Roberto

ClicXoft programtálca Leírás

DebitTray program Leírás

Thermo1 Graph. Felhasználói segédlet

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Aromo Szöveges értékelés kódolt tantárggyal

Ügyfélkapuból hivatalos ügy indítása

HVK Adminisztrátori használati útmutató

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla

Átutalási csomag karbantartó modul

ONLINE SZAKÉRTŐI KERETRENDSZER

Tájékoztató. Használható segédeszköz: -

Felhasználói dokumentáció. a TávTagTár programhoz. Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43

ServiceTray program Leírás

1. Bevezetés. Főkönyv ablakon (1. ábra) az Új rekord felvitele ( vegyes tétel rögzítése (2. ábra).

Cikktípusok készítése a Xarayában

SEGÉDLET a GYÓGYSZERÉSZI ADATGYŰJTÉS OSAP1578 program használatához

KTI Közlekedéstudományi Intézet Nonprofit Kft. Vasúti Vizsgaközpont

Kézikönyv. Szelekciós jegyzék létrehozása

UnasShop - Affiliate partnerek beállítása

Tisztelt Felhasználó!

INGATLANVAGYON-KATASZTER SZAKRENDSZER

1. A berendezés programozása

Programozási technológia

QGIS tanfolyam (ver.2.0)

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

Kirakós játék. Döntő február 22. Alakzatok (katalógus) DUSZA ÁRPÁD ORSZÁGOS PROGRAMOZÓI EMLÉKVERSENY 2013/2014

AWK programozás, minták, vezérlési szerkezetek

Elmib Önkormányzati hibabejelentő. Felhasználói kézikönyv v1.0

Delphi programozás I.

Albacomp RI Rendszerintegrációs Kft Székesfehérvár, Mártírok útja 9. E K O P - 1. A. 2 - A D A T Á L L O M Á N Y O K

FELHASZNÁLÓI ÚTMUTATÓ

Az ErdaGIS térinformatikai keretrendszer

Eseményvezérelt alkalmazások fejlesztése II 7. előadás. WPF alkalmazások architektúrája. WPF alkalmazások architektúrája

Hiteles Elektronikus Postafiók

Ügyfélforgalom számlálás modul

A Novitax ügyviteli programrendszer első telepítése

Változáskezelés Verzió Dátum Változás Pont Cím Oldal Kiadás: Verzió: 2.0. Oldalszám: 2 / 8

Közoktatási Statisztika Tájékoztató 2012/2013. Használati útmutató

Mio Technology Limited C510, C710. Gyors használati utasítás a Mio Map v3 programhoz. Magyar

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Bevezetés a QGIS program használatába Összeálította dr. Siki Zoltán

Eseményvezérelt alkalmazások

Microsoft Excel 2010

Választó lekérdezés létrehozása

Adóhátralék kezelés egyszerűen. Telepítési útmutató. A program futtatásához Windows XP, Windows 7, 8 operációs rendszer szükséges.

Készítsen egy adatbázist (egytáblásat) egy számítástechnikai tanfolyam résztvevőiről. Az adattábla rögzítse a következőket:

ÚTMUTATÓ az RVTV portálon történő ciklus beállításhoz

HASZNÁLATI ÚTMUTATÓ DOLGOZÓK IMPORTÁLÁSA KULCS BÉR PROGRAMBA AZ ONLINE MUNKAIDŐ NYILVÁNTARTÓ RENDSZERBŐL. Budapest, november 08.

TERC V.I.P. hardverkulcs regisztráció

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Tartalom jegyzék 1 BEVEZETŐ SZOFTVER ÉS HARDVER KÖVETELMÉNYEK 2 2 TELEPÍTÉS 2 3 KEZELÉS 5

CÍMJEGYZÉK ÜDVÖZLÜNK A TALK FUSION CÍMJEGYZÉK HASZNÁLATI ÚTMUTATÓJÁBAN

Hungaropharma Zrt. WEB Áruház felhasználói útmutató. Tartalomjegyzék

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

Változás bejelentés / támogatási szerződésmódosítási kérelem beadása

A LOGO MOTION TANÍTÁSA

TÍPUSDOKUMENTUMOK KÉSZÍTÉSE

Átírás:

2. Beadandó feladat dokumentáció Készítette: Giachetta Roberto E-mail: groberto@inf.elte.hu Feladat: Készítsünk egy Sudoku játékprogramot. A Sudoku egy olyan 9 9-es táblázat, amelyet úgy kell a 0-9 számjegyekkel kitölteni, hogy minden sorában, minden oszlopában és minden házában egy számjegy pontosan egyszer szerepeljen. (Házaknak a 9 9-es táblázatot lefedő, de egymásba át nem érő kilenc darab 3 3 résztáblázatot nevezzük.) A 81 darab kis négyzet bármelyikére kattintva a négyzet felirata változzon meg: az üres felirat helyett 1-esre, az 1-es helyett 2-esre, és így tovább, végül a 9-es helyett üresre. Ennek megfelelően bármelyik négyzeten néhány (legfeljebb kilenc) kattintással egy tetszőleges érték állítható be. Egy adott négyzeten történő kattintgatás esetén soha ne jelenjék meg olyan szám, amely az adott négyzettel egy sorban, egy oszlopban vagy egy házban már szerepel. A program számolja a játékos lépéseit, valamint az eltelt időt. A programnak támogatnia kell új játék kezdését, játék betöltését, valamint mentését. Betöltéskor a már kitöltött mezőket ne lehessen állítani. Hasonlóan, új játék kezdésekor legyen véletlenszerűen kitöltve pár mező, amelyeket utólag nem lehet módosítani. Ezen felül a program nehézségi szinteket is kezeljen, amely meghatározza a játék maximális idejét (ezért a hátralévő időt jelenítsük meg), valamint új játék esetén az előre beállított mezők számát. Elemzés: A játékot három nehézségi szinttel játszhatjuk: könnyű (60 perc, 6 generált mező), közepes (20 perc, 12 előre generált mező), nehéz (10 perc, 18 előre generált mező). A program indításkor közepes nehézséget állít be, és automatikusan új játékot indít. A feladatot egyablakos asztali alkalmazásként Windows Presentation Foundation grafikus felülettel valósítjuk meg. Az ablakban elhelyezünk egy menüt a következő menüpontokkal: File (Új játék, Játék betöltése, Játék mentése, Kilépés), Beállítások (Könnyű játék, Közepes játék, Nehéz játék). Az ablak alján megjelenítünk egy státuszsort, amely a lépések számát, illetve a hátralévő időt jelzi. A játéktáblát egy 9 9 nyomógombokból álló rács reprezentálja. A nyomógomb egérkattintás hatására megváltoztatja a megjelenített számot (animáció kíséretében). A számot változtatáskor egyesével növeljük, és csak azokat az értékeket engedjük, amelyek még nem szerepelnek az adott sorban, oszlopban és házban. A táblán az előre betöltött, illetve generált mezőket nem engedjük megváltoztatni, ezeket sárgával jelöljük. 1

A játék automatikusan feldob egy dialógusablakot, amikor vége a játéknak (kiraktuk a táblát, vagy letelt az idő). Szintén dialógusablakokkal végezzük el a mentést, illetve betöltést, a fájlneveket a felhasználó adja meg. A felhasználói esetek az 1. ábrán láthatóak. Kilépés Játék vége Mentés «invokes» Lépés Felhasználó Betöltés «precedes» «invokes» «precedes» Nehézség állítása Új játék «invokes» Játékidő múlása «include» «include» «include» Könnyű Közepes Nehéz 1. ábra: Felhasználói esetek diagramja Tervezés: Programszerkezet: A programot MVVM architektúrában valósítjuk meg, ennek megfelelően View, Model, ViewModel és Persistence névtereket valósítunk meg az alkalmazáson belül. A program környezetét az alkalmazás osztály (App) végzi, amely példányosítja a modellt, a nézetmodell és a nézetet, biztosítja a kommunikációt, valamint felügyeli az adatkezelést. A program csomagszerkezete a 2. ábrán látható. 2

2. ábra: Az alkalmazás csomagdiagramja Perzisztencia (3. ábra): Az adatkezelés feladata a Sudoku táblával kapcsolatos információk tárolása, valamint a betöltés/mentés biztosítása. A SudokuTable osztály egy érvényes Sudoku táblát biztosít (azaz mindig ellenőrzi a beállított értékek), ahol minden mezőre ismert az értéke (_fieldvalues), illetve a zároltsága (_fieldlocks). Utóbbit a játék kezdetekor generált, illetve értékekre alkalmazzuk. A tábla alapértelmezés szerint 9 9-es 3 3-as házakkal, de ez a konstruktorban paraméterezhető. A tábla lehetőséget az állapotok lekérdezésére (IsFilled, IsLocked, IsEmpty, GetValue), valamint szabályos léptetésre (StepValue), illetve direkt beállítás (SetValue, SetLock) elvégzésére. A hosszú távú adattárolás lehetőségeit az ISudokuDataAccess interfész adja meg, amely lehetőséget ad a tábla betöltésére (Load), valamint mentésére (Save). A műveleteket hatékonysági okokból aszinkron módon valósítjuk meg. Az interfészt szöveges fájl alapú adatkezelésre a SudokuFileDataAccess osztály valósítja meg. A fájlkezelés során fellépő hibákat a SudokuDataException kivétel jelzi. A program az adatokat szöveges fájlként tudja eltárolni, melyek az stl kiterjesztést kapják. Ezeket az adatokat a programban bármikor be lehet tölteni, illetve ki lehet menteni az aktuális állást. 3

A fájl első sora megadja a tábla méretét, valamin a házak méretét (ami alapértelmezés szerint 9 és 3). A fájl többi része izomorf leképezése a játéktáblának, azaz összesen 9 sor következik, és minden sor 9 számot tartalmaz szóközökkel választva. A számok 0-9 közöttiek lehetnek, ahol 0 reprezentálja a még üres mezőt. SudokuTable - _regionsize :Int32 - _fieldvalues :Int32 ([,]) - _fieldlocks :Boolean ([,]) + SudokuTable() + SudokuTable(Int32, Int32) + IsEmpty(Int32, Int32) :Boolean + IsLocked(Int32, Int32) :Boolean + GetValue(Int32, Int32) :Int32 + SetValue(Int32, Int32, Int32, Boolean) :void + StepValue(Int32, Int32) :void + SetLock(Int32, Int32) :void - CheckStep(Int32, Int32) :Boolean + IsFilled() :Boolean + RegionSize() :Int32 + Size() :Int32 «indexer» + this(int32, Int32) :Int32 «interface» ISudokuDataAccess + LoadAsync(String) :Task<SudokuTable> + SaveAsync(String, SudokuTable) :Task SudokuFileDataAccess «async» + LoadAsync(String) :Task<SudokuTable> + SaveAsync(String, SudokuTable) :Task Exception SudokuDataException + SudokuDataException() 4. ábra: A Persistence csomag osztálydiagramja Modell (4. ábra): A modell lényegi részét a SudokuGameModel osztály valósítja meg, amely szabályozza a tábla tevékenységeit, valamint a játék egyéb paramétereit, úgymint az idő (_gametime) és a lépések (_gamestepcount). A típus lehetőséget ad új játék kezdésére (NewGame), valamint lépésre (StepGame). Új játéknál megadható a kiinduló játéktábla is, különben automatikusan generálódnak kezdő mezők. Az idő előreléptetését időbeli lépések végzéséve (AdvanceTime) tehetjük meg. A játékállapot változásáról a GameAdvanced esemény, míg a játék végéről a GameOver esemény tájékoztat. Az események argumentuma (SudokuEventArgs) tárolja a győzelem állapotát, a lépések számát, valamint a játékidőt. A modell példányosításkor megkapja az adatkezelés felületét, amelynek segítségével lehetőséget ad betöltésre (LoadGame) és mentésre (SaveGame) 4

A játék nehézségét a GameDifficulty felsorolási típuson át kezeljük, és a SudokuGame osztályban konstansok segítségével tároljuk az egyes nehézségek paramétereit. SudokuGameModel - GameTimeEasy :Int32 = 3600 - GameTimeMedium :Int32 = 1200 - GameTimeHard :Int32 = 600 - GeneratedFieldCountEasy :Int32 = 6 - GeneratedFieldCountMedium :Int32 = 12 - GeneratedFieldCountHard :Int32 = 18 - _dataaccess :ISudokuDataAccess - _table :SudokuTable - _gamedifficulty :GameDifficulty - _gamestepcount :Int32 - _gametime :Int32 -_gamedifficulty «enumeration» GameDifficulty Easy Medium Hard + SudokuGameModel(ISudokuDataAccess) + NewGame() :void + AdvanceTime() :void + Step(Int32, Int32) :void - GenerateFields(Int32) :void - OnGameAdvanced() :void - OnGameOver(Boolean) :void + GameStepCount() :Int32 + GameTime() :Int32 + Table() :SudokuTable + IsGameOver() :Boolean + GameDifficulty() :GameDifficulty + GameAdvanced() :EventHandler<SudokuEventArgs> + GameOver() :EventHandler<SudokuEventArgs> «async» + LoadGameAsync(String) :Task + SaveGameAsync(String) :Task SudokuEventArgs - _gametime :Int32 - _steps :Int32 - _iswon :Boolean EventArgs + SudokuEventArgs(Boolean, Int32, Int32) + GameTime() :Int32 + GameStepCount() :Int32 + IsWon() :Boolean 4. ábra: A Model csomag osztálydiagramja Nézetmodell (5. ábra): A nézetmodell megvalósításához felhasználunk egy általános utasítás (DelegateCommand), valamint egy ős változásjelző (ViewModelBase) osztályt. A nézetmodell feladatait a SudokuViewModel osztály látja el, amely parancsokat biztosít az új játék kezdéséhez, játék betöltéséhez, mentéséhez, valamint a kilépéshez. A parancsokhoz eseményeket kötünk, amelyek a parancs lefutását jelzik a vezérlőnek. A nézetmodell tárolja a modell egy hivatkozását (_model), de csupán információkat kér le tőle, illetve a játéknehézséget szabályozza. Direkt nem avatkozik a játék futtatásába. A játékmező számára egy külön mezőt biztosítunk (SudokuField), amely eltárolja a pozíciót, szöveget, engedélyezettséget, valamint a lépés 5

parancsát (StepCommand). A mezőket egy felügyelt gyűjteménybe helyezzük a nézetmodellbe (Fields). INotifyPropertyChanged ViewModelBase # ViewModelBase() # OnPropertyChanged(String) :void + PropertyChanged() :PropertyChangedEventHandler SudokuField - _islocked :Boolean - _text :String + IsLocked() :Boolean + Text() :String + X() :Int32 + Y() :Int32 + Number() :Int32 + StepCommand() :DelegateCommand * SudokuViewModel - _dispatcher :Dispatcher - _model :SudokuGameModel + SudokuViewModel(SudokuGameModel) - RefreshTable() :void - StepGame(Int32) :void - Model_GameOver(object, SudokuEventArgs) :void - Model_GameAdvanced(object, SudokuEventArgs) :void - OnNewGame() :void - OnLoadGame() :void - OnSaveGame() :void - OnExitGame() :void + NewGameCommand() :DelegateCommand + LoadGameCommand() :DelegateCommand + SaveGameCommand() :DelegateCommand + ExitCommand() :DelegateCommand + Fields() :ObservableCollection<SudokuField> + GameStepCount() :Int32 + GameTime() :String + IsGameEasy() :Boolean + IsGameMedium() :Boolean + IsGameHard() :Boolean + NewGame() :EventHandler + LoadGame() :EventHandler + SaveGame() :EventHandler + ExitGame() :EventHandler DelegateCommand - _execute :Action<Object> {readonly} - _canexecute :Func<Object, Boolean> {readonly} ICommand + DelegateCommand(Action<Object>) + DelegateCommand(Func<Object, Boolean>, Action<Object>) + CanExecute(Object) :Boolean + Execute(Object) :void + RaiseCanExecuteChanged() :void + CanExecuteChanged() :EventHandler 5. ábra: A nézetmodell osztálydiagramja Nézet: A nézet csak egy képernyőt tartalmaz, a MainWindow osztályt. A nézet egy rácsban tárolja a játékmezőt, a menüt és a státuszsort. A játékmező egy ItemsControl vezérlő, ahol dinamikusan felépítünk egy rácsot (UniformGrid), amely gombokból áll. Minden adatot adatkötéssel kapcsolunk a felülethez, továbbá azon keresztül szabályozzuk a gombok színét is. A fájlnév bekérését betöltéskor és mentéskor, valamint a figyelmeztető üzenetek megjelenését beépített dialógusablakok segítségével végezzük. 6

Környezet (5. ábra): Az App osztály feladata az egyes rétegek példányosítása (App_Startup), összekötése, a nézetmodell, valamint a modell eseményeinek lekezelése, és ezáltal a játék, az adatkezelés, valamint a nézetek szabályozása. A játék léptetéséhez tárol egy időzítőt is (_timer), amelynek állítását is szabályozza az egyes funkciók hatására. App - _model :SudokuGameModel - _viewmodel :SudokuViewModel - _view :MainWindow - _timer :DispatcherTimer Application + App() - App_Startup(object, StartupEventArgs) :void - Timer_Tick(object, EventArgs) :void - View_Closing(object, CancelEventArgs) :void - ViewModel_NewGame(object, EventArgs) :void - ViewModel_ExitGame(object, System.EventArgs) :void - Model_GameOver(object, SudokuEventArgs) :void «async» - ViewModel_LoadGame(object, System.EventArgs) :void - ViewModel_SaveGame(object, EventArgs) :void 5. ábra: A vezérlés osztálydiagramja Tesztelés: A modell funkcionalitása egységtesztek segítségével lett ellenőrizve a SudokuGameModelTest osztályban. Az alábbi tesztesetek kerültek megvalósításra: SudokuGameModelNewGameEasyTest, SudokuGameModelNewGameMediumTest, SudokuGameModelNewGameHardTest: Új játék indítása, a mezők kitöltése, valamint a lépésszám és nehézség ellenőrzése a nehézségi fokozat függvényében. SudokuGameModelStepTest: Játékbeli lépés hatásainak ellenőrzése, játék megkezdése előtt, valamint után. Több lépés végrehajtása azonos játékmezőn, esemény kiváltásának ellenőrzése. SudokuGameModelAdcanceTimeTest: A játékbeli idő kezelésének ellenőrzése, beleértve a játék végét az idő lejártával. 7