Maison > interface Web > Tutoriel H5 > API HTML5 Canvas pour créer un jeu de devinettes simple

API HTML5 Canvas pour créer un jeu de devinettes simple

不言
Libérer: 2018-07-03 13:48:38
original
2775 Les gens l'ont consulté

Cet article présente principalement l'utilisation de l'API HTML5 Canvas pour créer un jeu simple de devinette de mots. Chaque jeu générera automatiquement une lettre. Les joueurs appuient sur le clavier pour deviner de quelle lettre il s'agit. Les amis qui en ont besoin peuvent s'y référer. 🎜>

Sans plus tarder, commençons par les rendus et le code source ~


2016325105351695.png (535×346)

Code HTML

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <script type="text/javascript" src="chp1_guess_the_letter.js"></script>
        <script type="text/javascript" src="modernizr.custom.99886.js"></script>
    </head>
    <body>
        <canvas id="canvas_guess_the_letter" width="500" height="300">
            你的浏览器不支持HTML5 Canvas   
        </canvas>
        <form>
            <input type="button" id="createImageData" value="Export Canvas Image" />;   
        </form>
    </body>
</html>
Copier après la connexion
Code JS

/** 
 * @author Rafael 
 */
window.addEventListener("load", eventWindowLoaded, false);   
var Debugger = function() {   
};   
Debugger.log = function(message) {   
    try {   
        console.log(message);   
    } catch(exception) {   
        return;   
    }   
}   
function eventWindowLoaded() {   
    canvasApp();   
}   
function canvasSupport() {   
    return Modernizr.canvas;   
}   
function canvasApp() {   
    var guesses = 0;   
    var message = "Guess The Letter From a(lower) to z(higher)";   
    var letters = ["a","b","c","d","e","f","g","h","i","j","k","l",   
                    "m","n","o","p","q","r","s","t","u","v","w","x","y","z"];   
    var today = new Date();   
    var letterToGuess = "";   
    var higherOrLower = "";   
    var letterGuessed = [];   
    var gameOver = false;   
    if(!canvasSupport()) {   
        return;   
    }   
    var theCanvas = document.getElementById("canvas_guess_the_letter");   
    var context = theCanvas.getContext("2d");   
    initGame();   
    function initGame() {   
        var letterIndex = Math.floor(Math.random() * letters.length);   
        letterToGuess = letters[letterIndex];   
        guesses = 0;   
        lettersGuessed = [];   
        gameOver = false;   
        window.addEventListener("keyup", eventKeyPressed, true);   
        var formElement = document.getElementById("createImageData");   
        formElement.addEventListener(&#39;click&#39;, createImageDataPressed, false);   
        drawScreen();   
    }   
    function eventKeyPressed(e) {   
        if(!gameOver) {   
            var letterPressed = String.fromCharCode(e.keyCode);   
            letterPressed = letterPressed.toLowerCase();   
            guesses++;   
            letterGuessed.push(letterPressed);   
            if(letterPressed == letterToGuess) {   
                gameOver = true;   
            } else {   
                letterIndex = letters.indexOf(letterToGuess);   
                guessIndex = letters.indexOf(letterPressed);   
                if(guessIndex < 0) {   
                    higherOrLower = "请输入正确的字符";   
                } else if(guessIndex < letterIndex) {   
                    higherOrLower = "小了";   
                } else {   
                    higherOrLower = "大了";   
                }   
            }   
            drawScreen();   
        }   
    }   
    function drawScreen() {   
        //背景 
        context.fillStyle = "#ffffaa";   
        context.fillRect(0, 0, 500, 300);   
        //箱子 
        context.strokeStyle = "#000000";   
        context.strokeRect(5, 5, 490, 290);   
        context.textBaseLine = "top";   
        //日期 
        context.fillStyle = "#000000";   
        context.font = "10px _sans";   
        context.fillText(today, 150, 20);   
        //消息 
        context.fillStyle = "#FF0000";   
        context.font = "14px _sans";   
        context.fillText(message, 125, 40);   
        //猜测次数 
        context.fillStyle = "#109900";   
        context.font = "16px _sans";   
        context.fillText("猜测次数: "+guesses, 215, 60);   
        //大还是小 
        context.fillStyle = "#000000";   
        context.font = "16px _sans";   
        context.fillText("大还是小: "+higherOrLower, 150, 135);   
        //已经猜测的字符 
        context.fillStyle = "#FF0000";   
        context.font = "16px _sans";   
        context.fillText("已经猜测的字符: "+letterGuessed.toString(), 10, 260);   
        if(gameOver) {   
            context.fillStyle = "#FF0000";   
            context.font = "40px _sans";   
            context.fillText("你猜中了", 150, 180);   
        }   
    }   
    function createImageDataPressed(e) {   
        window.open(theCanvas.toDataURL(), "canvasImage","left=0, top=0, width="+theCanvas.width+", height="+theCanvas.height+", toolbar=0, resizable=0");   
    }   
}
Copier après la connexion
Code JS


🎜>

Comme vous pouvez le voir d'après le nom du jeu, ce jeu est un jeu de devinettes. Le système génère automatiquement une lettre à chaque jeu et les joueurs appuient sur le clavier pour deviner de quelle lettre il s'agit.


Par exemple, si s est généré et que le joueur appuie sur h, le jeu affichera "Small" car l'indice de h dans l'alphabet anglais est supérieur à l'indice de s.

Variables impliquées dans le cas.

devinettes : nombre de suppositions
message : invites textuelles pour guider l'utilisateur sur la façon de jouer au jeu
lettres : tableau de texte, stockant une collection de mots que nous voulons deviner. Cet exemple utilise a à z

aujourd'hui : la date du jour

letterToGuess : le texte à devinerhigherOrLower : s'il est "plus grand" ou "plus petit"lettreGuessed : le texte a été deviné

gameOver : Que le jeu soit terminé, il s'agit d'une variable booléenne. Elle est fausse au début et est définie sur true après avoir deviné correctement
var guesses = 0;   
var message = "Guess The Letter From a(lower) to z(higher)";   
var letters = ["a","b","c","d","e","f","g","h","i","j","k","l",   
                "m","n","o","p","q","r","s","t","u","v","w","x","y","z"];   
var today = new Date();   
var letterToGuess = "";   
var higherOrLower = "";   
var letterGuessed = [];   
var gameOver = false;
Copier après la connexion

Déclaration de variable

.

function initGame() {   
        var letterIndex = Math.floor(Math.random() * letters.length);   
        letterToGuess = letters[letterIndex];   
        guesses = 0;   
        lettersGuessed = [];   
        gameOver = false;   
        window.addEventListener("keyup", eventKeyPressed, true);   
        var formElement = document.getElementById("createImageData");   
        formElement.addEventListener(&#39;click&#39;, createImageDataPressed, false);   
        drawScreen();   
    }
Copier après la connexion
Initialisez le jeu


En utilisant la fonction random() et la fonction floor() de Math, le texte à deviner est généré en fonction du tableau de texte.

Et lorsque l'utilisateur appuie sur le clavier, écoutez l'événement "keyup" et générez la valeur de la touche enfoncée en fonction de l'événement passé.

Étant donné que le jeu de devinettes n'est pas sensible à la casse, pour empêcher les utilisateurs d'appuyer sur des lettres majuscules, nous devons convertir les valeurs en minuscules.

Nombre de suppositions + 1

var letterPressed = String.fromCharCode(e.keyCode);   
letterPressed = letterPressed.toLowerCase();   
guesses++;   
letterGuessed.push(letterPressed);
Copier après la connexion

Le texte deviné est ajouté au tableau de texte déjà deviné

Le Il ne reste plus qu'à juger s'il est grand ou petit.

Grâce à la fonction indexOf, nous pouvons déterminer la valeur d'index du texte à deviner et le texte que nous saisissons dans le jeu de caractères.

Si nous entrons plus loin, il affichera "Petit", sinon "Grand"
letterIndex = letters.indexOf(letterToGuess);   
guessIndex = letters.indexOf(letterPressed);   
if(guessIndex < 0) {   
    higherOrLower = "请输入正确的字符";   
} else if(guessIndex < letterIndex) {   
    higherOrLower = "小了";   
} else {   
    higherOrLower = "大了";   
}
Copier après la connexion

Si l'utilisateur final devine le texte à deviner correctement, nous afficherons "Vous" en grand police au centre Je l'ai deviné"

Maintenant, cette fonction est presque terminée. Nous avons également une petite fonction, qui consiste à capturer les résultats sur l'écran en appuyant sur le bouton.

La fonction utilisée est toDataUrl(). Les amis intéressés peuvent l'étudier.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :

Canevas HTML5 pour obtenir des effets spéciaux de feux d'artifice en fleurs

Introduction au partage de canevas html5 WeChat affiches

La toile réalise le code d'effet du chevauchement dynamique des balles

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal