主頁 > 知識庫 > 借助HTML5 Canvas API制作一個簡單的猜字游戲

借助HTML5 Canvas API制作一個簡單的猜字游戲

熱門標(biāo)簽:電話機器人如何 聯(lián)通400電話申請 杭州營銷電銷機器人供應(yīng)商 電視購物電銷外呼系統(tǒng) 貸款電銷人工和機器人哪個好 西寧智能外呼系統(tǒng)加盟 百應(yīng)電銷機器人產(chǎn)業(yè) 飛亞外呼系統(tǒng) 高德地圖標(biāo)注賓館位置

二話不說,先上效果圖以及源代碼~

HTML代碼

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <!doctype html>  
  2. <html lang="en">  
  3.     <head>  
  4.         <meta charset="utf-8" />  
  5.         <script type="text/javascript" src="chp1_guess_the_letter.js"></script>  
  6.         <script type="text/javascript" src="modernizr.custom.99886.js"></script>  
  7.     </head>  
  8.     <body>  
  9.         <canvas id="canvas_guess_the_letter" width="500" height="300">  
  10.             你的瀏覽器不支持HTML5 Canvas   
  11.         </canvas>  
  12.         <form>  
  13.             <input type="button" id="createImageData" value="Export Canvas Image" />;   
  14.         </form>  
  15.     </body>  
  16. </html>  

JS代碼

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. /**  
  2.  * @author Rafael  
  3.  */  
  4. window.addEventListener("load", eventWindowLoaded, false);   
  5.   
  6. var Debugger = function() {   
  7.        
  8. };   
  9. Debugger.log = function(message) {   
  10.     try {   
  11.         console.log(message);   
  12.     } catch(exception) {   
  13.         return;   
  14.     }   
  15. }   
  16.   
  17. function eventWindowLoaded() {   
  18.     canvasApp();   
  19. }   
  20.   
  21. function canvasSupport() {   
  22.     return Modernizr.canvas;   
  23. }   
  24.   
  25. function canvasApp() {   
  26.     var guesses = 0;   
  27.     var message = "Guess The Letter From a(lower) to z(higher)";   
  28.     var letters = ["a","b","c","d","e","f","g","h","i","j","k","l",   
  29.                     "m","n","o","p","q","r","s","t","u","v","w","x","y","z"];   
  30.     var today = new Date();   
  31.     var letterToGuess = "";   
  32.     var higherOrLower = "";   
  33.     var letterGuessed = [];   
  34.     var gameOver = false;   
  35.        
  36.     if(!canvasSupport()) {   
  37.         return;   
  38.     }   
  39.        
  40.     var theCanvas = document.getElementById("canvas_guess_the_letter");   
  41.     var context = theCanvas.getContext("2d");   
  42.        
  43.     initGame();   
  44.        
  45.     function initGame() {   
  46.         var letterIndex = Math.floor(Math.random() * letters.length);   
  47.         letterToGuess = letters[letterIndex];   
  48.         guesses = 0;   
  49.         lettersGuessed = [];   
  50.         gameOver = false;   
  51.         window.addEventListener("keyup", eventKeyPressed, true);   
  52.         var formElement = document.getElementById("createImageData");   
  53.         formElement.addEventListener('click', createImageDataPressed, false);   
  54.         drawScreen();   
  55.     }   
  56.        
  57.     function eventKeyPressed(e) {   
  58.         if(!gameOver) {   
  59.             var letterPressed = String.fromCharCode(e.keyCode);   
  60.             letterPressed = letterPressed.toLowerCase();   
  61.             guesses++;   
  62.             letterGuessed.push(letterPressed);   
  63.             if(letterPressed == letterToGuess) {   
  64.                 gameOver = true;   
  65.             } else {   
  66.                 letterIndex = letters.indexOf(letterToGuess);   
  67.                 guessIndex = letters.indexOf(letterPressed);   
  68.                 if(guessIndex < 0) {   
  69.                     higherOrLower = "請輸入正確的字符";   
  70.                 } else if(guessIndex < letterIndex) {   
  71.                     higherOrLower = "小了";   
  72.                 } else {   
  73.                     higherOrLower = "大了";   
  74.                 }   
  75.             }   
  76.             drawScreen();   
  77.         }   
  78.     }   
  79.        
  80.     function drawScreen() {   
  81.         //背景   
  82.         context.fillStyle = "#ffffaa";   
  83.         context.fillRect(0, 0, 500, 300);   
  84.            
  85.         //箱子   
  86.         context.strokeStyle = "#000000";   
  87.         context.strokeRect(5, 5, 490, 290);   
  88.         context.textBaseLine = "top";   
  89.            
  90.         //日期   
  91.         context.fillStyle = "#000000";   
  92.         context.font = "10px _sans";   
  93.         context.fillText(today, 150, 20);   
  94.            
  95.         //消息   
  96.         context.fillStyle = "#FF0000";   
  97.         context.font = "14px _sans";   
  98.         context.fillText(message, 125, 40);   
  99.            
  100.         //猜測次數(shù)   
  101.         context.fillStyle = "#109900";   
  102.         context.font = "16px _sans";   
  103.         context.fillText("猜測次數(shù): "+guesses, 215, 60);   
  104.            
  105.         //大還是小   
  106.         context.fillStyle = "#000000";   
  107.         context.font = "16px _sans";   
  108.         context.fillText("大還是?。?nbsp;"+higherOrLower, 150, 135);   
  109.            
  110.         //已經(jīng)猜測的字符   
  111.         context.fillStyle = "#FF0000";   
  112.         context.font = "16px _sans";   
  113.         context.fillText("已經(jīng)猜測的字符: "+letterGuessed.toString(), 10, 260);   
  114.            
  115.         if(gameOver) {   
  116.             context.fillStyle = "#FF0000";   
  117.             context.font = "40px _sans";   
  118.             context.fillText("你猜中了", 150, 180);   
  119.         }   
  120.     }   
  121.        
  122.     function createImageDataPressed(e) {   
  123.         window.open(theCanvas.toDataURL(), "canvasImage","left=0, top=0, width="+theCanvas.width+", height="+theCanvas.height+", toolbar=0, resizable=0");   
  124.     }   
  125. }  

