GUI grafických aplikací GUI pro Othello



Podobné dokumenty
ZP4CS 10. hodina Kreslení deskové hry. Aleš Keprt duben 2015

GUI grafických aplikací

Programy pro OS Windows

Evropská obchodní akademie, Děčín I, Komenského náměstí 2, příspěvková organizace IČ tel

Projekt Obrázek strana 135

Operační systémy 2 Základy Windows API

2 Grafický výstup s využitím knihovny

Desatero, aneb nejčastější chyby v programování

úvod vjj 1

Úvodem... 9 Kapitola 1 Karetních

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení

DUM č. 9 v sadě. 30. Inf-6 Imagine Logo a animace pro nižší gymnázium

Jazyk C# (seminář 7)

Konfigurace Windows 7

17. Projekt Trojúhelníky

Programování v jazyku LOGO - úvod

1. Úvod do obsluhy AutoCADu

Programování v jazyce VISUAL BASIC.NET

1. Základní pojmy, používané v tomto manuálu. 2. Stránky

Zobrazení zdrojových dat u krabicového grafu

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

Hodnocení soutěžních úloh

Voltampérová charakteristika diody

Multimediální prezentace MS PowerPoint I

Programování v jazyce C a C++

František Hudek. červenec 2012

úvod vjj 1

16. února 2015, Brno Připravil: David Procházka. Konstruktory a destruktory

Př. program s popojíždějícím autíčkem o 50 pixelů při každém stisku Popojeď

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Psaní programu pro PLC SIMATIC S7-300 pomocí STEP 7

Cvičné příklady Hodina 2

Správa barev. ICC profil monitorů. Správa barev. Vytvořila: Jana Zavadilová Vytvořila dne: 3. ledna

VY_32_INOVACE_INF.08. Microsoft Windows II.

Projekt. Jan Outrata. listopad Jan Outrata (KI UP) Projekt - analýza a návrh listopad / 13

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

POČÍTAČOVÁ GRAFIKA VEKTOROVÁ GRAFIKA VÍCENÁSOBNÉ KOPÍROVÁNÍ

Virtuální metody - polymorfizmus

KMI / TMA Tvorba mobilních aplikací. 9. seminář ZS 2016/2017 Středa 13:15-15:45

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

Uživatelská příručka k aplikaci Dell Display Manager

Zadání soutěžních úloh

Instalace modulu Message Broadcasting. Při stahování a instalaci postupujte podle pokynů na webové stránce společnosti Epson.

TVOŘÍME MAPU V GIS. manuál

PROGRAMOVÁNÍ PRO MS WINDOWS 1

Základní informace. Operační systém (OS)

Programujeme v softwaru Statistica

Ondřej Baar ( BAA OO6 ) Prezentace ZPG 2008 Kalibrace Barev. Kalibrace Barev. Ondřej Baar 2008 ~ 1 ~

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jan Boháček [ÚLOHA 27 NÁSTROJE KRESLENÍ]

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky

MVVM pro desktop i web

Dokument a jeho části oddíly, záhlaví, zápatí

Komponenty v.net. Obsah přednášky

Internet - internetové prohlížeče

Uživatelská příručka k aplikaci Dell Display Manager

WDLS (BUILDINGDESIGN)

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE. Desková hra s podporou hraní po síti Lovci pokladů.

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Comenius Logo. Úterý 20. března. Princip programování. Prostředí Comenius Logo

Uživatelská příručka k aplikaci Dell Display Manager

Kudyšel comfort. Manuál k programu

OPERAČNÍ SYSTÉM. základní ovládání. Mgr. Jan Veverka Střední odborná škola sociální obor ošetřovatel

Lekce 12 Animovaný náhled animace kamer

GIS Mikroregionu Telčsko

Vývojové nástroje jazyka Java

Kombinované úlohy - cvičení

Přidávání animací do programů

1.2 Operační systémy, aplikace

Návod k použití Verze

Popis výukového materiálu

Ovládání Open Office.org Calc Ukládání dokumentu : Levým tlačítkem myši kliknete v menu na Soubor a pak na Uložit jako.

1. Aplikační a systémové opravy Odkaz na Nahlížení do KN (Info ČÚZK) Tisk mapy... 4

Programování v jazyku C# II. 4.kapitola

Jazyk C# (seminář 9)

Uživatelská příručka

Vytvoření a úpravy geologického modelu

Comenius Logo. Princip programování. Prostředí Comenius Logo

MIDAM Simulátor Verze 1.5

Vytváříme dobré aplikace vykreslovače grafiky v programovém prostředí Control Web

Využití ICT techniky především v uměleckém vzdělávání. Akademie - VOŠ, Gymn. a SOŠUP Světlá nad Sázavou

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Jak vytvořit vlastní ikonu bloku a faceplate v PCS7 V6.x a 7.x

