Construire un jeu de serpent - Ajout d'interaction

Dans cette série de didacticiels, vous apprendrez à créer un jeu comme Snake. L'objectif du jeu est de saisir les pommes à l'écran pour augmenter le score. Continuer à lire!


Où nous nous sommes laissés…

S'il vous plaît assurez-vous de vérifier partie 1 de la série pour bien comprendre et préparer ce tutoriel.


Étape 1: Bouton Démarrer les auditeurs

Cette fonction ajoute les auditeurs nécessaires à la TitleView boutons.

 function startButtonListeners (action) if (action == 'add'), puis playBtn: addEventListener ('tap', showGameView) creditsBtn: addEventListener ('tap', showCredits) sinon playBtn: removeEventListener ('tap', showGameView) 'tap', showCredits) end end

Étape 2: Afficher les crédits

L’écran des crédits s’affiche lorsque l’utilisateur appuie sur le bouton À propos de, un bouton robinet écouteur est ajouté à la vue des crédits pour le supprimer.

 function showCredits: tap (e) playBtn.isVisible = false creditsBtn.isVisible = false creditsView = display.newImage ('credits.png', display.contentCenterX - 110, display.contentHeight + 40) transition.to (creditsView, heure = 300, y = display.contentHeight-20, onComplete = function () creditsView: addEventListener ('tap', hideCredits) end) end

Étape 3: masquer les crédits

Lorsque l'écran des crédits est exploité, il sera interpolé hors de la scène et supprimé.

 function hideCredits: tap (e) playBtn.isVisible = vrai creditsBtn.isVisible = vrai transition.to (creditsView, heure = 300, y = display.contentHeight + creditsView.height, onComplete = fonction () creditsView: removeEventListener ('tap' , hideCredits) display.remove (creditsView) creditsView = nil fin) fin

Étape 4: Afficher la vue de jeu

Quand le Début appuyez sur le bouton, la vue du titre est interpolée et supprimée pour révéler la vue du jeu. Il y a beaucoup de parties impliquées dans cette vue, nous allons donc les séparer dans les prochaines étapes..

 function showGameView: tapez sur (e) transition.to (titleView, heure = 300, x = -titleView.height, onComplete = fonction () startButtonListeners ('rmv') display.remove (titleView) titleView = nil end)

Étape 5: Ajouter un fond de jeu

Ce code place le fond du jeu dans la scène.

 -- [Ajouter GFX] - Bg du jeu gameBg = display.newImage ('gameBg.png')

Étape 6: Ajouter une manette de jeu

Afin de déplacer le serpent à l'écran, nous aurons besoin d'un pavé de jeu, cela s'en chargera. UNE robinet auditeur sera ajouté plus tard à chaque flèche pour gérer le mouvement.

 -- Pad up = display.newImage ('up.png', 33.5, 219.5) left = display.newImage ('left.png', 0, 252.5) ​​down = display.newImage ('down.png', 33.5, 286.5) right = display.newImage ('right.png', 66.5, 252.5) ​​up.name = 'up' down.name = 'down' left.name = 'left' name.name = 'right'

Étape 7: Score du texte

Cette ligne ajoute le champ de texte de la partition:

 -- Score Score texte = display.newText ('0', 74, 3, native.systemFontBold, 15) partition: setTextColor (252, 202, 1)

Étape 8: tête

Ensuite, nous ajoutons la tête du serpent. Comme mentionné dans le tutoriel précédent, un zone touchée sera ajouté sur le dessus et puis les deux seront stockés dans un groupe.

 -- Head headGFX = display.newImage ('head.png', display.contentCenterX-0.3, display.contentCenterY-0.2) headHitArea = display.newLine (display.contentCenterX + 6, display.contentCenterY-0.2, display.contentCenterX + 8, display .contentCenterY-0.2) headHitArea: setColor (0, 0, 0) headHitArea.width = 2 head = display.newGroup (headGFX, headHitArea) lastPart = head parts = display.newGroup ()

Étape 9: Initial Apple