從游戲名稱可以看出,該游戲是猜字游戲。每局系統(tǒng)都會自動生成一個字母,玩家會按鍵盤來猜測該字母是哪一個。

例如生成的是s,玩家按了h,則游戲就會提示《小了》,因為英文字母當(dāng)中h的索引比s的索引更靠前。

案例當(dāng)中涉及的變量。

guesses:猜測次數(shù)
message:文字提示,指導(dǎo)用戶如何玩該游戲
letters:文字?jǐn)?shù)組,存放我們要猜測的文字的集合。這個例子用的是a到z
today:今天的日期
letterToGuess:要猜測的文字
higherOrLower:是《大了》還是《小了》
letterGuessed:已經(jīng)猜測過得文字
gameOver:游戲是否結(jié)束,是布爾變量,開始的時候是false,猜對后設(shè)為true

變量的聲明

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. var guesses = 0;   
  2. var message = "Guess The Letter From a(lower) to z(higher)";   
  3. var letters = ["a","b","c","d","e","f","g","h","i","j","k","l",   
  4.                 "m","n","o","p","q","r","s","t","u","v","w","x","y","z"];   
  5. var today = new Date();   
  6. var letterToGuess = "";   
  7. var higherOrLower = "";   
  8. var letterGuessed = [];   
  9. var gameOver = false;  


初始化游戲

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. function initGame() {   
  2.         var letterIndex = Math.floor(Math.random() * letters.length);   
  3.         letterToGuess = letters[letterIndex];   
  4.         guesses = 0;   
  5.         lettersGuessed = [];   
  6.         gameOver = false;   
  7.         window.addEventListener("keyup", eventKeyPressed, true);   
  8.         var formElement = document.getElementById("createImageData");   
  9.         formElement.addEventListener('click', createImageDataPressed, false);   
  10.         drawScreen();   
  11.     }  

通過使用Math的random()函數(shù)和floor()函數(shù),根據(jù)文字的數(shù)組生成要猜測的文字。

并且當(dāng)用戶按鍵盤的時候監(jiān)聽《keyup》事件,根據(jù)傳遞過來的event,生成按下的鍵值。

因猜測游戲?qū)Υ笮懖幻舾?,為防止用戶按大寫字母,我們需要把值轉(zhuǎn)換成小寫形式。

猜測次數(shù)+1

猜測出來的文字添加到已經(jīng)猜測的文字?jǐn)?shù)組當(dāng)中

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. var letterPressed = String.fromCharCode(e.keyCode);   
  2. letterPressed = letterPressed.toLowerCase();   
  3. guesses++;   
  4. letterGuessed.push(letterPressed);   

剩下的就只有判斷 大和小了。

通過indexOf函數(shù) 我們可以判斷要猜測的文字和我們輸入的文字在字符集上面的索引值。

如果我們輸入的更靠前則提示《小了》反之《大了》

最終用戶猜對了要猜測的文字 我們會在中央用大號字體顯示《你猜對了》

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. letterIndex = letters.indexOf(letterToGuess);   
  2. guessIndex = letters.indexOf(letterPressed);   
  3. if(guessIndex < 0) {   
  4.     higherOrLower = "請輸入正確的字符";   
  5. else if(guessIndex < letterIndex) {   
  6.     higherOrLower = "小了";   
  7. else {   
  8.     higherOrLower = "大了";   
  9. }  

 

至此這個功能差不多完成了吧,我們還有一個小功能,那就是通過按下按鈕的方式可以把屏幕結(jié)果抓去出來。

用的函數(shù)為toDataUrl(),有興趣的朋友研究一下。

標(biāo)簽:煙臺 安慶 晉中 內(nèi)蒙古 玉溪 邯鄲 牡丹江 撫州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《借助HTML5 Canvas API制作一個簡單的猜字游戲》,本文關(guān)鍵詞  借助,HTML5,Canvas,API,制作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《借助HTML5 Canvas API制作一個簡單的猜字游戲》相關(guān)的同類信息!
  • 本頁收集關(guān)于借助HTML5 Canvas API制作一個簡單的猜字游戲的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章