Alkuun HTML5 peliohjelmoinnissa



Samankaltaiset tiedostot
Lisätehtävät. Frantic 2015 sivu 1

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

XHTML - harjoitus. Tehtävä1: Tee xhtml tiedosto käyttäen notepad (muistio) ohjelmaa. Tiedoston tallennus notepad (muistio) ohjelmassa:

/ * PROSESSORIN C-KIELINEN OHJELMA */

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

HTML-ohjeet. Sivun perusrakenne <HTML> <HEAD> <STYLE TYPE="text/css"> ...tänne tulee CSS-koodi eli sivun ulkonäkö määritykset...

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.


Kylänetti projektin sivustojen käyttöohjeita Dokumentin versio 2.10 Historia : 1.0, 1.2, 1.6 Tero Liljamo / Deserthouse, päivitetty 25.8.

1. Taustatietoa näppäimistönkuuntelusta

Flash ActionScript osa 4

HTML:n perusteet. Jari Sarja / Otavan Opisto Tämä oppimateriaali on lisensoitu Creative Commons Nimeä-Tarttuva 3.

Joomla pikaopas. Yksinkertainen opas, jossa neuvotaan esimerkkisivuston teko Joomla julkaisujärjestelmällä vaihe vaiheelta.

Pong-peli, vaihe Rajojen tarkistus Yläreunan tarkistus. Muilla kielillä: English Suomi

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

Proseduraalinen dokumentti: sisältö, rakenne ja ulkoasu yhdessä, esim. worddokumentti

C# Windows ohjelmointi perusopas

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