Vyřešené teoretické otázky do OOP ( )

Tvorba webových stránek na google Sites (1.)

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

KONCEPCE ZPŮSOBU VEKTORIZACE GEOLOGICKÝCH JEDNOTEK A JEJICH ROZHRANÍ

Formulář pro křížový filtr

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT EU-OVK-VZ-III/2-ZÁ-312

VKLÁDÁNÍ OBJEKTŮ - obrázek

Cvičení č. 3. Sdílené prostředky a synchronizace Program Banka. 4 body

Robotická rehabilitační pomůcka pro děti

DATABÁZE ACCESS Ovládací prvky ve formuláři 5 TENTO PROJEKT JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ REPUBLIKY.

Mapové služby portálu veřejné správy České republiky a IRZ. Průvodce po mapové aplikaci

Výuka počítačové grafiky

PRAKTICKÉ NÁVODY K PROVÁDĚNÍ ZÁKRESŮ V RÁMCI JEDNOTNÉ ŽÁDOSTI

Robot BBC Micro:bit kódovaní v PXT Editoru

Knihovna DMX512lib Komunikace protokolem DMX512. TXV prvé vydání srpen 2010 změny vyhrazeny

František Hudek. březen ročník. Informační a komunikační technologie OS WINDOWS Hlavní panel

Transkript:

GUI grafických aplikací GUI pro Othello Aleš Keprt Ústav informatiky MVŠO duben 2006,březen 2007, duben2008, březen 2009, březen 2010, listopad 2010

Windows Událostmi řízené aplikace Každá aplikace má tzv. frontu zpráv Funkce main() vykonává kód: Message msg; while(getmessage(&msg)) { DispatchMessage(&msg); } GetMessage blokuje až do příchodu zprávy DispatchMessage předá zprávu do WndProc WndProc zpracuje zprávu 2/16

