JavaScript v praxi: Sokoban (5. přednáška)



Podobné dokumenty
Tlačítkem Poskládej jiný počítač se hra vrátí na úvodní obrazovku a lze zvolit jiný obrázek.

Název: VY_32_INOVACE_PG4113 Relativní pozicovaní a jeho využití

Formuláře. Internetové publikování

Javascript. Javascript - jazyk

<!DOCTYPE html> <html lang="cs"> <head> <meta charset="utf-8" /> <title>název stránky v titulkovém pruhu prohlížeče</title> </head>

JavaScript 101. "Trocha života do statických stránek"

Delphi popis prostředí

TVORBA WEBOVÝCH STRÁNEK

Formuláře. Internetové publikování. Formuláře - příklad

Internet cvičení. ZS 2009/10, Cvičení 3., Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

Vyšší odborná škola a Střední škola,varnsdorf, příspěvková organizace. Šablona 14 VY 32 INOVACE

Programování v jazyce JavaScript

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ

Skriptování na straně serveru a klienta

OBALKYKNIH.CZ API 3.0, IMPLEMENTACE PRO ALEPH OPAC

Skripta ke školení. Autor: Tomáš Herout Telefon: (+420)

První kapitola úvod do problematiky

Programování v jazyce JavaScript

AJAX. Dynamické změny obsahu stránek

Funkce grafiky na webu. Primární grafická informace Fotografie Schémata Diagramy Loga Bannery

Základy CSS (3. přednáška)

NSWI096 - INTERNET JavaScript

Printris. Hra Printris je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

JavaScript je často zaměňován s Javou. Java je samostatný programovací jazyk. Má s JavaScriptem pouze podobnou syntaxi.

jquery - úvod Zdroj: Jiří Zralý:

Postřehová hra. Zadání projektu. 1 Moje cíle

Javascript v Seznamu

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

Programování v jazyce JavaScript

V této příloze je podrobně popsána struktura XML dokumentu s mapou (viz kapitolu 5.3), příklad tohoto XML dokumentu je na přiloženém CD v souboru

Grafika na webu. Lukáš Bařinka

Tlačítko Teachers Guide obsahuje odkaz na stručný popis hry a její účel v projektu Ingot.

Začínáme s vývojem her a DOM

Rozhraní pro práci s XML dokumenty. Roman Malo

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Část 2

Programování v jazyce JavaScript

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

CMS LARS VIVO VERZE 1.2 Z POHLEDU VIVOJÁŘE


Tvorba klientských skriptů v jazyce Java Script

Komponenty pro ArcGIS API for JavaScript

