濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > 借助HTML5 Canvas API制作一個(gè)簡(jiǎn)單的猜字游戲

借助HTML5 Canvas API制作一個(gè)簡(jiǎn)單的猜字游戲

熱門標(biāo)簽:電話機(jī)器人如何 聯(lián)通400電話申請(qǐng) 杭州營(yíng)銷電銷機(jī)器人供應(yīng)商 電視購(gòu)物電銷外呼系統(tǒng) 貸款電銷人工和機(jī)器人哪個(gè)好 西寧智能外呼系統(tǒng)加盟 百應(yīng)電銷機(jī)器人產(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 = "請(qǐng)輸入正確的字符";   
  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.         //猜測(cè)次數(shù)   
  101.         context.fillStyle = "#109900";   
  102.         context.font = "16px _sans";   
  103.         context.fillText("猜測(cè)次數(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)猜測(cè)的字符   
  111.         context.fillStyle = "#FF0000";   
  112.         context.font = "16px _sans";   
  113.         context.fillText("已經(jīng)猜測(cè)的字符: "+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)都會(huì)自動(dòng)生成一個(gè)字母,玩家會(huì)按鍵盤來猜測(cè)該字母是哪一個(gè)。

例如生成的是s,玩家按了h,則游戲就會(huì)提示《小了》,因?yàn)橛⑽淖帜府?dāng)中h的索引比s的索引更靠前。

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

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

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

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

猜測(cè)次數(shù)+1

猜測(cè)出來的文字添加到已經(jīng)猜測(cè)的文字?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ù) 我們可以判斷要猜測(cè)的文字和我們輸入的文字在字符集上面的索引值。

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

最終用戶猜對(duì)了要猜測(cè)的文字 我們會(huì)在中央用大號(hào)字體顯示《你猜對(duì)了》

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

 

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《借助HTML5 Canvas API制作一個(gè)簡(jiǎn)單的猜字游戲》,本文關(guān)鍵詞  借助,HTML5,Canvas,API,制作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《借助HTML5 Canvas API制作一個(gè)簡(jiǎn)單的猜字游戲》相關(guān)的同類信息!
  • 本頁收集關(guān)于借助HTML5 Canvas API制作一個(gè)簡(jiǎn)單的猜字游戲的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    龙江县| 高密市| 弥渡县| 白城市| 潼南县| 交口县| 江孜县| 岳阳县| 建昌县| 雅江县| 乌海市| 延长县| 乳山市| 普定县| 铅山县| 卓尼县| 大丰市| 闽侯县| 青河县| 揭东县| 喜德县| 兰溪市| 龙川县| 类乌齐县| 安庆市| 杭锦旗| 乐安县| 石首市| 黎平县| 佛坪县| 太湖县| 定兴县| 政和县| 章丘市| 乌拉特前旗| 安溪县| 雷波县| 恩施市| 繁峙县| 颍上县| 资阳市|