2. Beadandó feladat dokumentáció



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

1. Beadandó feladat dokumentáció

3. 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

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

3. Beadandó feladat dokumentáció

Access adatbázis elérése OLE DB-n keresztül

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

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

Alap számológép alkalmazás

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

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

Analízis modell kidolgozása I.

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

3. gyakorlat Saját adatok használata

Borkereskedő. Dokumentáció a Programozási módszertan elmélete című tárgy beadandó programjához. Magyar Attila mattila@inf.elte.hu

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

A First Businesspost Sender Cockpit használata

CobraConto.Net v0.52

ICR-E DVR ICR-E83H; ICR-E163H ICR-H41; ICR-H81 Felhasználóí kézikönyv ver 2.1

PÉLDATÁR BEGYAKORLÓ FELADAT TÉRBELI FELADAT MEGOLDÁSA VÉGESELEM- MÓDSZERREL

Vizuális programozás gyakorlat

BÉRSTATISZTIKAI PROGRAM HASZNÁLATI ÚTMUTATÓJA

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Telepítési útmutató a Dolphin InvoicePro számlázó program frissítéséhez

4. Gyakorlat ellenőrzött osztályozás

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

Kiskunmajsa és környéke turisztikai térinformatikai alkalmazás

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

Beállítások módosítása

7. Előadás. Makrók alkalmazása. Salamon Júlia. Előadás I. éves mérnök hallgatók számára

2. Beadandó feladat dokumentáció

Új év nyitás ÉV NYITÁS ELŐTT KÉSZÍTSÜNK BIZTONSÁGI MENTÉST A CIN MAPPÁTÓL!

Intellio Video System 2. Csatlakozási útmutató a demószerverhez

2. Beadandó feladat dokumentáció

Kezdő lépések Virtuális Tárgyaló

NETFIT modul Tanári felület Felhasználói útmutató. Magyar Diáksport Szövetség

Kezdeti Útmutató a Szolgáltatáselemző Rendszer használatához. vezetők számára. Tartalom

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

SmartLink-G SmartLink-GP GSM hívó. Programozói leírás

Kezdő lépések Biztonsági mentés

AZ ELEKTRONIKUS ÉPÍTÉSI NAPLÓ

Gábor Dénes Számítástechnikai Emlékverseny 2012/2013. Döntő. Alkalmazói kategória IV. korcsoport

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

Kezelési leírás a FEC01/06 típusú programozható és távműködtethető lángeffekt vezérlő készülékhez

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

Operációs rendszerek Windows Xp

Programozási technológia II 3. előadás. Objektumorientált tervezés Giachetta Roberto

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Irányítástechnika és Informatika Tanszék. Önálló laboratórium


Programozás 2., II. kötet Windows form alkalmazások

II. év. Adatbázisok és számítógépek programozása

ScopeImage 9.0. Kamera és képfeldolgozó szoftver. Felhasználói kézikönyv

CHRIST EMBASSY HUNGARY KRISZTUS NAGYKÖVETSÉG EGYHÁZ

Sorompó kezelés mérlegműszerrel

libgdx alapok, első alkalmazás

Felhasználói kézikönyv

PÉLDATÁR BEGYAKORLÓ FELADAT SÍKFESZÜLTSÉGI PÉLDA MEGOLDÁSA VÉGESELEM-MÓDSZERREL

mynct v0.0.1 Maró verzió Kezelési leírás

A JAVA FUTTATÁSAKOR ELŐFORDULÓ HIBA-

Az alábbiakban az interneten elérhető kompetenciatesztek kitöltéséhez olvashat útmutatót.

C# osztályok. Krizsán Zoltán

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Felhasználói kézikönyv

Felhasználási útmutató a. Dr. Hibbey oktatószoftver-családhoz

Események C#-ban Krizsán Zoltán iit

ETELKA Szolgáltatói Dokumentáció v1.0 RITEK ZRt. 2009

