Bouw een pokerspel in Corona interface-instellingen

In deze tweedelige zelfstudie laat ik je zien hoe je een pokergame bouwt met de Corona SDK. U leert over touch-controls, tweening-elementen, timers en het maken van een aangepaste sorteerfunctie.

Invoering

In de eerste tutorial zullen we ons concentreren op het opzetten van het project en het maken van de gebruikersinterface voor de game. Om je enthousiast te maken over dit project, is hieronder een screenshot van hoe het spel eruit zal zien als het klaar is.


De speelkaarten zijn niet opgenomen in de downloadbestanden. Als je mee wilt, kun je de kaartenset op Graphic River kopen of een andere set kaarten gebruiken. De afmetingen van elke kaart zijn 75 px x 105 px, wat zich vertaalt naar 150 px x 210 px voor de @ 2x grootte.

Als u de demotoepassing van deze zelfstudie wilt uitvoeren, moet u de kaart toevoegen aan de projectdirectory. De afbeeldingen voor de kaarten zouden moeten beginnen met h, c, d, of s, met een nummer toegevoegd aan de letter (d1.png naar d12.png, h1.png naar h13.png, enz.).

Als je met de originele vectorbestanden wilt werken, zijn de grafische voorstellingen voor de pokermachine gemaakt door Andrei Marius en zijn deze beschikbaar op VectorTuts +. Je kunt ze gerust downloaden van Vectortuts+.

1. Nieuw project

Open de Corona Simulator en klik Nieuw project, en configureer het project zoals hieronder getoond voer de volgende gegevens in. Selecteer een locatie om uw project op te slaan en klik op OK. Hiermee wordt een map gemaakt met een aantal pictogrammen en drie bestanden die voor ons belangrijk zijn, main.lua, config.lua, en build.settings. We zullen elk bestand in de volgende paar stappen bekijken.


2. Build.Settings

De build.settings bestand is verantwoordelijk voor de build time-eigenschappen van het project. Open dit bestand, verwijder de inhoud en vul het met het volgende codefragment.

 instellingen = orientation = default = "landscapeRight", supported = "landscapeLeft", "landscapeRight",,

In build.settings, we stellen de standaard oriëntatie in en beperken de applicatie tot enkel en alleen ondersteuning voor een landschapsoriëntatie. U kunt leren welke andere instellingen u in build.settings kunt opnemen door de Corona-documentatie te verkennen.

3. Config.lua

De config.lua-bestanden verwerken de configuratie van de toepassing. Net als bij build.settings, open je dit bestand, verwijder je de inhoud en voeg je de volgende code toe.

 toepassing = content = width = 768, height = 1024, scale = "letterbox", fps = 30, imageSuffix = ["@ 2x"] = 2, - afbeeldingen met "@ 2x" toegevoegd, worden gebruikt voor iPad 3

Hiermee stelt u de standaardbreedte en hoogte van het scherm in brievenbus om de afbeeldingen te schalen, stelt u de frames per seconde in 30, en gebruikt de imageSuffix instelling voor dynamische beeldselectie. De downloadbestanden voor deze zelfstudie bevatten twee bestanden voor elke afbeelding, imageName.png en [email protected]. iPads met een retina-display gebruiken de @ 2x afbeeldingen, terwijl de iPad 1 en 2 de normale afbeeldingen gebruiken.

U kunt leren welke andere eigenschappen u kunt instellen config.lua door de Corona-documentatie te bekijken.

4. Main.lua

De main.lua bestand is het bestand dat de toepassing als eerste laadt en gebruikt om de toepassing te booten. We zullen al onze code in dit bestand plaatsen. In de volgende paar stappen zullen we een aantal functies uitbannen. Je zou ze allemaal moeten toevoegen main.lua.

5. Verberg statusbalk

We willen niet dat de statusbalk in onze applicatie wordt weergegeven. Voeg het volgende toe aan regel naar main.lua om dit te bereiken.

 display.setStatusBar (display.HiddenStatusBar)

6. Variabelen

Het volgende codefragment verklaart de variabelen die we gedurende het project nodig zullen hebben. Lees de opmerkingen om beter te begrijpen waarvoor elke variabele wordt gebruikt. De meeste van hen spreken voor zich.

 local pokerMachine = display.newImage ("cardsBG.png", true) pokerMachine.anchorX, pokerMachine.anchorY = 0,0 - Stelt de afbeeldingen in ankers het gebruikt de nieuwe lokale 2.0 kleurenpakken = "h", "d", "c", "s"; - harten = h, ruiten = d, klaveren = c, schoppen = s lokaal dek; - Het pak kaarten Lokale spelerHand =  - Houdt de spelerskaarten lokaal cashOutButton lokaal BetMaxButton lokaal BetButton lokaal DealButton lokaal holdButtons =  - Houdt de "Hold" knoppen lokaal isNewGame = true local MAXBETAMOUNT = 15 - Max bedrag speler kan lokale instructies inzettenText local betAmount = 0 - Hoeveel heeft de speler tot nu toe ingezet local creditText local betText local winText local gamesText local gameData =  - Dit bevat spelgegevens - De credits en het aantal gespeelde games

7. opstelling

De opstelling functie wordt gebruikt om de spelactiva in te stellen en het spel te starten.

 functie setup () einde

8. setupButtons

Met deze functie worden de knoppen in het spel ingesteld.

 functie setup Knoppen () einde

9. setupTextFields

Met deze functie wordt het tekstveld ingesteld dat in de toepassing wordt gebruikt.

 functie setupTextFields () einde

10. enableDealButton

Zoals de naam aangeeft, schakelt deze functie de dealknop in.

 function enableDealButton () end

11. disableDealButton

Met deze functie wordt de dealknop uitgeschakeld.

 functie disableDealButton () einde

12. enableBetButtons

Met deze functie kunnen de inzetknoppen worden gebruikt.

 function enableBetButtons () end

13. disableBetButtons

Met deze functie worden de inzetknoppen uitgeschakeld.

 functie disableBetButtons () einde

14. enableHoldButtons

Met deze functie kunnen de hold-knoppen worden ingedrukt.

 function enableHoldButtons () end

15. disableHoldButtons

Met deze functie kunnen de hold-knoppen worden ingedrukt.

 function disableHoldButtons () end

16. createDeck

Met deze functie wordt een spel kaarten gemaakt.

 functie createDeck () einde

17. holdCard

Deze functie gaat door de hand van de speler en bepaalt welke kaarten worden vastgehouden.

 functie holdCard (event) einde

18. betMax

Deze functie wordt aangeroepen wanneer de speler het maximale bedrag inzet.

 functie betMax () einde

19. inzet

Deze functie wordt aangeroepen wanneer de speler een daadwerkelijke weddenschap plaatst.

 functie bet () einde

20. doDeal

Deze functie zorgt voor de overdracht van de kaarten.

 function doDeal () einde

21. dealInitialHand

Deze functie deelt de initiële hand.

 function dealInitialHand () einde

22. dealNewCards

Deze functie behandelt het tweede deel van de hand.

 function dealNewCards () einde

23. getHand

Deze functie bepaalt de hand van de speler.

 function getHand () einde

24. nieuw spel

Deze functie reset alle variabelen en start een nieuw spel.

 function newGame () einde

25. awardWinnings

Deze functie kent de speler het gewonnen geld toe.

 functie awardWinnings (theHand, theAward) einde

26. resetCardsYPosition

Deze functie reset de kaarten ' Y positie nadat een speler een kaart heeft.

 functie resetCardsYPosition () einde

27. generateCard

Deze functie genereert een willekeurige kaart.

 functie generateCard () einde

28. getCard

Deze functie roept op getGenerateCard en zet het op het scherm.

 functie getCard (index) einde

29. Implementatie setupButtons

Nu we al onze functies hebben uitgewerkt, gaan we beginnen met de implementatie ervan. uitvoeren setupButtons zoals hieronder getoond.

 function setupButtons () cashOutButton = display.newImage ("buttonCashOut.png", 89.572) cashOutButton.anchorX, cashOutButton.anchorY = 0.0 local holdButtonPosition = 186 voor i = 1,5 do local tempHoldButton = display.newImage ("buttonHold1. png ", holdButtonPosition + (93 * (i-1)), 572) tempHoldButton.buttonNumber = i tempHoldButton.anchorX, tempHoldButton.anchorY = 0,0 table.insert (holdButtons, tempHoldButton) end betMaxButton = display.newImage (" buttonBetMax .png ", 679.572) betMaxButton.anchorX, betMaxButton.anchorY = 0,0 betButton = display.newImage (" buttonBet.png ", 775.572) betButton.anchorX, betButton.anchorY = 0,0 dealButton = display.newImage (" buttonDeal .png ", 869,572) dealButton.anchorX, dealButton.anchorY = 0,0 instructionsText = display.newText (" ", 400,400, native.systemFont, 30) instructionsText: setFillColor (0,0,0) enableBetButtons () end

