Bygg et Flickr-basert Par Game Med JavaScript Gameplay

I denne todelte opplæringen lærer du hvordan du bruker JavaScript og HTML for å lage et kortspill som drives av Flickr API. Sjekk ut demoen, og les videre!


Også tilgjengelig i denne serien:

  1. Bygg et Flickr-basert Par Game Med JavaScript: Gameplay
  2. Bygg en Flickr-basert Par Spill med JavaScript: Polsk

Trinn 1: Få en Flickr-konto

For å kunne bruke Flickr API må du være registrert bruker på flickr.com. Fra hjemmesiden til Flickr klikker du på Registrer-lenken.



Trinn 2: Skaffe en API-nøkkel

Når du er logget inn, må du besøke App Garden for å komme i gang.

Du vil ønske å bokmerke denne siden hvis du planlegger å gjøre mye Flickr-utvikling, da det inneholder mye nyttig informasjon for utviklere.

Klikk på koblingen "Opprett en app" når du kommer til App Garden.


Under "Få API-nøkkelen din" klikker du koblingen "Be om en API-nøkkel".


Her må du velge om du har tenkt å bruke appen for kommersielle eller ikke-kommersielle formål. For dette spillet valgte jeg ikke-kommersiell.


Neste blir du tatt til Appdetaljer-siden. Skriv inn navnet på appen din og en beskrivelse av hva appen din gjør, godta avtalene og klikk på Send-knappen.


Deretter vil du bli presentert med nøkkelen din og din hemmelighet. Vi vil ikke bruke den hemmelige nøkkelen her, siden vår app ikke krever godkjenning. Legg merke til API-nøkkelen din, ettersom vi trenger det for resten av denne opplæringen.



Trinn 3: Dykking i Flickr API

Flickr har en REST API for utviklere. Vi bruker disse to metodene fra API: et:

  • flickr.photos.search
  • flickr.photos.getInfo

De flickr.photos.search Metode vil tillate oss å søke etter bilder, mens flickr.photos.getInfo Metoden vil tillate oss å få informasjon om et enkelt bilde, for eksempel brukernavn (eier) av bildet, tittel på bildet og nettadressen til fotografens side på Flickr.

Hvis du besøker en av koblingene ovenfor, nederst på siden, er det en lenke til API Explorer hvor du kan skrive inn noen data og få et eksempelrespons.



Bildet ovenfor er for flickr.photos.search metode. Gå videre og klikk på linken nå.

Det er mange alternativer, og det kan virke overveldende, men alt vi er interessert i for denne opplæringen er alternativet "koder"; Jeg kom inn i "hunden" i søkeboksen for etiketter. Velg JSON som utgangsmetode, da vi skal bruke JSON i denne opplæringen.