CSS 1 Relativní pozicování Relativní pozicované bloky jsou pozicované vůči nornálnímu toku elementů dokumentu. (nejsou vyjmuty z normálního toku jako

ČSFD.cz - technická specifikace reklamních formátů

Proč Angular JS framework?

118. </div> 119. </div> 120. <div class="box"> 121. <div class="inside-box"> 122. <img src="./img/drogo-and-daenerys.jpg" alt="kresba Droga a

Rozvržení stránky. Co se v modulu dozvíte? Pozicování

20. Projekt Domácí mediotéka

25. TVORBA HTML DIALOGŮ PRO PEVNÉ TVARY

Parsování HTML. Pro účely testování jsem vytvořil stránku parsovani.html. Zdrojový kód:

Název Live prez Sear enta Maps

PREPROCESOR POKRAČOVÁNÍ

CSS Stylování stránek. Zpracoval: Petr Lasák

Rozměry, okraje a rámečky

Inovace bakalářského studijního oboru Aplikovaná chemie

+ knihovna funkcí usnadňujících práci v javascriptu

Ajax - úvod. Klíčové pojmy: Ajax, skriptování na straně klienta a serveru, objekt XMLHttpRequest, DOM model.

Content Security Policy


ČERV. Hra Červ je psána pomocí příkazů Javascriptu a standardních příkazů HTML.

5 Rekurze a zásobník. Rekurzivní volání metody

Vytvořte si vlastní webovou hru

Ceník a pravidla pro výrobu bannerů

PŘETĚŽOVÁNÍ OPERÁTORŮ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

SkautIS Remote Components absolventská práce

Úvod do programovacích jazyků (Java)

Kreslíme do webu. Canvas


Typický prvek kolekce pro české řazení

Specifikace reklamních formátů HTML 5 pro nasazení do ibillboard Ad Server Verze 2/2015

Algoritmizace a programování

Databáze Caché CSP Custom Tags


Pravidla tvorby pístupného webu. Zpracovala Kristýna Knapová. Obrázky. Kaskádové styly CSS. Javascript. Obrázky dekoraní

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Název: VY_32_INOVACE_PG4102 Základní HTML značky. Autor: Mgr. Tomáš Javorský. Datum vytvoření: 05 / Ročník: 3

Jazyk C# (seminář 6)

!!Via!AUREA,!s.r.o.!

novinky v HTML5 nové sémantické tagy canvas video geolocation local storage web workers

Kámen-nůžky-papír. Tomáš Svoboda Centrum strojového vnímání, Katedra kybernetiky Fakulta elektrotechnická, České vysoké učení technické

Vývojařská Plzeň AngularJS

HTML Kapesní přehled. Lukáš Honek. w w w. h o n e k. b i z. Pravidla psaní kódu. Abecední přehled tagů, atributů, entit, konstant a událostí

Programování v jazyce JavaScript

KIV/PIA 2012 Ing. Jan Tichava

JSR tutorial 2 Transformace v JSR-184

VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Počítačové systémy. Dětské webové hry bakalářská práce

Webové formuláře v HTML5 a Web Forms 2.0

Programování v jazyce JavaScript

Kaskádové styly. CSS (Cascading Sytle Sheets) neboli kaskádové styly vznikly jako souhrn metod pro úpravu vzhledu stránek.

Webdesign II. Služby počítačových sítí 2009

Skládaèka Obr 48 G15 VBP Co to dìlá: Naète vybraný obrázek (vybraný pomocí CommonDialog1), vytvoøí MxN komponent PictureBox obsahujících odpovídající

ČSFD.cz - technická specifikace reklamních formátů

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

KAPITOLA 6. XML, XPath a XSLT. Podpora XML v prohlížečích. XML DOM v IE

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

12. Základy HTML a formuláře v HTML

Internetové publikování. Doc. Ing. Petr Zámostný, Ph.D. místnost: A-72a tel.: 4222, 4167 (sekretariát ústavu 111)

České vysoké učení technické v Praze Fakulta elektrotechnická. Remote Flash Usability testing

CSS (Cascading Sytle Sheets) neboli kaskádové styly vznikly jako souhrn metod pro úpravu vzhledu stránek.

Transkript:

JavaScript v praxi: Sokoban (5. přednáška)

Sokoban... Cíl Přesunout krabice tak, aby každá krabice byla na žlutém poli. Pravidla 1. Panáček se může pohybovat nahoru, dolů, doprava, doleva 2. Panáček může posunout krabicí ve směru pohybu, pokud je v tomto směru za krabicí volné místo.

Sokoban: Návrh Budeme potřebovat: Objekt reprezentující mapu Objekt reprezentující stav hry (hru) Funkci, která vykreslí mapu/aktuální stav Funkci, která bude upravovat stav v závislosti na uživatelském vstupu

Mapa 1 var level = { 2 0:[ W, W, W, W, W, W, W, W, W, W, 0 ], 3 1:[ W, 0, 0, X, X, X, X, 0, 0, W, 0 ], 4 2:[ W, 0, B, X, B,X, X, B,X, 0, 0, W, W ], 5 3:[ W, W, B, W, W, W, W, W, 0, 0, W ], 6 4:[ W, 0, 0, 0, 0, B, 0, 0, 0, 0, W ], 7 5:[ W, 0, 0, B, 0, B, 0, B, 0, S, W ], 8 6:[ W, 0, 0, W, W, W, W, W, W, W, W ], 9 7:[ W, W, W, W, 0, 0, 0, 0, 0, 0, O ], 10 } W stěna, 0 nic, X žluté políčko, B krabice, S panáček

Stav Hry Budeme chtít: uměl načíst mapu uměl vykreslit mapu 1 function game () { 2 this. loadmap = function ( mapa ) {... }; 3 this. drawplan = function ( htmlelement ) {... }; 4 this. moveleft = function () {... }; 5 this. moveright = function () {... }; 6 this. moveup = function () {... }; 7 this. movedown = function () {... }; 8 }

Kreslení Idea Zvolíme si nějaký div element (herní plán) do kterého budeme kreslit Každé prvek na mapě (krabice, stěna,...) bude odpovídat nějakému div elementu, který bude potomkem herního plánu. Umístění na plán zajistíme pomocí position:absolute; a css-vlastností top, left. O grafiku se bude starat css. <div id= HerniPlan style= position:relative; > <div class= stena style= position:absolute;top:0px; left:0px;width=10px;height=10px ></div> <div class= stena style= position:absolute;top:0px; left:10px;width=10px;height=10px ></div> <div class= stena style= position:absolute;top:10px; left:0px;width=10px;height=10px ></div> <div class= krabice style= position:absolute;top:10px; left:10px;width=10px;height=10px ></div> </div>

Intermezzo: Scripting the DOM Jak se v JavaScriptu pracuje s html prvky stránky (objekt document) getelementbyid( id ) getelementsbyclassname( css_class ) createelement( tagname ) Html prvky (které získáme pomocí předcházejích funkcí) jsou také objekty, mají různé vlastnosti (a metody): appendchild( element ) removechild( element ) children innerhtml id, classname, style onclick,...

Stav Hry: herní prvky stav si budeme udržovat jako seznam jednotlivých prvků (divů) na herním plánu u každého prvku si budeme pamatovat jeho pozici a jeho typ (W,0,X,B,S) 1 function prvek ( typ ) = { 2 this. typ = typ ; 3 this. div = document. createelement (" div "); 4 this. div. style. width =10+ px ; 5 this. div. style. height =10+ px ; 6 this. setxy = function (x, y) { 7 this.x = x; this.y = y; 8 this. style. top = this.y *10+ px ; 9 this. style. left = this.x *10+ px ; 10 } 11 this. placeonboard = function ( element ) { 12 element. appendchild ( this. div ); }; 13 this. removefromboard = function ( element ) { 14 element. removechild ( this. div ) ;}; 15 }

Stav Hry: načtení mapy 1 this. loadmap = function ( map ) { 2 this. herniprvky = []; 3 this. height = 0; 4 this. length = len ( map [0]) ; 5 this. panacek = null ; 6 for ( y in map ) { 7 this. height ++; 8 for (x in map [y] ) { 9 prvky = map [y][x]. split (, ); 10 for ( i in prvky ) { 11 var p = new prvek ( prvky [ i] ); 12 p. setxy ( parseint (x), parseint (y)); 13 this. herniprvky. push (p); 14 if ( prvky [i] == S ) { 15 this. panacek = p; 16 } 17 } 18 } 19 } 20 }

Stav Hry: kreslení 1 this. drawplan = function ( herniplan_ div ) { 2 for ( i in this. herniprvky ) { 3 this. herniprvky [i]. placeonboard ( herniplan_div ); 4 } 5 }

Stav Hry: moveleft 1 this. moveleft = function () { 2 // Nesmime vylezt z mapy 3 if ( this. panacek. x == 0) return false ; 4 var sousedi = this. prvkyatxy ( this. panacek.x -1, 5 this. panacek.y); 6 // Nesmime projit zdi 7 if ( this. contains ( sousedi, W ) ) return false ; 8 9 // Krabici muzeme posunout pouze, pokud je misto 10 if ( this. contains ( sousedi, B ) ) { 11 // Ani krabici nesmime vysunout z mapy 12 if ( this. panacek. x == 1 ) return false ; 13 ns= this. prvkyatxy ( this. panacek.x -2, this. panacek.y) 14 if ( this. contains (ns, W ) 15 this. contains (ns, B )) return false ; 16 krabice = this. gettype ( sousedi, B ); 17 krabice. setxy ( this. panacek.x -2, this. panacek.y); 18 } 19 // Posuneme panacka 20 this. panacek. setxy ( this. panacek.x -1, this. panacek.y); 21 }

Sta Hry: co chybí? funkce contains(list, typ) která vrátí true, pokud seznam list herních prvků obsahuje prvek typu typ funkce gettype(list,typ) herní prvek typu typ která vrátí ze seznamu list funkce, která si pamatuje, kolik tahů už bylo provedeno (skóre) funkce, která si udržuje přehled o tom, kolik krabic ještě chybí přesunout

Interakce s uživatelem vlastnosti jednotlivých prvků (onclick, onblur, onfocus,...) vlastnosti objektu document (onkeypress, onkeydown, onkeyup) metody objektu window (settimeout( "javascript code", msec ), setinterval, clearinterval)

Stav Hry: ošetření uživatelského vstupu 1 this. keyuphandler = function () { 2 var me = this ; 3 return function ( e ) { 4 if ( me. keysenabled ) return false ; 5 e = window. event e; 6 switch (e. keycode ) { 7 case 37: 8 me. moveleft (); break ; 9 case 38: 10 me. moveup (); break ; 11 case 39: 12 me. moveright (); break ; 13 case 40: 14 me. movedown (); break ; 15 default : 16 return true ; 17 } 18 return false ; 19 } 20 }

Dáme to dohromady 1 function startgame () { 2 var level = {... }; 3 var g = new game (); 4 g. loadmap ( level ); 5 herniplandiv = document. getelementbyid ( HerniPlan ); 6 g. drawplan ( herniplandiv ); 7 window. onkeyup = g. keyuphandler (); 8 } 9 10 window. onload = startgame ;