Jak vypadá WndProc? long* WndProc(HWND hwnd, UINT msg, UINT wparam, ULONG lparam) { switch(msg) { case WM_CLOSE: case WM_PAINT: case WM_KEYDOWN: } hwnd (okno), msg = zpráva + 2 parametry Návratová hodnota = odpověď na zprávu 3/16

Překreslování grafiky ve Windows Když chce aplikace něco překreslit, tak zavolá systémovou funkci Invalidate() = zneplatnění Jako parametr určí oblast okna k překreslení Systém pošle oknu zprávu WM_PAINT Systém invalidované oblasti sčítá a optimalizuje tak překreslování Dokud se okno nepřekreslí, žádné další WM_PAINT zprávy nepřijdou Zpracování zprávy WM_PAINT: Pomocí funkcí GDI si okno překreslí svůj obsah Případně použijeme OpenGL nebo DirectX 4/16

Proč je to tak složité? Systém má šanci, aby ignoroval invalidace, když má důležitější práci Aplikace volá Invalidate při každé změně obsahu když to dělá moc často, systém nechá překreslit okno jen občas záleží na rychlosti počítače 5/16

Jak se dá kreslit GDI standardní rozhraní Windows Výhody: úplně jednoduché Nevýhody: téměř bez HW akcelerace, závislé na rozlišení GDI+ nahrazuje GDI v.netu Výhody: nativně objektové, částečně akcelerované Nevýhody: Stále daleko od DX, stále závislé na rozlišení DirectX Výhody: Nejlepší funkcionalita, nejrychlejší běh Plná HW akcelerace, nezávislost na rozlišení Nevýhody: Extrémně složité, neumí formulářové prvky OpenGL obdoba DirectX, ale je jednodušší Výhody: multiplatformní, jednodušší než DX Nevýhody: Užší funkcionalita, jen 3D grafika, neobjektové WPF (Windows Presentation foundation) nástupce GDI+ (.NET 3.0) Výhody: lepší objektový model, již nezávislé na rozlišení 6/16

Jaké mohou být problémy Nelze ovlivnit, jak často se obraz překresluje Proto přehrávače filmů obcházejí princip invalidace přímým kreslením na obrazovku Při rychlém překreslování grafika bliká Double buffering existuje jen v OpenGL a DirectX Obecně se může stát, že hardware zobrazí obraz částečně starý a částečně nový, protože monitor nepočká, až připravíme celý nový obraz V GDI řešíme pomocí kreslení přes bitmapu GDI+ toto řeší nativně snadný život programátora Ve Windows Vista a 7 nikdy nic nebliká (Aero UI) 7/16

Jakých chyb se vyvarovat? Grafiku překreslujte výhradně v obsluze zprávy WM_PAINT (v.netu je to událost Paint) Nikdy nevynucujte překreslení pomocí Update(), ale jen invalidujte okno pomocí Invalidate() Grafiku přenášejte do okna najednou; v případě potřeby použijte kreslení do bitmapy PictureBox kreslí vše přes Bitmapu automaticky Nepoužívejte OpenGL a DirectX pro triviální programy s jednoduchou grafikou Dávejte přednost GDI+ (případně WPF), protože je nativně objektové (Windows.Forms používá GDI+) 8/16

Náš případ: GUI pro Othello Původně to byla přednáška o GUI pro Dámu Máme čtvercovou šachovnicová plochu Nové kameny klademe klikáním myši Tj. řešíme i vstup, ale je to velmi jednoduché Příklad realizace v GDI+ Čtvercová grafická plocha jako jeden objekt Čili plochu nijak nedělíme na políčka Připravíme si obrázky políček a kamenů Překreslujeme vždy celou plochu Zachytáváme klikání myši 9/16

Příprava (1.) typ Barva, obrázky Enum Barva Žádná Černá Bílá End Enum Tyto obrázky jsou od studenta Sebastiana Buška, který projekt Othello implementoval v roce 2010 na KMI PřF UP Olomouc Obrázky políček: Prázdné políčko Minulý tah Možný tah Chybný tah 10/16

Příprava (2.) třídy Hra a Deska Okno musí odněkud zjistit, co má kreslit k tomu máme třídu Hra Hra je definována ve Visual Basicu jako modul = jen jedna instance v celém programu Potřebné součásti ve třídě Hra: Sub PoložKámen(x, y, barva) Function ZjistiKámen(x, y) as Barva Const Velikost = 8 Všechno to jsou věci z desky, takže je možno místo nich rovnou předat celou desku Function DejDesku() as Deska 11/16

Jdeme na věc Aby toho nebylo moc najednou, neřešíme objektový návrh Takže celé kreslení a ovládání nacpeme do třídy okna Visual Studio 2008, založíme nový projekt Nastavíme černé pozadí oknu Vložíme PictureBox, pojmenujeme pad Velikost obrázku je 64x64 Const VelikostKostky= 64 upravíme velikost padu a okna (v konstruktoru) pad.width = pad.height = Deska.Velikost * VelikostKostky ClientSize = new Size(pad.Width+pad.Left*2, pad.height+pad.top*2) 12/16

Načtení obrázků Obrázky načteme do objektů typu Bitmap Vytvoříme si pole pro barvy a další bitmapy samostatně Deklarace: Dim kameny(2) as Bitmap Naplnění: kameny(1) = new Bitmap("dark.png") Poznámka: Obrázky kamenů mají průhledné pozadí Takže při kreslení pod ně budeme dávat políčko 13/16

Kreslení Aby to hned něco dělalo, přidáme kreslení pad Properties událost Paint Toto lze dělat i programově, ale přes Visual Studio je to snazší (stačí párkrát kliknout ) Projdeme všechna políčka a nakreslíme Sub pad_paint(object sender, PaintEventArgs e) e.graphics.drawimage(obrázek, x, y, VelikostKostky, VelikostKostky) End Sub Poznámka: Počátek souřadnic GDI+ je vlevo nahoře Je ale dobré mít počátek desky vlevo dole Není dobré vázat dohromady GUI a logiku hry 14/16

Ovládání myší Potřebjeme převod souřadnic myši na číslo políčka: x / VelikostKostky, Deska.Velikost 1 y / tilesize Událost MouseClick Je-li políčko prázdné, necháme tam položit kámen Ošetření chyby Při neplatném tahu zobrazíme okraj desky na chvíli červeně Realizujeme to pomocí časovače Založíme System.Windows.Forms.Timer Zapneme jej vždy při chybě a vypneme při prvním tiku Pomocí Form.BackColor změníme barvu pozadí okna 15/16

Doladění objektové struktury Třída Deska se může po přidání kamene sama nechat překreslit nemusíme na to pak pořád myslet Přidáme vlastní událost do třídy Deska Metoda Deska.PoložKámen() ji aktivuje po změně desky Program.Main() napojí obsluhu této události na Form1 16/16

Mgr. Aleš Keprt, Ph.D., 2006-2010 Obrázky Sebastian Bušek 2010 Vytvořeno pro potřeby výuky na MVŠO. Tento text není určen pro samostudium, ale jen jako vodítko pro přednášku, takže jeho obsah se může čtenáři zdát stručný, nekompletní či možná i chybný. Použití je povoleno dle vlastní libosti, ale jen na vlastní nebezpečí. V případě dalšího šíření je NUTNO uvádět původního autora a odkaz na původní dokument. Komentáře můžete posílat emailem autorovi (adresu najdete přes Google).