In setupButtons, we initialiseren onze knoppen als nieuwe afbeeldingen. We slaan de tempHoldButtons in een tabel zodat we ernaar kunnen verwijzen zonder vijf afzonderlijke variabelen te hoeven maken. We hebben ook ingesteld instructionsText en schakel de inzetknoppen in. De tonen object heeft een methode genaamd nieuw beeld, die het pad naar de afbeelding accepteert, evenals een x- en y-positie. Zoals vermeld in de documentatie, de nieuw beeld methode heeft verschillende optionele parameters. In deze zelfstudie gebruiken we de nieuwe Graphics 2.0-klasse, dus we moeten de afbeeldingen instellen anchorX en anchorY posities. U kunt meer informatie vinden over het migreren van oude projecten om de nieuwe Graphics 2.0-klasse te gebruiken in de Corona-documentatie.

Voeg een oproep toe aan opstelling helemaal aan het einde van main.lua en dan bellen setupButtons binnen opstelling.

 setup () - Toevoegen aan einde van "main.lua"
 functie setup () setup Knoppen () eindigen

Als u nu uw toepassing zou testen, zou u de interface samen met de knoppen moeten zien.

30. Implementatie setupTextFields

In setupTextFields, we stellen de tekstvelden in de applicatie in. Bekijk de implementatie hieronder.

 function setupTextFields () instructionsText = display.newText ("", 400.400, native.systemFont, 30) instructionsText: setFillColor (0,0,0) creditText = display.newText ("", 800,185, native.SystemFont, 22) creditText. width = 150 creditText.align = "right" creditText: setFillColor (255,0,0) betText = display.newText ("", 800,270, native.SystemFont, 22) betText.width = 150 betText.align = "right" betText : setFillColor (255,0,0) winText = display.newText ("", 800,355, native.SystemFont, 22) winText.width = 150 winText.align = "right" winText: setFillColor (255,0,0) gamesText = display.newText ("", 800,440, native.SystemFont, 22) gamesText.width = 150 gamesText.align = "right" gamesText: setFillColor (255,0,0) einde

De tonen object heeft de methode newText die als zijn parameters de tekst, X en Y coördinaten, het lettertype en de tekengrootte. De newText methode neemt verschillende optionele parameters, die u in de documentatie kunt verkennen. We gebruiken het nieuwe SetFillColor methode van Graphics 2.0, die percentages accepteert. In dit voorbeeld stellen we de tekstvelden in op rood. Door de richten eigendom aan rechts, de tekst wordt rechts in het tekstveld uitgelijnd. U moet de breedte eigendom ook als u gebruikt richten. telefoontje setupTextFields in opstelling.

 functie setup () setup Knoppen () setupTextFields () einde

Als u de toepassing opnieuw uitvoert, merkt u niets meer omdat de tekstvelden op dit moment leeg zijn. Ze zijn echter wel klaar voor wat tekst.

31. randomSeed

Omdat we een willekeurige kaart willen krijgen, moeten we de willekeurige generator uitzaaien. Als we dit niet zouden doen, zouden we steeds opnieuw dezelfde willekeur krijgen. Voer het volgende codefragment in onze opstelling functie.

 functie setup () math.randomseed (os.time ()) setup Knoppen () setupTextFields () einde

32. createDeck

De implementatie van de createDeck de functie is ook niet zo moeilijk. We lopen door de pakken tabel en voeg een nummer toe van 1 naar 13 ernaar toe. We plaatsen het vervolgens in de decktafel. De afbeeldingen voor onze kaarten zijn genoemd d1.png, h3.png, etc. met 1 de aas en de zijn 13 koning zijn.

 functie createDeck () deck = ; voor i = 1, 4 doen voor j = 1, 13 do local tempCard = suits [i] ... j table.insert (deck, tempCard) end end end

h2> Conclusie

Dit brengt het eerste deel van deze tweedelige handleiding tot een einde. In het tweede deel maken we het spel af. ik hoop dat ik je daar zie.