Til slutt trykker du på "Ring Metode" -knappen, og et eksempel på svaret blir returnert. Her er en del av typen data du kan forvente å motta - de siste linjene er kuttet ut:

 "sider": "49825", "per side": 100, "totalt": "4982408", "bilde": ["id": "7338255166", "eier ":" 45596890 @ N00 "," hemmelig ":" 5f145a92b8 "," server ":" 7083 "," gård ": 8," tittel ":" Cute Rhea "," ispublic ": 1," isfriend ": 0 , "isfamily": 0, "id": "7338254718", "eier": "45596890 @ N00", "hemmelig": "9e1da794a3", "server": "7223" tittel ":" Rhea chewing "," ispublic ": 1," isfriend ": 0," isfamily ": 0, " id ":" 7338258850 "," eier ":" 8672236 @ N04 "," hemmelig " "domenet": "", "ispublic": 1, "isfriend": 0, "isfamily": 0, "id": " 7338271122 "," eier ":" 49270434 @ N08 "," hemmelig ":" 30876cfdf6 "," server ":" 7236 "," gård ": 8," tittel ":" 286 "," ispublic " isfamilie ": 0," isfamily ": 0," id ":" 7338235972 "," eier ":" 8640124 @ N02 "," hemmelig ":" a583d6aa48 "," server ":" 7085 " : 8, "title": "Y: 4 Day 123: Wind sweeps", "ispublic": 1, "isfriend": 0, "isfamily": 0, "id": "7330075254", "eier" "32081016 @ N07", "hemmelig": "04cb99 e8a7 "," server ":" 7239 "," farm ": 8," title ":" Mad dogs and Englishmen ... "," ispublic ": 1," isfriend ": 0," isfamily ": 0 id ":" 7338229968 "," eier ":" 67178219 @ N06 "," hemmelig ":" 92b4be222a "," server ":" 7095 "," gård ": 8," tittel ":" Le petit chien dans la prairie "," ispublic ": 1," isfriend ": 0," isfamily ": 0, " id ":" 7338185610 "," eier ":" 7315798 @ N04 "," hemmelig ":" 9a91bd1280 " ":" 7224 "," gård ": 8," tittel ":" snuggle "," ispublic ": 1," isfriend ": 0," isfamily ": 0, " id ":" 7338111264 " ":" 80044484 @ N06 "," hemmelig ":" f795c559e3 "," server ":" 7214 "," gård ": 8," tittel ":" DSC_0408 "," ispublic ": 1," isfriend " "isfamily": 0, "id": "7338135744", "eier": "80023312 @ N07", "hemmelig": "d37c015be6", "server": "7234", "gård": 8, "tittel ":" 0007_Ridgeback "," ispublic ": 1," isfriend ": 0," isfamily ": 0, " id ":" 7338136008 "," eier ":" 80023312 @ N07 "," hemmelig ":" 259e50ebaa "," server ":" 7219 "," gård ": 8," tittel ":" 0003_Pug "," ispublic ": 1," isfriend ": 0," isfamily ": 0, " id ":" 73 38133290 "," eier ":" 80044484 @ N06 "," hemmelig ":" a2e954aab0 "," server ":" 7098 "," gård ": 8," tittel ":" _DSC0032 "," ispublic ": 1, isfriend ": 0," isfamily ": 0," id ":" 7338142010 "," eier ":" 80023312 @ N07 "," hemmelig ":" 34809c804f "," server ":" 7071 " : "," "0", "id": "7338014824", "eier": "36700168 @ N04", " hemmelig ":" 2625ab12a4 "," server ":" 8164 "," gård ": 9," tittel ":" Nosferatus "hund", "ispublic": 1, "isfriend": 0, "isfamily": 0 "id": "7338092614", "eier": "80023312 @ N07", "hemmelig": "ee7210e0f1", "server": "8010", "gård": 9, "tittel": "0002_GreatDane" ispublic ": 1," isfriend ": 0," isfamily ": 0, " id ":" 7338120200 "," eier ":" 80023312 @ N07 "," hemmelig ":" 38b5c49f4f "," server " 7245 "," gård ": 8," tittel ":" 0006_Cavalier "," ispublic ": 1," isfriend ": 0," isfamily ": 0, " id ":" 7338159814 " 7315798 @ N04 "," hemmelig ":" 327e97cb13 "," server ":" 7104 "," gård ": 8," tittel ":" Puppy Love "," ispublic ": 1," isfriend " 0, "isfamily": 0,

Vi bruker dataene fra svaret til å konstruere våre URLS til bildene. Nettadressene tar dette skjemaet:

http: // farm farm-id .static.flickr.com / server-id / id _ hemmelig _ [mstzb] JPG

For å lage en brukbar nettadresse erstatter vi bare hva som er inne i med dataene vi får fra ovenfor. For eksempel, det første elementet fra bilde array inne ovenfor JSON er:

 "id": "7338255166", "eier": "45596890 @ N00", "hemmelig": "5f145a92b8", "server": "7083", "gård": 8, "tittel": "Cute Rhea" "ispublic": 1, "isfriend": 0, "isfamily": 0

... så nettadressen vi trenger å konstruere er dette:

http://farm8.static.flickr.com/7083/7338255166_5f145a92b8_q.jpg

"Q" angir størrelsen på bildet: 150x150px.

Denne lenken fører til dette bildet. Mer informasjon om nettadressene finnes i Flickr Dokumentasjon for Photo Source URLS.


Trinn 4: Sette opp prosjektet

I kilde nedlastingen er det en ZIP-fil kalt "StartHere.zip" som inneholder filene alle lagt ut for deg, klar til å legge til noen kode. Du kan bla gjennom disse filene for å få en ide om prosjektets struktur. Jeg har også tatt med en "README.txt" som forklarer strukturen mer detaljert.

Vi bruker følgende JavaScript-biblioteker i dette prosjektet. Du kan laste dem ned separat hvis du ønsker det.

  • jQuery
  • jQuery.imgpreload
  • jQueryUI - Jeg valgte Cupertino-temaet

Trinn 5: document.ready ()

I "js" -mappen finner du et JavaScript-filnavn "flickrgame.js". Legg til følgende kode i denne filen.

 $ (dokument) .ready (funksjon () alarm ("Klar"););

Hvis du tester «index.html» siden nå, bør du se et varsel med ordet "Klar".

Denne koden bruker jQuery's .klar() metode, som blir sparket når DOM har fullstendig lastet. Det er viktig å ringe denne metoden når du koder appene dine, fordi du må sørge for at DOM er lastet inn før du prøver å manipulere det. Hvis du for eksempel prøvde å legge til en klikkhendelseshåndterer til en knapp før DOM ble lastet og klar, ville det ikke ha noen effekt.


Trinn 6: flickrGame Objekt Literal

Vi skal bruke et objekt som heter flickrGame for å holde alle våre variabler ryddige og ryddige og ut av det globale navneområdet.

Skriv inn følgende kode i $ (Document) .ready () du la til i trinnet ovenfor, erstatte varselet.

 $ (dokument) .ready (funksjon () var flickrGame = );

Trinn 7: Legg til API-nøkkelen

Innen flickrGame objektet bokstavelig legg til følgende kode. Bytt ut "API-KEY" med API-nøkkelen du mottok da du registrerte deg.

 $ (dokument) .ready (funksjon () var flickrGame = APIKEY: "DIN API KEY");

Trinn 8: doSearch ()

De doSearch () Metoden vil ringe til Flickr API. Skriv inn følgende under flickrGame objektet bokstavelig definisjon (men fortsatt inne i $ Document.ready () funksjon):

 funksjon doSearch () var searchURL = "http://api.flickr.com/services/rest/?method=flickr.photos.search"; searchURL + = "& api_key =" + flickrGame.APIKEY; searchURL + = "& tags = hund" searchURL + = "& per_page = 36" searchURL + = "& license = 5,7"; searchURL + = "& format = json"; searchURL + = "& jsoncallback =?"; $ .getJSON (searchURL, setImages); 

Her bygger vi opp spørringen vår for steg. Vi peker på searchURL variabel til flickr.photos.search-metoden i Flickr API.

Som det er en REST API, for å ringe det, trenger vi bare å konstruere en URL med de nødvendige parametrene. Så, her bruker vi flickr.photos.search metode, og be om bilder merket med "hund". Vi har satt formatet til "json" og satt "jsoncallback =?", Som gjør tilbakeringingsfunksjonen utført så snart dataene blir spilt tilbake.

Ved å sette lisensparameteren tp 5,7 Vi ber Flickr å bare gi oss bilder med en Attribution-ShareAlike lisens eller uten kjente opphavsrettigheter.

Vi bruker deretter jQuery's $ .getJSON () -metode, passerer i vår searchURL og en henvisning til tilbakeringingsfunksjonen setImages () som vi vil kode neste.


Trinn 9: setImages ()

I dette trinnet vil vi kode på setImages () funksjon og se resultatene vi kommer tilbake fra Flickr. Skriv inn følgende kode under doSearch () funksjonen du har lagt til i trinnet ovenfor.

 funksjon setImages (data) var tempString = ""; $ .each (data.photos.photo, funksjon (jeg, element) var imageURL = 'http: // farm' + item.farm + '.static.flickr.com /' + item.server + '/' + item.id + '_' + item.secret + '_' + 'q.jpg'; tempString + = imageURL + "
";); $ (" # urls "). html (tempString);

Her initialiserer vi en variabel tempString som vil holde nettadressene vi får fra flickr. Innenfor hvert objekt, parameteren data holder JSON som ble returnert fra samtalen til Flickr API, slik det er beskrevet i trinn 3 - slik at vi kan se at de enkelte fotobjektene finnes i data.photos.photo.

Vi kan bruke jQuery's $ .each () -metode til å løpe gjennom hvert JSON-fotoobjekt som ble returnert. Inne i løkken konstruerer vi imageurl, igjen som beskrevet i trinn 3, legg det til tempString, og til slutt produksjon tempString til div som heter "urls" ved direkte å endre HTML av div.

Poenget her er å se hvilke nettadresser vi får fra vår samtale til Flickr API. Hvis du følger med kildekoden, la jeg til en div med id = "URL-adresser" så vi kunne se dette på nettsiden. (Jeg vil fjerne den i neste trinn.)

Til slutt, for å se det, må vi ringe vår doSearch () funksjon. Legg til dette rett under setImages () funksjon.

 doSearch ();

Du kan teste det her. Det kan ta et sekund eller to før du ser disse dataene, avhengig av tilkoblingshastigheten. Nedenfor er de første nettadressene returnert, hvis du ikke følger med kildekoden.

 http://farm9.static.flickr.com/8025/7183874333_9b8b43dfe1_q.jpg http://farm9.static.flickr.com/8003/7368215016_3c42485ee9_q.jpg http://farm6.static.flickr.com/5467/7179453807_a4c871311f_q. jpg http://farm9.static.flickr.com/8002/7364322976_4f02a954ea_q.jpg http://farm9.static.flickr.com/8026/7177956063_6d92435602_q.jpg http://farm8.static.flickr.com/7221/7177959671_025cc2381b_q .jpg

Trinn 10: Lagre bildene

Vi lagrer alle nettadressene vi kommer tilbake fra Flickr i en matrise, i stedet for fastkjørt sammen som en enkelt streng. Legg til følgende i flickrGame gjenstand.

 var flickrGame = APIKEY: "76656089429ab3a6b97d7c899ece839d", imageArray: []

(Pass på at du legger til kommaet etter APIKEY: "DIN API KEY".)

Legg nå følgende i setImages () funksjon. Jeg fjernet koden fra det forrige trinnet, som det var bare for demonstrasjonsformål.

 $ .each (data.photos.photo, funksjon (jeg, element) var imageURL = 'http: // farm' + item.farm + '.static.flickr.com /' + item.server + '/' + item.id + '_' + item.secret + '_' + 'q.jpg'; flickrGame.imageArray.push (imageUrl: imageURL, photoid: item.id););

Her skyver vi imageurl og item.idimageArray ved hjelp av tastene Bildeadresse og PHOTOID henholdsvis. Vi trenger Bildeadresse å konstruere våre bilder, og PHOTOID vil bli brukt til å identifisere det aktuelle bildet. Vi må også vise en attribusjon for bildene vi bruker, og ved å ha deres id kan vi koble brukeren til bildet på Flickr.

Behovet for alle disse dataene blir tydeligere da vi beveger oss gjennom opplæringen, så vær ikke bekymret for mye om det for nå.


Trinn 11: infoLoaded ()

De infoLoaded () funksjonen vil bli brukt til å laste inn informasjonen til bildene. Etter at all bildeinformasjon er lastet inn, infoLoaded () vil ringe en funksjon som heter preloadImages () som vil forhåndsbelaste bildene.

Når alle bildene har blitt forhåndslastet, ringer vi drawImages (), som plasserer bildene på skjermen, og spillet begynner.

Legg til følgende under setImages () funksjon.

 funksjon infoLadet (data) 

De data parameteren vil holde JSON av hvert bestemt bilde. Vi kommer tilbake til dette litt; for nå vil vi bare bruke denne funksjonen til å ringe preloadImages () direkte. Gå videre og legg til anropet nå:

 funksjon infoLoaded (data) preloadImages (); 

Trinn 12: preloadImages ()

De preloadImages () funksjonen vil bli brukt til å lage og forhåndsbelaste bildene for starten av spillet, og for hvert nivå. Vi forhåndslaster dem, så det er ingen forsinkelser mellom når vi viser bildene og når de laster ned.

Vi kommer tilbake til forhåndsbelaste koden senere. For nå vil vi bare lage de første 12 bildene for starten av spillet. Vi trenger et nytt utvalg for å holde disse 12 bildene, så legg til følgende til din flickrGame gjenstand:

 var flickrGame = APIKEY: "76656089429ab3a6b97d7c899ece839d", imageArray: [], tempImages: []

Pass på at du legger til et komma etter imageArray: [].

De tempImages array brukes til å holde 12 bilder om gangen. Vårt spill bruker 12 bilder per nivå, og imageArray Har opptil 36 bilder (avhengig av hvor mange vi satt i vårt søk til Flickr). Så vi vil ta tak i 12 bilder fra imageArray og lagre dem inn tempImages.

Legg til følgende kode under infoLoaded () funksjonen du har lagt til i trinnet ovenfor.

 funksjon preloadImages () flickrGame.tempImages = flickrGame.imageArray.splice (0, 12); for (var i = 0; i < flickrGame.tempImages.length; i++)  for (var j = 0; j < 2; j++)  var tempImage = new Image(); tempImage.src = "cardFront.png"; tempImage.imageSource = flickrGame.tempImages[i].imageUrl; flickrGame.theImages.push(tempImage);   

Her bruker vi javascript-metoden spleise () å trekke 12 bilder ut av imageArray, og legg dem inn i tempImages array. Vi bruker deretter en nestet til sløyfe for å lage 24 bilder.

For hver av disse 24 bildene oppretter vi en ny Bilde, sett sin src til "cardFront.png" (et bilde du vil se før kortet er vendt over), opprett en ny eiendom som heter imageSource som inneholder nettadressen til det faktiske bildet fra Flickr som skal vises, og deretter skyver det inn i matrisen bildene.

Vi må legge til bildene til vår flickrGame objekt, så gjør det nå.

 var flickrGame = APIKEY: "76656089429ab3a6b97d7c899ece839d", imageArray: [], tempImages: [], theImages: []

Pass på at du legger til kommaet etter tempImages [].

La oss fortsette å ringe drawImages () fungere også; Når vi har skrevet det, vil dette gjøre bildene på skjermen. Legg til følgende etter det nestede til sløyfe i preloadImages () funksjon.

 funksjon preloadImages () flickrGame.tempImages = flickrGame.imageArray.splice (0, 12); for (var i = 0; i < flickrGame.tempImages.length; i++)  for (var j = 0; j < 2; j++)  var tempImage = new Image(); tempImage.src = "cardFront.png"; tempImage.imageSource = flickrGame.tempImages[i].imageUrl; flickrGame.theImages.push(tempImage);   drawImages(); 

Trinn 13: Shuffling og Rendering

De drawImages () funksjonen setter faktisk bildene på skjermen. Vi shuffle først bildene i bildene array ved hjelp av en funksjon som kalles randSort og legg dem deretter til #gamediv delen av HTML-koden.

Skriv inn følgende kode under flickrGame objektdefinisjon:

 funksjon randOrd () return (Math.round (Math.random ()) - 0.5); 

Denne funksjonen brukes til å blande bildene. Vi vil ringe til JavaScript sortere() metode på en matrise og passere inn randOrd som parameter. Dette fungerer i utgangspunktet på samme måte som beskrevet i "Sorteringsmetoden" i denne artikkelen.

Legg til følgende under preloadImages () Funksjon du har lagt til i trinnet ovenfor:

 funksjon drawImages () flickrGame.theImages.sort (randOrd); for (var i = 0; i < flickrGame.theImages.length; i++)  $(flickrGame.theImages[i]).attr("class", "card").appendTo("#gamediv");  

Vi kaller typen metode på bildene, passerer i vår randOrd funksjon, deretter loop gjennom bildene, legger til hvert bilde til #gamediv.

Vi bruker jQuery-metoden .attr å legge til en klasse med "kort" til hvert bilde. Hvorfor? Fordi når vi slutter et nivå, fjerner vi kortene fra #gamediv; Dette gir oss en måte å målrette mot bare kortene og ikke alle Bilder.

Her er lenker til jQuery's attr () og appendTo () -metoder, slik at du kan lære mer om dem.


Trinn 14: Tester vår fremgang

Vi bør være klare til å få noen kort på skjermen på dette tidspunktet. Etter .Hver() ring inn setImages Ring infoLoaded () funksjon og test siden.

 funksjon setImages (data) $ .each (data.photos.photo, funksjon (jeg, element) var imageURL = 'http: // farm' + item.farm + '.static.flickr.com /' + item. server + '/' + item.id + '_' + item.secret + '_' + 'q.jpg'; flickrGame.imageArray.push (imageUrl: imageURL, photoid: item.id);); infoLoaded (); 

Hvis alt går bra, bør du se 24 bilder med Flickr-logoen på skjermen. Det kan ta et øyeblikk før de viser, fordi vi ringer Flickr API og laster bildene også.

Vi vil gjøre en liten endring i koden slik at vi kan se de faktiske bildene for nå. Endre preloadImages () funksjon for å vise det faktiske bildet i stedet for "cardFront.png":

 funksjon preloadImages () flickrGame.tempImages = flickrGame.imageArray.splice (0, 12); for (var i = 0; i < flickrGame.tempImages.length; i++)  for (var j = 0; j < 2; j++)  var tempImage = new Image(); tempImage.src = flickrGame.tempImages[i].imageUrl; //"cardFront.png"; tempImage.imageSource = flickrGame.tempImages[i].imageUrl; flickrGame.theImages.push(tempImage);   drawImages(); 

Test spillet nå.


Trinn 15: Legge til klikkluffere

De addListeners () funksjonen vil legge til en klikklytter til hvert av bildene som kaller en funksjon doFlip (), som igjen vil vise bildet under (hvis logoen er for øyeblikket vist).

Legg til følgende under drawImages () Funksjon du har lagt til i trinnet ovenfor:

 funksjon addListeners () for (var i = 0; i < flickrGame.theImages.length; i++)  $(flickrGame.theImages[i]).on("click", function (e)  doFlip(e); );  

Vi legger til lytterne i drawImages () funksjon:

 funksjon drawImages () flickrGame.theImages.sort (randOrd); for (var i = 0; i < flickrGame.theImages.length; i++)  $(flickrGame.theImages[i]).attr("class", "card").appendTo("#gamediv");  addListeners(); 

Trinn 16: Fjerner klikklyttere

Vi trenger en måte å fjerne klikklyttere fra bildene også. Legg til følgende under addListeners () funksjonen du har lagt til i trinnet ovenfor.

 funksjon removeListeners () for (var i = 0; i < flickrGame.theImages.length; i++)  $(flickrGame.theImages[i]).off("click");  

Trinn 17: doFlip ()

De doFlip () funksjon kalles når brukeren klikker på ett av bildene. Den viser de store bildene til venstre og høyre for det viktigste gamplayområdet, og kaller deretter en funksjon checkForMatch () som sjekker om bildene stemmer overens.

Legg til følgende under removeListeners () funksjonen du har lagt til i trinnet ovenfor.

 funksjon doFlip (e) var theCard = e.target; $ (theCard) .attr ("src", theCard.imageSource); hvis ($ ('# image1'). css ('backgroundImage') == "ingen") $ ('# image1'). css ('backgroundImage', 'url (' + theCard.imageSource + ')') ;  ellers $ ('# image2'). css ('backgroundImage', 'url (' + theCard.imageSource + ')');  hvis (flickrGame.chosenCards.indexOf (theCard) == -1) flickrGame.chosenCards.push (theCard); $ (TheCard) .off ( "klikk");  hvis (flickrGame.chosenCards.length == 2) removeListeners (); checkForMatch (); 

Vi får først en referanse til hvilket kort som ble klikket og sett det src Tilskrive URL-adressen til selve bildet (i stedet for Flickr-logoen).

Vi sjekker deretter om CSS-bakgrunnen til det store bildet til venstre (# image1) er lik "ingen", og hvis det er satt vi bakgrunnsbildet til det samme bildet som kortet vi klikket på. Hvis det ikke er lik «ingen», betyr det at et kort er klikket, så vi stiller bakgrunnsbildet til det store bildet på Ikke sant.

Vi sjekker at chosenCards array (som vi legger til i et øyeblikk) ikke allerede inneholder dette kortet, for sikker housekeeping, og deretter skyve den på arrayen. Vi fjerner også klikkhendelsen fra kortet slik at de ikke kan klikke på det igjen.

Hvis chosenCards Lengden er lik 2, det betyr at brukeren har valgt to kort, så vi ringer removeListeners () for å fjerne klikkhendelsen fra resten av kortene og ringe til checkForMatch () funksjon (som vi vil kode i neste trinn) for å se om de valgte kortene stemmer overens.

Vi må legge til chosenCards array til vår flickrGame objekt, så gjør det nå:

 var flickrGame = APIKEY: "76656089429ab3a6b97d7c899ece839d", imageArray: [], tempImages: [], theImages: [], selectedCards: []

Pass på å legge til et komma etter bildene[].


Trinn 18: checkForMatch ()

De checkForMatch () funksjonen sjekker om de to klikkte kortene stemmer overens. Hvis de gjør så skjuler vi dem; Hvis de ikke gjør det, legger vi lytterne tilbake til de resterende kortene og lar spilleren ha en annen tur.

Legg til følgende under doFlip () Funksjon du har lagt til i trinnet ovenfor:

 funksjonen checkForMatch () if (flickrGame.chosenCards.length == 2) if ($ ("# image1"). css ('bakgrunnsbilde') == $ ("# image2"). css bilde ')) setTimeout (hideCards, 1000);  ellers setTimeout (resetImages, 1000); 

Her kontrollerer vi om chosenCards lengden er lik 2. Hvis det er, sjekker vi om de to store bildene er de samme ved å bruke deres bakgrunnsbilde. (Vi kunne ha brukt de mindre bildene i stedet, som en øvelse, se om du kan gjøre dette.)

Hvis bildene stemmer overens, bruker vi setTimeout () å ringe hideCards () fungere etter et sekund; ellers kaller vi resetImages () etter et sekund. Ved å forsinke disse funksjonssamtalene legger vi til en veldig kort pause i spillet.

Vi kodes funksjonene for å skjule kortene og tilbakestille bildene neste.


Trinn 19: hideCards ()

Hvis brukeren passet to kort, skjuler vi dem begge, og legger til klikkelyttene tilbake til resten av kortene.

Legg til følgende kode under checkForMatch () Funksjonen du opprettet i trinnet ovenfor:

 funksjon hideCards () $ (flickrGame.chosenCards [0]). animate ('opacity': '0'); $ (flickrGame.chosenCards [1]). animate ('opacity': '0'); flickrGame.theImages.splice (flickrGame.theImages.indexOf (flickrGame.chosenCards [0]), 1); flickrGame.theImages.splice (flickrGame.theImages.indexOf (flickrGame.chosenCards [1]), 1); $ ("# image1"). css ('bakgrunnsbilde', 'ingen'); $ ("# image2"). css ('bakgrunnsbilde', 'ingen'); addListeners (); flickrGame.chosenCards = new Array (); 

Vi bruker jQuery's animate () -metode for å tween begge kortets opasitet til 0, slik at de ser ut til å falme ut. Vi fjerner også bildene fra bildene array, tilbakestill de store bildene til "ingen", legg til lytterne tilbake til de andre bildene, og tilbakestill vår chosenCards matrise.

Prøv det her.


Trinn 20: resetImages ()

Denne funksjonen kjøres hvis de to valgte bildene ikke stemmer overens. Det tilbakestiller de små bildene ' src attributter tilbake til "cardFront.png", setter de store bildene bakgrunnen til "ingen", legger lytterne tilbake til kortene, og tilbakestiller de chosenCards matrise.

Legg til følgende under hideCards funksjonen du har lagt til i trinnet ovenfor.

 Funksjonstilpasninger () $ (flickrGame.chosenCards [0]). Attr ("src", "cardFront.png"); $ (flickrGame.chosenCards [1]). Attr ("src", "cardFront.png"); $ ("# image1"). css ('bakgrunnsbilde', 'ingen'); $ ("# image2"). css ('bakgrunnsbilde', 'ingen'); addListeners (); flickrGame.chosenCards = new Array (); 

Du kan faktisk spille spillet nå - bortsett fra at bildene vises. For å endre det tilbake, endre preloadImages () fungere som slik:

 funksjon preloadImages () flickrGame.tempImages = flickrGame.imageArray.splice (0, 12); for (var i = 0; i < flickrGame.tempImages.length; i++)  for (var j = 0; j < 2; j++)  var tempImage = new Image(); tempImage.src = "cardFront.png"; tempImage.imageSource = flickrGame.tempImages[i].imageUrl; flickrGame.theImages.push(tempImage);   drawImages(); 

(Det er godt å endre dette frem og tilbake for enkel testing.)

Her er resultatet!


Slutten av del 1

Det er slutten på den første delen av denne opplæringen. Så langt har du laget et funksjonelt HTML5-spill; I neste del legger du til polsk, lærer å:

  • La spilleren velge sin egen tag, i stedet for å spille med bilder av hunder hele tiden.
  • Hent og vise tilskrivningsinformasjon for alle bildene som brukes.
  • Legg til flere runder og et scoring system til spillet.
  • Last inn bildene og vis en fremdriftslinje for dette.

Ser deg da!