La première pomme est ajoutée par ce code à une position aléatoire.

 -- Ajouter la première pomme local randomX = 25 + math.floor (math.random () * 402) local randomY = 25 + math.floor (math.random () * 258) apple local = display.newImage ('apple.png', randomX, randomY) pommes = display.newGroup (apple) gameListeners () end

Étape 10: Auditeurs du jeu

Cette fonction ajoute les auditeurs nécessaires pour lancer la logique du jeu..

 fonction gameListeners () up: addEventListener ('tap', movePlayer) à gauche: addEventListener ('tap', movePlayer) vers le bas: addEventListener ('tap', movePlayer) à droite: addEventListener ('tap', movePlayer) end

Étape 11: déplacer la fonction du joueur

La variable de direction est modifiée par cette fonction, le serpent ira dans la direction indiquée.

 function movePlayer (e) dir = e.target.name if (démarré == nul), puis timerSrc = timer.performWithDelay (vitesse, mise à jour, 0) started = vrai fin

Étape 12: Objets à tester

Nous utiliserons une fonction excellente et utile pour la détection de collision sans physique. Vous trouverez l'exemple et la source d'origine sur le site Web CoronaLabs Code Exchange..

 fonction hitTestObjects (obj1, obj2) gauche locale = obj1.contentBounds.xMin <= obj2.contentBounds.xMin and obj1.contentBounds.xMax >= obj2.contentBounds.xMin droit local = obj1.contentBounds.xMin> = obj2.contentBounds.xMin et obj1.contentBounds.xMin <= obj2.contentBounds.xMax local up = obj1.contentBounds.yMin <= obj2.contentBounds.yMin and obj1.contentBounds.yMax >= obj2.contentBounds.yMin local bas = obj1.contentBounds.yMin> = obj2.contentBounds.yMin et obj1.contentBounds.yMin <= obj2.contentBounds.yMax return (left or right) and (up or down) end

Étape 13: Obtenir la dernière position de tête

Nous capturons la dernière position de la tête du serpent pour mettre à jour la position des pièces, chacune remplaçant les coordonnées x et y de l'autre.

 function update () - Capture la dernière position, cela déplace la première pièce ajoutée locale lastX = head.x local lastY = head.y local xPos =  local yPos = 

Étape 14: Déplacer des pièces

Cela complète le comportement expliqué à l'étape précédente.

 pour i = 1, parts.numChildren do - Capture la position des pièces pour les déplacer xPos [i] = pièces [i] .x yPos [i] = pièces [i] .y - Déplacer des pièces si (parts [i-1 ] == nil) puis parties [i] .x = lastX parties [i] .y = dernierY autres parties [i] .x = xPos [i-1] parties [i]. i = yPos [i-1] fin

Étape 15: Vérifiez la fin de la partie

Le jeu se termine lorsque la tête du serpent touche une autre partie du serpent. Un son est joué comme feedback.

 -- Fin du jeu si la tête touche une autre partie du serpent si (hitTestObjects (headHitArea, parties [i])), puis imprimez (parties [i] .name) si (parties [i] .name == '1') puis imprimez ('une ') else timer.cancel (timerSrc) timerSrc = nil audio.play (gameOver) fin fin

Étape 16: déplacez la tête

Ces lignes déplacent la tête selon la direction établie par le Déplacer le joueur fonction créée à l'étape 11.

 -- Déplacez la tête et la zone touchée si (dir == 'up') puis head.y = head.y - mConst headHitArea.x = headGFX.x headHitArea.y = headGFX.y - 7 elseif (dir == 'gauche') puis head.x = head.x - mConst headHitArea.x = headGFX.x - 8 headHitArea.y = headGFX.y elseif (dir == 'down') puis head.y = head.y + mConst headHitArea.x = headGFX. x headHitArea.y = headGFX.y + 8 elseif (dir == 'right') puis head.x = head.x + mConst headHitArea.x = headGFX.x + 7 headHitArea.y = headGFX.y fin

Étape 17: Collision pomme-tête