Azonosító jel: INFORMATIKA EMELT SZINTŰ GYAKORLATI VIZSGA május 13. 8:00. A gyakorlati vizsga időtartama: 240 perc

Programozás II. labor

Gábor Dénes Számítástechnikai Emlékverseny 2012/2013. Döntő. Alkalmazói kategória III. korcsoport

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

Dr. Pétery Kristóf: CorelDRAW 9 testre szabás

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

Egy dinamikus adatbázis megvalósítása egy megrendelő-raktározó alkalmazáson keresztül.

Kézikönyv. Tárgyi eszköz adótörvény szerint

Egészségügyi szolgáltatásra való jogosultság ESZJ

TÁJÉKOZTATÓ az OTH Szakrendszeri Információs Rendszerbe (OSZIR) történő regisztráció és belépés menetéről belföldi partner nevében

DEHNsupport Toolbox - Kockázatelemzés Régi projektek megnyitása + mentés DEHN + SÖHNE / protected by ISO 16016

Tipp A Word makrók kimerítõ tárgyalását megtalálhatjuk az O Reilly gondozásában megjelent Writing Word Macros címû könyvben.

Java programozási nyelv 7. rész Java osztálykönyvtár 1.

Thermo1 Graph. Felhasználói segédlet

Szövegszerkesztés Verzió: 0.051

Tárgyi eszközök felhasználói leírás

Dr. Pétery Kristóf: Word 2003 magyar nyelvű változat

Idősoros elemző. Budapest, április

Prezentáció használata

Informatikai Kar. 4. fejezet. Giachetta Roberto

ProAnt Felhasználói Útmutató

Java Programozás 11. Ea: MVC modell

Kézikönyv. SOFiSTiK SOFiCAD-B (Vasalásszerkesztő modul) 16.5 és 17.1 verzió

SupOrt. talpfelvétel készítő program felhasználói leírás v3.1

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat

felhasználói kézikönyv

Az MS Access adatbázis-kezelő program

TELEPÍTSÜNK GYORSAN ÉS EGYSZERŰEN SULIX PROFESSIONALT

CellCom. Szoftver leírás

Á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. uc Sudoku 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 Data névtereket valósítunk meg az alkalmazáson belül. A program vezérlésé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 csomagdiagramja a 2. ábrán látható. 2

