Create en Dancing Hangman spillet i Corona: Gameplay
21
Del
2
Del
Denne Cyber Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter Lag en dans Hangman spillet i Corona.Create en dans Hangman spillet i Corona. Prosjekt SetupWhat Du skal lage
I den første delen av denne to -delen serien, la vi grunnlaget for overgangen mellom skjermbilder og for å tegne bøddelen hjelp Corona tegning API. I den andre og siste del av denne serien, vil vi gjennomføre spillet logikk, og overgangen til en vinn-skjermen hvor bøddelen vil gjøre en dans sammen med litt musikk. Kan komme i gang.
1. Opprette Word til Gjett
Trinn 1: Lese en tekstfil
Spillet leser i ord fra en tekstfil som inneholder tusenvis av ord. Vi vil filtrere ord basert på deres lengde og legge dem til en av tre lister, ord som er 5 tegn eller mindre, ord som er 9 tegn eller mindre, og ord som er 13 tegn eller mindre.
< p> Ved å ha tre separate ordlister, kan vi integrere et vanskelighetsnivå basert på ordlengde. Vi vil ikke gjøre det i denne opplæringen, men ordene vil allerede være delt opp i separate lister bør du bestemmer deg for å forfølge dette alternativet på egen hånd.
Legg til følgende kode i gamescreen.lua.
Funksjon readTextFile () lokale banen = system.pathForFile ( "wordlist.txt", system.ResourceDirectory) lokal fil = io.open (bane, "r") for linje i filen: linjer () gjør --Hvis rettet mot Windows Operating System kommentar følgende linje ut - line = string.sub (linje 1, #line - 1) if (#line > = 3 og #line < = 5) da table.insert (words5, linje) elseif (#line > = 3 og # linje < = 9) så table.insert (words9, linje) elseif (#line > = 3 og # linje < = 13) så table.insert (words13, linje) end end io.close ( ) fil file = nilend
readTextFile funksjonen leser i tekstfilen wordlist.txt. Vi sløyfe gjennom hver linje av wordlist.txt og, avhengig av ordets lengde, sett det inn i en av tre tabeller, words5, words9, eller words13.
Windows og Unix-baserte systemer håndtere linjeavslutninger annerledes. På Windows, vil det være en ekstra karakter, som vi kan fjerne ved hjelp av string.sub metoden. Hvis du bruker en Windows-maskin, må du legge til at kodelinje ved å fjerne -. Foregående det
Når du leser en fil, er det viktig å huske på at når du er ferdig, bør du lukke og nil ut filen som vises i gjennomføringen
Påkall denne funksjonen i scene. opprette. Jeg plasserte den på toppen, over de andre funksjonskall
funksjon scene. Opprette (hendelse) lokal gruppe = self.view readTextFile () drawChalkBoard (1,1,1) --SNIP - end
Trinn 2: createGuessWord
createGuessWord funksjonen er ansvarlig for å få et tilfeldig ord fra listen, og returnere den. Legg til følgende kode gamescreen.lua
funksjon createGuessWord () guessWord = {} lokale randomIndex = math.random (# words5) theWord = words5 [randomIndex].; print (theWord) for i = 1, #theWord gjøre lokal karakter = theWord: sub (i, i) if (karakter == "" ") så guessWord [i] =" ' "; elseif (tegnet == "-") så guessWord [i] = "-" ellers guessWord [i] = ""; end end lokale newGuessWord = table.concat (guessWord) returnerer newGuessWord; end
Vi bruker en tabell, guessWord, til å lagre hver bokstav i ordet. Grunnen til dette er at strengene er uforanderlig i Lua, noe som betyr at vi ikke kan endre et tegn på strengen.
Vi først generere et tilfeldig tall randomIndex, som vil være et nummer fra 1 til men mange elementer er i tabellen. Vi bruker da at nummer for å få et ord fra bordet.
Vi løkke over ordet og få en henvisning til løpende karakter ved hjelp av string.sub metoden. Hvis den nåværende karakter er en apostrof eller en bindestrek, vi sette det inn i tabellen guessword, ellers setter vi et spørsmålstegn i tabellen.
Vi deretter forvandle bordet guessWord inn en streng newGuessWord bruker table.concat metode. Til slutt, vi kommer tilbake newGuessWord
Trinn 3:.. CreateGuessWordText
createGuessWordText funksjonen lager Tekst på toppen av spillområdet som vil endres avhengig av spillerens gjetning
funksjon createGuessWordText () lokale alternativer = {text = createGuessWord (), x = 384, y = 70, width = 700, --required for flere linjer og justering font = native.systemFontBold, fontstørrelse = 50, align = "center" --new justering parameter} guessWordText = display.newText (opsjoner) guessWordText: setFillColor (0,0,0) scene.view: sett (guessWordText) end
Alternativ tabell inneholder de ulike konfigurasjonsmuligheter for teksten. Fordi createGuessWord funksjonen returnerer et ord som en streng, kan vi bare påkalle den når du setter teksten eiendommen.
Vi skaper teksten ved å påberope seg newText metoden på skjerm, passerer på alternativ tabellen. Vi satt sin farge og sett den inn i scenen syn
Påkall denne funksjonen i scene. Opprette som vist nedenfor
funksjon scene. Opprette (hendelse) --SNIP-- drawGallows () createGuessWordText ( ) end
et ord om Metatables
Lua programmeringsspråk har ikke et førsteklasses system bygget i. Men ved å bruke Lua er metatable konstruere kan vi etterligne en klasse system. Det er et godt eksempel på Corona nettside, som viser hvordan å gjennomføre dette.
En viktig ting å merke seg er at Corona er Vis objekter ikke kan settes som metatable. Dette har å gjøre med hvordan de underliggende C-språk grensesnitt med dem. En enkel måte å komme rundt dette på er å sette skjerm objekt som en nøkkel på et nytt bord og deretter sette det bordet som metatable. Dette er den tilnærmingen som vi tar i denne opplæringen.
Hvis du leser artikkelen ovenfor på Corona nettside, vil du ha lagt merke til at __Index metamethod ble brukt på metatable. Måten __Index metamethod verk, er at når du prøver å få tilgang til en fraværende felt i en tabell, det utløser tolk for å lete etter en __Index metamethod. Hvis __Index er der, vil det se for feltet og gi resultatet, ellers vil det resultere i null.
2. Implementering av GrowText Class
Spillet har tekst som vil vokse fra liten til stor over en kort periode, når brukeren vinner eller taper spillet. Vi vil skape denne funksjonaliteten som en modul. Ved å ha denne koden som en modul, kan vi bruke det i ethvert prosjekt som krever denne funksjonaliteten.
Legg til følgende growtext.lua, som du opprettet i første del av denne serien.
Lokal growText = {} lokale growText_mt = {__index = growText} funksjon growText.new (theText, positionX, positionY, theFont, theFontSize, Dersom Gruppe) lokal theTextField = display.newText (theText, positionX, positionY, theFont, theFontSize) lokal newGrowText = {theTextField = theTextField} if (Dersom Gruppe ~ = null) deretter Dersom Gruppe: sett (theTextField) end retur setmetatable (newGrowText, growText_mt) endfunction growText: SetColor (r, b, g) self.theTextField: setFillColor (r, g, b) endfunction growText : vokse () transition.to (self.theTextField, {XScale = 4,0, ySkala = 4,0, tid = 2000, gjentakelser = 1, onComplete = function () lokal hendelse = {name = "gameOverEvent",} self.theTextField.xScale = 1 self.theTextField.yScale = 1 Spilletid: dispatchEvent (hendelse) end}) endfunction growText: setVisibility (synlig) if (synlig == true) så self.theTextField.isVisible = true annet self.theTextField.isVisible = false slutten selv .theTextField.xScale = 1 self.theTextField.yScale = 1endfunction growText: setText (theText) self.theTextField.text = theTextendreturn growText
Vi skaper hovedtabellen growText og bordet for å bli brukt som metatable, growText_mt. I den nye metoden, skaper vi tekstobjektet og legge den til bordet newGrowText som vil bli satt som metatable. Vi legg deretter til tekstobjekt som den gruppen som ble vedtatt som en parameter, som vil være scenens gruppe der vi instantiate en forekomst av GrowText.
Det er viktig å sørge for at vi legger det til scenens gruppe, så det vil bli fjernet når scenen er fjernet. Til slutt setter vi metatable.
Vi har fire metoder som har tilgang til tekstobjektet og utføre operasjoner på sine eiendommer.
SetColor
SetColor metoden angir farge på teksten ved å påberope seg setFillColor metode, som tar som parameter R, G og B verdier tall fra 0 til 1.
vokse
vokse metoden bruker Overgang biblioteket for å gjøre teksten vokse. Det forstørrer teksten ved hjelp av XScale og ySkala egenskaper. Den onComplete funksjon blir påberopt når overgangen er fullført.
I denne onComplete funksjonen null vi tekstens XScale og ySkala egenskaper til en og sende en hendelse. Grunnen til at vi sende en hendelse her er å informere gamescreen at tekst er ferdig med sin overgang, og derfor spillet runden er over.
Dette vil alle bli klar snart, men det kan være lurt å lese opp på dispatchEvent i dokumentasjonen.
setVisibility
setVisibility metoden angir bare synligheten av teksten, avhengig av om sant eller usant ble vedtatt som en parameter. Vi nullstiller også XScale og ySkala eiendom til 1.
setText
setText metoden brukes til å stille inn selve teksten eiendom, avhengig av hva streng ble vedtatt i som parameter.
til slutt, vi returnere growText objektet.
3. createWinLoseText
createWinLoseText funksjonen lager en GrowText objekt som viser enten "du vinner!" eller "du mister!", avhengig av om brukeren vinner eller taper en runde. Legg til følgende kode gamescreen.lua.
Funksjon createWinLoseText () winLoseText = growText.new ( "DU VINNE", display.contentCenterX, display.contentCenterY-100, native.systemFontBold, 20, scene.view) winLoseText: setVisibility (false) end
Vi benytter denne funksjonen i scene: create, som vist nedenfor
funksjon scene. opprette (hendelse) --SNIP-- drawGallows () createWinLoseText () end
4. setupButtons
setupButtons funksjonen setter opp knappene, trekker dem til skjermen, og legger en hendelse lytteren som vil kalle funksjonen checkLetter. Den checkLetter funksjonen er der spillets logikk foregår.
Funksjons setupButtons () lokale XPOS = 150 lokale yPos = 600 for i = 1, #alphabetArray gjøre hvis (i == 9 eller i == 17) da yPos = yPos + 65 XPOS = 150 end if (i == 25) så yPos = yPos + 65 XPOS = 330 end lokale tempButton = widget.newButton {label = alphabetArray [i], labelColor = {default = {1,1, 1}}, onPress = checkLetter, shape = "roundedRect", width = 40, height = 40, cornerRadius = 2, fillColor = {default = {0, 0, 0, 1}, over = {0,5, 0.5, 0.5, 0,4}}, strokeColor = {default = {0,5, 0.5, 0.5, 0.4}, over = {0, 0, 0, 1}}, strokeWidth = 5} tempButton.x = XPOS tempButton.y = yPos XPOS = XPOS + 60 table.insert (gameButtons, tempButton) Sluttslutt
Vi først satt de første x og y posisjon deretter. Vi deretter kjøre en for løkke over alphabetArray, som igjen skaper en knapp for hver bokstav i alphabetArray. Vi ønsker åtte knapper per rad, så vi sjekke om jeg er lik 9 eller 17, og i så fall, øke vi yPos variabel for å opprette en ny rad og tilbakestille XPOS til begynnelsen posisjon. Hvis jeg er lik 25, er vi på siste rad, og vi sentrere de to siste knappene.
Vi skaper en tempButton ved hjelp av newButton metoden i widget klasse, som tar et bord av alternativer. Det er flere måter å påvirke det visuelle inntrykket av knappene. For dette spillet, bruker vi Shape Construction alternativet. Jeg foreslår at du leser dokumentasjonen på knappeobjekt for å lære mer om disse alternativene.
Vi setter etiketten ved å indeksere inn alphabetArray og sette onPress eiendommen for å ringe checkLetter. Resten av valgene har å gjøre med det visuelle utseende og bedre forklart ved å lese dokumentasjonen som nevnt tidligere. Til slutt, setter vi den tempButton i tabellen gameButtons slik at vi kan referere til den senere
Hvis du nå benytter denne metoden fra scenen. Opprette, skal du se at knappene er trukket til skjermen. Vi kan ikke trykke dem ennå, fordi vi ikke har opprettet checkLetter funksjon. Vi vil gjøre det i neste trinn
funksjon scene. Opprette (hendelse) --SNIP-- createGuessWordText () createWinLoseText () setupButtons () end
5. checkLetter
Spillets logikk bor i checkLetter funksjon. Legg til følgende kode gamescreen.lua
funksjon checkLetter (hendelse) lokal tempButton = event.target lokal theLetter = tempButton. GetLabel () theLetter = string.lower (theLetter) lokal correctGuess = false lokal newGuessWord = " "tempButton.isVisible = false for i = 1, # theWord gjøre lokal karakter = theWord: sub (i, i) if (karakter == theLetter) så guessWord [i] = theLetter correctGuess = true end end newGuessWord = table.concat ( guessWord) guessWordText.text = newGuessWord if (correctGuess == false) så numWrong = numWrong en drawHangman (numWrong); end if (newGuessWord == theWord) så wonGame = true didWinGame (sann) end if (numWrong == 6) deretter for i = 1, #theWord gjøre guessWord [i] = theWord: sub (i, i) newGuessWord = tabellen. concat (guessWord) guessWordText.text = newGuessWord; ende didWinGame (falsk) Sluttslutt
Det første vi gjør er, får brevet brukeren har gjettet ved å påberope seg getLabel metoden på knappen. Dette returnerer knappens etikett, en stor bokstav. Vi konverterer dette brevet til små bokstaver ved å kalle den nedre metoden på strengen, som tar som parameter strengen som skal lowercased.
Vi satt correctGuess til false, newGuessWord til en tom streng, og skjule knappen brukeren har tappet, fordi vi ikke vil at brukeren skal kunne trykke på knappen mer enn en gang per runde.
Neste, vi løkken over theWord, få den nåværende karakter ved hjelp av string.sub metoden, og sammenligne det tegn til theLetter. Hvis de er like, så brukeren har gjort et riktig gjetning, og vi oppdaterer den aktuelle bokstaven i guessWord, sette correctGuess til sann.
Vi skaper newGuessWord ved hjelp av table.concat metoden, og oppdatere guessWordText å reflektere eventuelle endringer.
Hvis correctGuess er fortsatt falsk, betyr det at brukeren har gjort en feil gjetning. Som et resultat, øke vi numWrong variabel og påkalle drawHangman funksjon, passerer i numWrong. Avhengig av hvor mange feil gjetter at brukeren har gjort, vil drawHangman funksjon trekke bøddel som passer.
Hvis newGuessWord er lik theWord, betyr det at brukeren har gjettet ordet og vi oppdaterer wonGame til sann, ringer den didWinGame funksjon og bestått i oppfyllelse.
Hvis numWrong er lik 6, betyr det at brukeren har brukt opp alle sine gjetninger og bøddelen har blitt fullt ut benyttet. Vi sløyfe gjennom theWord og sett hver karakter i guessWord lik karakterene i theWord. Vi viser så brukeren det riktige ordet.
Denne bit av koden skal være fornuftig nå som vi har gjort noe lignende et par ganger før. Til slutt, vi kaller didWinGame og passerer i falsk.
6. Vinne og tape
Trinn 1: didWinGame
didWinGame funksjonen kalles når bruken enten vinner av mister en runde
funksjon didWinGame (gameWon) hideButtons () winLoseText. SetVisibility (sann ) if (gameWon == true) så winLoseText: setText ( "dU VINNE !!") winLoseText: SetColor (0,0,1) ellers winLoseText: setText ( "dU tAPER !!") winLoseText: SetColor (1,0, 0) ende winLoseText: vokse () end
det første vi gjør er påberope hideButtons, som, som navnet antyder, skjuler alle knappene. Vi setter winLoseText å være synlig, og, avhengig av om brukeren har vunnet eller tapt runden, satt sin tekst og farge som passer. Til slutt, påberope vi vokse metoden på winLoseText.
Som vi så tidligere i denne opplæringen, når teksten er ferdig å vokse, sender det en hendelse. Vi trenger å bruke Runtime å lytte etter den hendelsen. Vi vil bli koding denne funksjonaliteten i de kommende trinnene
Trinn 2:. Vise og skjule knappene
De showButtons og hideButtons funksjoner vise eller skjule knappene ved looping gjennom gameButtons bordet , sette hver av knappen synlighet.
funksjons hideButtons () for i = 1, #gameButtons gjøre gameButtons [i] .isVisible = false endendfunction showButtons () for i = 1, #gameButtons gjøre gameButtons [i] .isVisible = sann Sluttslutt
Trinn 3: drawHangman
drawHangman funksjonen tar et tall som en parameter. . Avhengig av hva det tallet er, det trekker en bestemt del av bøddelen
funksjon drawHangman (drawNum) if (drawNum == 0) deretter drawGallows (); elseif (drawNum == 1) deretter drawHead (); elseif (drawNum == 2) deretter drawBody (); elseif (drawNum == 3) deretter drawArm1 (); elseif (drawNum == 4) så drawArm2 (); elseif (drawNum == 5) da drawLeg1 (); elseif (drawNum == 6) så drawLeg2 (); Sluttslutt
Trinn 4: Test Progress
Det har vært en god stund siden vi har sjekket vår fremgang, men hvis du tester nå du bør være i stand til å spille et par runder. For å tilbakestille spillet gå til Fil > Relansering i Corona Simulator. Husk at det riktige ordet blir skrevet til konsollen, slik som bør hjelpe deg å teste alt fungerer som det skal.
Når winLoseText er ferdig med å vokse, vil vi starte en ny runde. Hvis brukeren har vunnet runden, vil vi gå til en ny scene hvor bøddelen vil gjøre en lykkelig dans. Hvis brukeren har tapt, vil vi tilbakestille alt i gamescreen.lua og begynne en ny runde.
Før vi gjør noe av det, men vi trenger å lytte til gameOverEvent som blir sendt fra growText klassen .
7. Game Over
Trinn 1: Lytte etter gameOverEvent
Legg til følgende scenen: showet metode
funksjon scene. Fremvisning (hendelse) --SNIP-- if (fase == "gjorde") så Spilletid: addEventListener ( "gameOverEvent", Game) Sluttslutt
Vi passerer gameOverEvent som første argument i addEventListener metoden. Når en gameOverEvent er sendt, er Gameover-funksjonen kalles.
Vi bør også fjerne arrangementet lytteren på et tidspunkt. Vi gjør dette i scenen: hide metode som vist nedenfor
funksjon scene. Hide (hendelse) lokal fase = event.phase if (fase == "vil") så Spilletid: removeEventListener ( "gameOverEvent", Game) Sluttslutt
Trinn 2: Game
Legg til følgende kode i gamescreen.lua
funksjon Gameover () winLoseText. setVisibility (falsk) if (wonGame == true) så composer.gotoScene ( "gameoverscreen" ) ellers newGame () Sluttslutt
Hvis brukeren har vunnet spillet, påberope vi gotoScene metoden på komponisten objektet og overgang til gameoverscreen. Hvis ikke, kaller vi det newGame metoden, som tilbakestiller spillet og skaper et nytt ord
Trinn 3:. NewGame
newGame funksjonen tilbakestiller noen variabler, setter knappene til å være synlig, tømmer den hangmanGroup, og skaper et nytt ord.
funksjon newGame () clearHangmanGroup () drawHangman (0) numWrong = 0 guessWordText.text = createGuessWord () showButtons () end
det meste av denne koden bør være kjent for deg. Den clearHangmanGroup funksjonen er det eneste nye her, og vi vil se på den funksjonen i neste trinn
Trinn 4:. ClearHangmanGroup
clearHangmanGroup looper bare gjennom hangmanGroup er numChildren og fjerner dem. I utgangspunktet er vi rydde alt ut, slik at vi kan begynne å tegne på nytt
funksjon clearHangmanGroup () for i = hangmanGroup.numChildren, 1, -1 gjøre hangmanGroup [i]. RemoveSelf () hangmanGroup [i] = nilend
Trinn 5: Test Progress
Vi er på et punkt der vi kan teste fremgang igjen. Hvis du tester spillet, kan du miste et spill og et nytt spill skal starte. Du kan gjøre dette så lenge du ønsker. I neste trinn vil vi få gameoverscreen kablet opp.
8. Game Over Screen
Opprett en ny fil gameoverscreen.lua og legge til følgende kode i det
lokal komponist = require ( "komponist") lokale scenen = composer.newScene () lokal hangmanSprite lokal hangmanAudiofunction scene.: skape (event) lokal gruppe = self.view drawChalkBoard () lokale alternativer = {width = 164, height = 264, numFrames = 86} lokale hangmanSheet = graphics.newImageSheet ( "hangmanSheet.png", alternativer) lokal sequenceData = {{start = 1, teller = 86, tid = 8000, loopCount = 1}} hangmanSprite = display.newSprite (hangmanSheet, sequenceData) hangmanSprite.x = display.contentCenterX hangmanSprite.y = display.contentCenterY hangmanSprite.xScale = 1,5 hangmanSprite.yScale = 1,5 gruppe: sett (hangmanSprite) endfunction scene: vis (hendelse) lokal fase = event.phase lokal previousScene = composer.getSceneName ( "forrige") composer.removeScene (previousScene) if (fase == "gjorde") så hangmanSprite: addEventListener ( "sprite", hangmanListener) hangmanSprite: play () hangmanAudio = audio.loadSound ( "danceMusic.mp3") audio.play (hangmanAudio) endendfunction scene: hide (hendelse) lokal fase = event.phase if (fase == "vil" ) så hangmanSprite: removeEventListener ( "sprite", hangmanListener) audio.stop (hangmanAudio) audio.dispose (hangmanAudio) endendfunction drawChalkBoard () lokal tavla = display.newRect (0, 0, display.contentWidth, display.contentHeight) tavlen: setFillColor (1,1,1) chalkBoard.anchorX = 0 chalkBoard.anchorY = 0 scene.view: sett (tavle) endfunction hangmanListener (hendelse) if (event.phase == "endte") så timer.performWithDelay (1000, newGame, 1) endendfunction newGame () composer.gotoScene ( "gamescreen") endscene: addEventListener ( "skape", scene) scene: addEventListener ( "show", scene) scene: addEventListener ( "skjule", scene) tilbake scene
hangmanSprite er en SpriteObject som vil bli brukt til dans animasjon. Den hangmanAudio er en AudioObject som skal brukes til å spille litt musikk mens bøddelen gjør sitt danse
Trinn 1:. Animere Hangman
Som jeg nevnte, er hangmanSprite en SpriteObject forekomst og etter ha hangmanSprite være en sprite i stedet for et vanlig bilde, kan vi animere det. Den hangmanSprite har 86 separate bilder, hver og en å være en annen ramme for animasjonen. Du kan se dette ved å åpne hangmanSheet.png i et bilderedigeringsprogram.
Alternativ tabellen holder bredde, høyde og numFrames av de enkelte bildene i større format. Den numFrames variable inneholder verdien av antall mindre bilder. Den hangmanSheet er en forekomst av ImageSheet objektet, som tar som parametere bildet og opsjoner tabellen.
sequenceData variabel brukes av SpriteObject eksempel, er startnøkkelen bildet du ønsker å starte sekvensen eller animasjon med, og tellingen nøkkelen er hvor mange totalt bilder det er i animasjonen. Nå Nøkkelen er hvor lang tid det vil ta animasjonen til å spille og loopCount Nøkkelen er hvor mange ganger du ønsker animasjonen til å spille eller gjentakelse.
Til slutt oppretter du SpriteObject eksempel ved å sende i ImageSheet forekomst og sequenceData.
Vi setter hangmanSprite sin x og y posisjoner, og skalere det opp til 1,5 normal størrelse ved å bruke XScale og ySkala egenskaper. Vi setter det inn i gruppen for å sørge for at den er fjernet når scenen er fjernet
Trinn 2:. Spill av lyd
Inside scenen: show, fjerner vi den forrige scene, legge til en hendelse lytteren til hangmanSprite og påkalle sin play-metoden. Vi instantiate hangmanAudio ved å påberope seg loadSound metoden, passerer i danceMusic.mp3. Til slutt vi kaller stykket metoden for å starte lyden spilles
I scenen. Hide metode, fjerner vi arrangementet lytteren fra hangmanSprite, påkalle stopp på audio eksempel, og påkalle kast metoden. Den kast metoden sikrer at minnet som ble bevilget til lyden eksempel slippes
Trinn 3:. Rydder opp
I hangmanListener sjekker vi om det er i sluttfasen og, hvis sant, betyr det at animasjonen er ferdig å spille. Vi deretter påberope timer.performWithDelay. Tidtakeren branner etter ett sekund, påkalle newGame metoden, som bruker komponist til overgangen tilbake til gamescreen å starte et nytt spill.
Konklusjon
Dette var litt av en lang tutorial, men du har nå en funksjonell hangman spill med en fin vri. Som nevnt i begynnelsen av denne opplæringen, prøv å innlemme vanskelighetsgrader. Ett alternativ ville være å ha en alternativskjermen og implementere en SegmentedControl der brukeren kan velge mellom lister av 5, 9 og 13 brev ord.
Jeg håper du fant denne opplæringen nyttig og har lært noe nytt. Takk for lesing.