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.
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+.
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.
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.
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.
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.
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)
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
opstelling
De opstelling
functie wordt gebruikt om de spelactiva in te stellen en het spel te starten.
functie setup () einde
setupButtons
Met deze functie worden de knoppen in het spel ingesteld.
functie setup Knoppen () einde
setupTextFields
Met deze functie wordt het tekstveld ingesteld dat in de toepassing wordt gebruikt.
functie setupTextFields () einde
enableDealButton
Zoals de naam aangeeft, schakelt deze functie de dealknop in.
function enableDealButton () end
disableDealButton
Met deze functie wordt de dealknop uitgeschakeld.
functie disableDealButton () einde
enableBetButtons
Met deze functie kunnen de inzetknoppen worden gebruikt.
function enableBetButtons () end
disableBetButtons
Met deze functie worden de inzetknoppen uitgeschakeld.
functie disableBetButtons () einde
enableHoldButtons
Met deze functie kunnen de hold-knoppen worden ingedrukt.
function enableHoldButtons () end
disableHoldButtons
Met deze functie kunnen de hold-knoppen worden ingedrukt.
function disableHoldButtons () end
createDeck
Met deze functie wordt een spel kaarten gemaakt.
functie createDeck () einde
holdCard
Deze functie gaat door de hand van de speler en bepaalt welke kaarten worden vastgehouden.
functie holdCard (event) einde
betMax
Deze functie wordt aangeroepen wanneer de speler het maximale bedrag inzet.
functie betMax () einde
inzet
Deze functie wordt aangeroepen wanneer de speler een daadwerkelijke weddenschap plaatst.
functie bet () einde
doDeal
Deze functie zorgt voor de overdracht van de kaarten.
function doDeal () einde
dealInitialHand
Deze functie deelt de initiële hand.
function dealInitialHand () einde
dealNewCards
Deze functie behandelt het tweede deel van de hand.
function dealNewCards () einde
getHand
Deze functie bepaalt de hand van de speler.
function getHand () einde
nieuw spel
Deze functie reset alle variabelen en start een nieuw spel.
function newGame () einde
awardWinnings
Deze functie kent de speler het gewonnen geld toe.
functie awardWinnings (theHand, theAward) einde
resetCardsYPosition
Deze functie reset de kaarten ' Y
positie nadat een speler een kaart heeft.
functie resetCardsYPosition () einde
generateCard
Deze functie genereert een willekeurige kaart.
functie generateCard () einde
getCard
Deze functie roept op getGenerateCard
en zet het op het scherm.
functie getCard (index) einde
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.
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.
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
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.