2. ábra: Az alkalmazás csomagdiagramja Modell (3. á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, mint az idő (_gametime, _maxgametime) és a lépések (_stepcount). 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. A játék mozgatását időzítő végzi (_timer), amelyet külön szabályozhatunk (Continue, Pause). A játékidő 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 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. 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 3

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. class Model SudokuEventArgs EventArgs - _gametime :Int32 - _steps :Int32 - _iswon :Boolean + SudokuEventArgs(Boolean, Int32, Int32) + GameTime() :Int32 + GameSteps() :Int32 + IsWon() :Boolean «enumeration» GameDifficulty -_diffculty None Easy Medium Hard SudokuTable - _regionsize :Int32 - _fieldvalues :Int32 ([,]) - _fieldlocks :Boolean ([,]) + SudokuTable() + SudokuTable(Int32, Int32) + IsEmpty(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 Data::SudokuFileManager + Load(String) :SudokuTable + Save(String, SudokuTable) :void Exception Data::SudokuFileException + SudokuFileException() -_table SudokuGameModel - GameTimeEasy :Int32 = 3600 - GameTimeMedium :Int32 = 1200 - GameTimeHard :Int32 = 600 - GeneratedFieldCountEasy :Int32 = 6 - GeneratedFieldCountMedium :Int32 = 12 - GeneratedFieldCountHard :Int32 = 18 - _table :SudokuTable - _difficulty :GameDifficulty - _stepcount :Int32 - _gametime :Int32 - _maxgametime :Int32 - _timer :Timer + SudokuGameModel() + NewGame() :void + NewGame(SudokuTable) :void + Continue() :void + Pause() :void + Step(Int32, Int32) :void - GenerateFields(Int32) :void - Timer_Elapsed(object, ElapsedEventArgs) :void - OnGameAdvanced() :void - OnGameOver(Boolean) :void + StepCount() :Int32 + GameTimeLeft() :Int32 + Table() :SudokuTable + IsGameOver() :Boolean + Difficulty() :GameDifficulty + GameAdvanced() :EventHandler<SudokuEventArgs> + GameOver() :EventHandler<SudokuEventArgs> 3. ábra: A modell és az adatkezelő rétegek osztálydiagramja 4

Adatkezelés (3. ábra): Az adatkezelés feladata a fájl alapú betöltés/mentés megvalósítása a SudokuFileManager osztály segítségével. A SudokuFileManager egy statikus osztály, amely biztosítja a táblák betöltését (Load), illetve mentését (Save). A fájlkezelés során fellépő hibákat a SudokuFileException 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. 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. Nézetmodell (4. á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 (_game), 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 parancsát (StepCommand). A mezőket egy felügyelt gyűjteménybe helyezzük a nézetmodellbe (Fields). 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. 5

class ViewModel DelegateCommand - _canexecute :Func<Object, Boolean> {readonly} - _execute :Action<Object> {readonly} ICommand + CanExecute(Object) :Boolean + DelegateCommand(Action<Object>) + DelegateCommand(Func<Object, Boolean>, Action<Object>) + Execute(Object) :void + RaiseCanExecuteChanged() :void + CanExecuteChanged() :EventHandler INotifyPropertyChanged ViewModelBase # OnPropertyChanged(String) :void # ViewModelBase(Boolean) + PropertyChanged() :PropertyChangedEventHandler # ValidateProperty() :Boolean SudokuField - _enabled :Boolean - _text :String SudokuViewModel - _game :SudokuGameModel - Game_GameAdvanced(object, SudokuEventArgs) :void - Game_GameOver(object, SudokuEventArgs) :void - OnGameExit() :void - OnLoadGame() :void - OnNewGame() :void - OnSaveGame() :void - OnStepGame(Object) :void - SetupTable() :void + SudokuViewModel(SudokuGameModel) + ExitCommand() :DelegateCommand + Fields() :ObservableCollection<SudokuField> + GameStepCount() :Int32 + GameTime() :String + IsGameEasy() :Boolean + IsGameHard() :Boolean + IsGameMedium() :Boolean + LoadGameCommand() :DelegateCommand + NewGameCommand() :DelegateCommand + SaveGameCommand() :DelegateCommand + GameExit() :EventHandler + LoadGame() :EventHandler + NewGame() :EventHandler + SaveGame() :EventHandler + StepGame() :EventHandler<SudokuFieldEventArgs> + Enabled() :Boolean + Number() :Int32 + StepCommand() :DelegateCommand + Text() :String + X() :Int32 + Y() :Int32 4. ábra: A nézetmodell osztálydiagramja Vezérlés (5. ábra): Az App osztály feladata az egyes rétegek példányosítása (OnStartup), ö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. 6

class Sudoku - _model :SudokuGameModel - _viewmodel :SudokuViewModel - _view :MainWindow App Application + App() # OnStartup(StartupEventArgs) :void - View_Closing(object, System.ComponentModel.CancelEventArgs) :void - ViewModel_NewGame(object, EventArgs) :void - ViewModel_StepGame(object, SudokuFieldEventArgs) :void - ViewModel_LoadGame(object, System.EventArgs) :void - ViewModel_SaveGame(object, EventArgs) :void - ViewModel_GameExit(object, System.EventArgs) :void - Game_GameOver(object, SudokuEventArgs) :void Data::SudokuFileManager -_view Window View::MainWindow -_viewmodel ViewModelBase ViewModel::SudokuViewModel -_game -_model Model::SudokuGameModel 5. ábra: A vezérlés osztálydiagramja 7