Sivupohja flat file julkaisujärjestelmälle. Kirjoittanut Jari Sarja (

Java-kielen perusteet

JavaScript alkeet Esimerkkikoodeja moniste 3 (Metropolia 11/2011)

7. Näytölle tulostaminen 7.1

Racket ohjelmointia II. Tiina Partanen 2015

CSS - tyylit Seppo Räsänen

HTML5 video, audio, canvas. Mirja Jaakkola

OPISKELIJAN PIKAOPAS

Java-kielen perusteet

Tutkitaan sitten HTML-dokumenttien anatomiaa, jotta päästään käsiksi rakenteisten dokumenttien käsitteistöön esimerkkien kautta.

Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta.

Puuhailua Android-sovellus

XNA grafiikka laajennus opas. Paavo Räisänen. Tämän oppaan lähdekoodit ovat ladattavissa näiden sivujen Ladattavat osiossa.

Harjoitustyö 3: Verkkosivujen toiminnallisuus (JavaScript)

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

HARJOITUKSIA ios-ohjelmointiin LIITTYEN

Internet-pohjaisen oppimisympäristön laadinta. Luento 3

Miten Internet toimii. Tuomas Aura T Johdatus tietoliikenteeseen kevät 2013

Paavo Räisänen. WampServer palvelimen asennus ja käyttö Eclipsen kanssa, sekä ensimmäinen FTP yhteys.

Ohjelmoinnin perusteet Y Python

Harjoitustyö (TKO_2023)

Verkkosivut perinteisesti. Tanja Välisalo

DIGITAALISEN TARINAN TUOTTAMINEN MICROSOFT PHOTO STORY 3- OHJELMAN AVULLA VAIHEINEEN

selector { CSS property: value; property2: value; Code Camp for Girls Sonja Jaakkola & Sanna Nygård

1. Lohkon korkeus ja leveys

Ohjelmoinnin perusteet Y Python

Verkkojulkaiseminen Minna Väisänen. HTML5-tehtävä

Nuorten hyvinvointi tilastotietokannan käyttöohjeet Tieke

Muita kuvankäsittelyohjelmia on mm. Paint Shop Pro, Photoshop Elements, Microsoft Office Picture Manager

Webinaariin liittyminen Skype for

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

ITKP102 Ohjelmointi 1 (6 op)

Tiedostonhallinta. Yleistä

Ohjelman käyttöön ei sisälly muita kuluja kuin ohjelman lisenssimaksu ja mahdolliset webbipalvelusi käyttömaksut.

GeoGebra-harjoituksia malu-opettajille

Java-kielen perusteet

Harjoitus 2: Oppijan aktivointi ( )

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Ohjeet asiakirjan lisäämiseen arkistoon

Kuvat. 1. Selaimien tunnistamat kuvatyypit

Tee html-sivu, jossa on yllä olevat kaksi taulukkoa.

Venekilpailu! Esteiden väistely ja hahmon ohjaaminen

JSP (JavaServer Pages) tekniikka Lähde Arvo Lipitsäinen, JSP JavaServer Pages, 2003

Kyläsivujen InfoWeb-ohje

Ohjelmoinnin perusteet Y Python

Laravel 5.14 by Dummy

Harjoitus 4: HTML5 piirtoalusta ( )!

Ohjeita kirjan tekemiseen

Ohjelmoinnin perusteet Y Python

plot(f(x), x=-5..5, y= )

Moodle-oppimisympäristö

valitsin on useimmiten html-elementti, jolle tyyli halutaan luoda

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Muumion kirous. Pelisuunnitteludokumentti. Veikkauksen pelisuunnittelukilpailua (Peliskaba2015) varten

Flowcode 6 Omien komponenttien luonti 3D- tilassa Ledi

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Johdatus ohjelmointiin

PELIAIKASEURANTAOHJELMAN KÄYTTÖOHJE

CSS-kielen avulla määritellään HTML-dokumentin tyyli. CSS avulla voidaan tarkemmin määritellä eri elementtien ominaisuuksia.

zotero

39DLL by 39ster. Nettipeli Tutorial by Lauri Paavolainen heinäkuuta ) Intro :

Sukelluskeräily, Pelihahmon liikuttaminen. Tee uusi hahmo: Pelihahmo. Nimeä se. Testaa ikuisesti -silmukassa peräkkäisinä testeinä (jos) onko jokin

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

ITKP102 Ohjelmointi 1 (6 op)

Asemointi. 1. Lohkon korkeus ja leveys

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

AMIS-ohjelman käyttöohjeet

JavaScript alkeet Esimerkkikoodeja moniste 2

Kieliversiointityökalu Java-ohjelmistoon. Ohje

1 Tehtävän kuvaus ja analysointi

Jypelin käyttöohjeet» Miten lisään ohjaimet peliin

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

Harjoitus 3 (viikko 39)

Ulkoasun muokkaus CSS-tiedostossa

Entiteetit erotetaan muusta tekstistä & ja puolipiste. esim. copyright-merkki näkyy sivulla

Python-ohjelmointi Harjoitus 2

Matematiikan tukikurssi

Näin järjestän ohjelmointikurssin, vaikka en ole koskaan ohjelmoinut

Transkriptio:

Paavo Räisänen Alkuun HTML5 peliohjelmoinnissa www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida ja levittää ei kaupallisissa tarkoituksissa.

Sisällysluettelo 1: Alkusanat 2: Alkuun 3: Pelinäkymä 4: Koordinanteista 5: Parsetus 6: Pelin koko JavaScript koodi kommentoituna 7: JavaScript koodin analysointia 8: Ohjelman koko HTML5 koodi 9: Valmiin ohjelman pelinäkymä 10: CSS koodista 11: Satunnaisluku 12: Kuvan lisääminen 13: Musiikin lisääminen

1: Alkusanat HTML5 on uusi multimediaohjelmointikieli, joka syrjäyttänee ainakin osittain Adoben Flashin ja Microsoftin Silverlightin. Sekä Adobe, että Microsoft ovat mukana HTML5 kielen kehittämisessä. HTML5 tekniikka perustuu HTML kielen, CSS3:n ja JavaScriptin yhdistämiseen ja tuo HTML standardiin paljon uutta. Vaikka tämä opas on alkeisopas, tässä oletetaan, että osaat jotain ohjelmoinnista, ja eritoten HTML kielestä, CSS:stä ja JavaScriptistä. Oppaassa tehdään pingispeli, joka on tietynlainen pelimaailman Hello World ohjelma, ja löytyy useista peliohjelmointioppaista. Oppaassa käytetään apuna jquery JavaScript kirjastoa, joka on ilmaiseksi imuroitavissa netistä. 2: Alkuun Tee kansio nimeltä Pingis ja sinne alikansio js. Lataa jquery osoitteesta http://jquery.com/ ja tallenna se js kansioon. Käytän tässä oppaassa versiota jquery-1.9.1.min.js. Tee html tiedosto nimeltä index.html js kansioon ja kirjoita sinne koodi: <!DOCTYPE html> <html lang="en"> <head> <meta charset="charset=iso-8859-1"> <title>pingis</title> </head> <body> <header> <h1>pingis peli</h1> </header> <footer> Tässä pieni testiohjelma. </footer> <script src="jquery-1.9.1.min.js"></script> <script> $(function() alert("tervetuloa testaamiseen."); ); </script> </body> </html>

Tällä rivillä <script src="jquery-1.9.1.min.js"></script> sisällytetään jquery kirjasto koodiin. Tämä koodi <script> $(function() alert("tervetuloa testaamiseen."); ); </script> lisätään jqueryä käytettäessä poikkeuksellisesti <body> tagien sisään, jquery määritteen jälkeen. Normaali käytäntöhän on sijoittaa JavaScript koodi <head> tagien sisään. Lausekkeella <meta charset="charset=iso-8859-1"> otetaan käyttöön skandinaavinen merkistö, eli ääkköset. Ohjelma ajetaan klikkaamalla index.html tiedostoa. Ohjelman pitäisi tulostaa JavaScript Alert ikkuna, jossa lukee Tervetuloa testaamiseen. $(function() //koodia ); tarkoittaa samaa kuin jquery(function() //koodia ); mutta on lyhyemmin ilmaistu. Ilmaisu tarkoittaa, että scriptiä käytetään yhdessä jquery kirjaston kanssa. $ merkillä lyhennetään jquery. Nämä tarkoittavat siis samaa: $(document).ready(function) ja jquery(document).ready(function)

3: Pelinäkymä Muokkaa index.html tiedosto seuraavanlaiseksi: <!DOCTYPE html> <html lang="en"> <head> <meta charset="charset=iso-8859-1"> <title>pingis</title> <style> #pelialue background: #00c700; width: 600px; height: 300px; position: relative; overflow: hidden; #pallo background: #f8ea0d; width: 20px; height: 20px; left: 300px; top: 150px; position: absolute; border-radius: 10px;.maila background: #4c45e0; width: 20px; height: 50px; left: 50px; top: 70px; position: absolute; #maila2 left: 320px; </style> </head> <body> <header>

<h1>pingis peli</h1> </header> <footer> Tässä pieni testiohjelma. </footer> <script src="jquery-1.9.1.min.js"></script> <script src="pingisjs.js"></script> <div id="peli"> <div id="pelialue"> <div id="maila1" class="maila"></div> <div id="maila2" class="maila"></div> <div id="pallo"></div> </div> </div> </body> </html> Tee JavaScript tiedosto nimeltä pingisjs ja kirjoita sinne seuraava koodi: $(function() $("#maila2").css("top", "20px"); $("#maila1").css("top", "60px"); ); HTML5 koodissa lauseessa <script src="pingisjs.js"></script> sisällytetään JavaScript koodi html5 koodiin.

Ajettaessa index.html tiedosto, näkymä on seuraava:

4: Koordinanteista Kun css koordinanteissa antaa määritteen adsolute, käyttää ohjelma top ja left määritteitä kuten koordinantteja X (left) ja Y (top). Huomioi, että Y (top) kasvaa alaspäin, eli päinvastoin kuin matemaattinen koordinantisto. Näissä annoimme määritteen absolute : #pallo background: #f8ea0d; width: 20px; height: 20px; left: 300px; top: 150px; position: absolute; border-radius: 10px;.maila background: #4c45e0; width: 20px; height: 50px; left: 50px; top: 70px; position: absolute; Sensijaan määre relative annettiin, kun määriteltiin pelialueen koko. 5: Parsetus Kun halutaan muuttaa css koodin koordinantteja, ei voi antaa suoraan: $("#maila2").css("top")+5; Tmä johtuu siitä, että top (tai left) sisältää kirjaimia, eli esim. 100px, eli se on merkkijono (string). Jos siihen lisätään 5, tulee 100px5, jolla ei voi laskea. Sen tähden on parsetettava seuraavasti: var top = parseint($("#maila2").css("top")); parseint lauseke poimii merkkijonosta numeron seuraavasti: parseint( 100px ) on 100 parseint( 8m ) on 8

Parsetuksen jälkeen top on numeerinen ja sillä voi laskea. Siihen voi lisätä luvun, ja lisätä arvon css kooodiin seuraavasti: $("#maila2").css("top",top+5); Toinen tapa käyttää parseint() funktiota on käyttää sitä numeroarvojen muuttamisessa. Eli heksajärjestelmän luku FF muutetaan desimaaliluvuksi antamalla luku ja järjestelmä, eli parseint( FF, 16) palauttaa 255 desimaalilukuna. Voit tutkia näitä Googlen Chromen consolissa valitsemalla työkalut/kehittäjän työkalut/konsoli, josta näkymä:

6: Pelin koko JavaScript koodi kommentoituna var pingis = pisteet1 : 0, pisteet2 : 0 pingis.painetutnappaimet = []; pingis.pallo = nopeus: 5, x: 350, y: 100, suuntax: 1, suuntay: 1 var NAPPAIN = YLOS: 38, ALAS: 40, W: 87, S: 83 $(function() //Määritellään ajastin, jolla luodaan pelisilmukka pingis.ajastin = setinterval(pelisilmukka, 30); //Tutkitaan, onko näppäimiä painettu $(document).keydown(function(e) pingis.painetutnappaimet[e.which] = true; ); $(document).keyup(function(e) pingis.painetutnappaimet[e.which] = false; ); ); //Pelisilmukka eli gameloop function pelisilmukka() siirramailoja(); siirrapalloa();

function siirramailoja() //Oikeanpuoleisen pelaajan mailanliikuttaminen ylös (pelaaja 2) if (pingis.painetutnappaimet[nappain.ylos]) var top = parseint($("#maila2").css("top")); $("#maila2").css("top",top-5); //Oikeanpuoleisen pelaajan mailanliikuttaminen alas (pelaaja 2) if (pingis.painetutnappaimet[nappain.alas]) var top = parseint($("#maila2").css("top")); $("#maila2").css("top",top+5); //Vasemmanpuoleisen pelaajan mailanliikuttaminen ylös (pelaaja 1) if (pingis.painetutnappaimet[nappain.w]) var top = parseint($("#maila1").css("top")); $("#maila1").css("top",top-5); //Vasemmanpuoleisen pelaajan mailanliikuttaminen alas (pelaaja 1) if (pingis.painetutnappaimet[nappain.s]) var top = parseint($("#maila1").css("top")); $("#maila1").css("top",top+5); function siirrapalloa() var pallo = pingis.pallo; var pelialuekorkeus = parseint($("#pelialue").height()); var pelialueleveys = parseint($("#pelialue").width()); var pallonleveys = parseint($("#pallo").css("width")); var mailaleveys = parseint($(".maila").css("width")); var mailakorkeus = parseint($(".maila").css("height")); //Liikutetaan palloa pallo.x += pallo.nopeus * pallo.suuntax; pallo.y += pallo.nopeus * pallo.suuntay;

//Katsotaan, onko pallo törmännyt vasemman pelaajan, pelaaja 1 mailaan var maila1x = parseint($("#maila1").css("left")) + mailaleveys; var maila1y = parseint($("#maila1").css("top")); if (pallo.x <= maila1x) if (pallo.y <= maila1y+mailakorkeus && pallo.y >=maila1y) pallo.suuntax = 1; //Katsotaan, onko pallo törmännyt voikeanpuoleisen pelaajan, pelaaja 2 mailaan var maila2x = parseint($("#maila2").css("left")); var maila2y = parseint($("#maila2").css("top")); if (pallo.x + pallonleveys >= maila2x) if (pallo.y <= maila2y+mailakorkeus && pallo.y >=maila2y) pallo.suuntax = -1; //Tutkitaan, onko pallo osunut pelialueen ylä- tai alareinaan //ja jos on, muutetaan Y -suunta päinvastaiseksi if (pallo.y > pelialuekorkeus-pallonleveys pallo.y < 0) pallo.suuntay *= -1; //Tutkitaan, onko pallo päässyt karkaamaan oikealla //Jos on, pelaja 1 pisteitä lisätään, palloa siirretään hieman //ja pallon X -suunta muutetaan if (pallo.x > pelialueleveys-pallonleveys-20) pallo.suuntax = -1; pallo.x = 330; pallo.y=200; pingis.pisteet1++; $("#pisteet1").html(pingis.pisteet1); //Tutkitaan, onko pallo päässyt karkaamaan vasemmalle //Jos on, pelaja 2 pisteitä lisätään, palloa siirretään hieman //ja pallon X -suunta muutetaan if (pallo.x < 20) pallo.suuntax = 1; pallo.x = 250; pallo.y=200; pingis.pisteet2++; $("#pisteet2").html(pingis.pisteet2);

//Siirretään pallo sille kuuluvalle paikalle X ja Y koordinanttien mukaan $("#pallo").css ( "left": pallo.x, "top": pallo.y ); 7: JavaScript koodin analysointia $(function() osio on ohjelman osa, josta ajettaessa ohjelma ikäänkuin käynnistyy, eli joka on linkitettynä HTML5 koodissa index.html. Peli tarvitsee pelisilmukan. Pelisilmukka voi olla sinulle tuttu esim. XNA tekniikasta tai Flashista. Tässä pelisilmukka tehdään tekemällä ajastin, joka kutsuu 30 millisekunnin välein pelisilmukkaa (gameloop). $(function() //Määritellään ajastin, jolla luodaan pelisilmukka pingis.ajastin = setinterval(pelisilmukka, 30); $(function() osiossa myös tutkitaan, onko näppäimiä painettu. function siirramailoja() metodi osaa lukea tätä ja toimia sen mukaan. Pelisilmukka on tässä yksinkertainen. Siinä vain kutsutaan pallon ja mailan liikutteluun omia metodeja. //Pelisilmukka eli gameloop function pelisilmukka() siirramailoja(); siirrapalloa();

8: Ohjelman koko HTML5 koodi <!DOCTYPE html> <html lang="en"> <head> <meta charset="charset=iso-8859-1"> <title>pingis</title> <style> #pelialue background: #00c700; width: 600px; height: 300px; position: relative; overflow: hidden; #pallo background: #f8ea0d; width: 20px; height: 20px; left: 300px; top: 150px; position: absolute; border-radius: 10px;.maila background: #4c45e0; width: 20px; height: 50px; left: 50px; top: 70px; position: absolute; #maila2 left: 520px; </style> </head> <body>

<header> <h1>pingis peli</h1> </header> <footer> HTML5 pingis. </footer> <script src="jquery-1.9.1.min.js"></script> <script src="pingisjs.js"></script> <div id="peli"> <div id="pelialue"> <div id="maila1" class="maila"></div> <div id="maila2" class="maila"></div> <div id="pallo"></div> </div> </div> <div id="pelilauta"> <div class="pisteet">pelaaja 1 : <span id="pisteet1">0</span></div> <div class="pisteet">pelaaja 2 : <span id="pisteet2">0</span></div> </div> </body> </html>

9: Valmiin ohjelman pelinäkymä 10: CSS koodista maila on luokka jonka jäseniksi määritellään HTML5 koodissa sekä maila1, että maila2 koodissa <div id="maila1" class="maila"></div> <div id="maila2" class="maila"></div> maila1 käyttää.maila luokan tietoja sellaisenaan, mutta maila2 korvaa left ominaisuuden omalla arvollaan #maila2 left: 520px;

11: Satunnaisluku Peleissä usein tarpeellisen satunnaisluvun saa JavaScriptillä seuraavalla käskyllä: satunnaisluku = Math.floor(Math.random()); edellinen lauseke palattaa muuttujaan satunnaisluku arvon väliltä 0-1. Arvo väliltä 0-12 saadaan lauseella: satunnaisluku = Math.floor(Math.random() * 12); Huomaa, että tässä suurin tulos on 11 ja pienin 0, koska Math.floor pyöristää luvun jättämällä desimaalit pois. Jos haluat arvot 1-12 on käytettävä esim. lauseketta: satunnaisluku = Math.floor((Math.random() * 12)+1); 12: Kuvan lisääminen Jos haluat esim. piirtää pelialueesta tai mailoista kuvan, ja lisätä sen tai valokuvan ohjelmaan, se tapahtuu antamalla url komento seuraavasti: #pelialue background: #00c700 url(sinunkuvasi.jpg); width: 600px; height: 300px; position: relative; overflow: hidden; 13: Musiikin lisääminen Musiikin lisäämiseksi laita HTML5 koodiin osio: <audio id="musiikki"> <source src="testikappale.mp3" /> </audio> Voit nyt ohjata musiikin soittoa JavaScript koodista seuraavasti musiikki.play(); //laittaa musiikin soimaan musiikki.pause(); //musiikki pois päältä musiikki.volume=0.2; //äänen voimakkuus, tässä 0.2