Plusieurs actions se produisent lorsque le serpent mange une pomme, nous allons les passer en revue dans les étapes suivantes.

D'abord on enlève la pomme.

 -- Détecter la collision joueur-pomme pour i = 1, pommes.numChildren faire si (hitTestObjects (tête, pommes [i])) puis - Supprimer Apple display.remove (pommes [i])

Étape 18: Mettre à jour le score

Ensuite, nous mettons à jour le champ de partition et émettons un son pour indiquer que la pomme a été mangée..

 -- Ajouter Score score.text = score.text + tostring (10) score: setReferencePoint (display.TopLeftReferencePoint) score.x = 74 audio.play (appleGrab)

Étape 19: Ajouter la partie serpent

Ensuite, une nouvelle partie est ajoutée au serpent. Sa position est calculée par la dernière partie ajoutée (la première fois est la tête) et ensuite ils sont ajoutés à un groupe.

 -- Ajoutez la partie locale du corps de serpent = display.newImage ('bodyPart.png') if (dir == 'up'), puis part.x = lastPart.x part.y = lastPart.y + mConst elseif (dir == 'left') ) puis part.x = lastPart.x + mConst part.y = lastPart.y elseif (dir == 'down') puis part.x = lastPart.x part.y = lastPart.y - mConst elseif (dir == ' right ') alors part.x = lastPart.x - mConst part.y = lastPart.y end current = en cours + 1 part.name = tostring (current) lastPart = part parts: insert (part)

Étape 20: Nouvelle pomme

Enfin, nous créons une nouvelle pomme et la plaçons au hasard dans la scène.

 -- Ajouter une nouvelle pomme local randomX = 25 + math.floor (math.random () * 402) local randomY = 25 + math.floor (math.random () * 258) apple local = display.newImage ('apple.png', randomX, randomY) pommes = display.newGroup (apple) end end

Étape 21: Limites d'écran

Cela fait apparaître le serpent de l'autre côté de la scène.

 -- Limites d'écran si (head.x < 0) then head.x = display.contentWidth - mConst elseif(head.x > display.contentWidth) then head.x = 0 end - Vertical si (head.y) < 0) then head.y = display.contentHeight - mConst elseif(head.y > display.contentHeight) puis head.y = 0 end end

Étape 22: appelez la fonction principale

Afin de démarrer le jeu, le Principale la fonction doit être appelée. Avec le code ci-dessus en place, nous le ferons ici:

 Principale()

Étape 23: écran de chargement

Le fichier Default.png est une image qui s’affiche dès le démarrage de l’application pendant que l’iOS charge les données de base pour afficher l’écran principal. Ajoutez cette image dans le dossier source de votre projet, elle sera automatiquement ajoutée par le complémenteur Corona..


Étape 24: Icône

En utilisant les graphiques que vous avez créés auparavant, vous pouvez maintenant créer une belle et jolie icône. La taille de l'icône de l'iPhone non rétine est 57x57px, mais la version de la rétine est 114x114px et le magasin iTunes nécessite une version de 512x512px. Je suggère de créer d'abord la version 512x512, puis de la réduire pour les autres tailles.

Il n'est pas nécessaire que les angles soient arrondis ou que la lumière soit transparente, iTunes et l'iPhone le feront pour vous..


Étape 25: Test dans le simulateur

Il est temps de faire le test final. Ouvrez le simulateur Corona, accédez au dossier de votre projet, puis cliquez sur Ouvrir. Si tout fonctionne comme prévu, vous êtes prêt pour l'étape finale!


Étape 26: Construire

Dans le simulateur Corona, accédez à Fichier> Construire et sélectionnez votre appareil cible. Remplissez les données requises et cliquez sur construire. Attendez quelques secondes et votre application sera prête pour le test de l'appareil et / ou la soumission pour la distribution.!


Conclusion

Expérimentez avec le résultat final et essayez de créer votre version personnalisée du jeu.!

J'espère que vous avez aimé cette série de tutoriels et que vous l'avez trouvé utile. Merci pour la lecture!