最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

cnblogs   發(fā)布時(shí)間:2016-03-25 10:47:34   作者:卡馬克   我要評(píng)論
這篇文章主要介紹了借助HTML5 Canvas API制作一個(gè)簡(jiǎn)單的猜字游戲的實(shí)例分享,游戲中每局會(huì)自動(dòng)生成一個(gè)字母,玩家按鍵盤(pán)來(lái)猜測(cè)該字母是哪一個(gè),需要的朋友可以參考下

二話(huà)不說(shuō),先上效果圖以及源代碼~
2016325105351695.png (535×346)

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("大還是小: "+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. }  

從游戲名稱(chēng)可以看出,該游戲是猜字游戲。每局系統(tǒng)都會(huì)自動(dòng)生成一個(gè)字母,玩家會(huì)按鍵盤(pán)來(lái)猜測(cè)該字母是哪一個(gè)。

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

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

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

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

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

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

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

猜測(cè)出來(lái)的文字添加到已經(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);   

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

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

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

最終用戶(hù)猜對(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è)小功能,那就是通過(guò)按下按鈕的方式可以把屏幕結(jié)果抓去出來(lái)。

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

相關(guān)文章

  • 深入研究HTML5實(shí)現(xiàn)圖片壓縮上傳功能

    下面小編就為大家?guī)?lái)一篇深入研究HTML5實(shí)現(xiàn)圖片壓縮上傳功能。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家。也給大家一個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧
    2016-03-25
  • HTML5觸摸事件演化tap事件介紹

    下面小編就為大家?guī)?lái)一篇HTML5觸摸事件演化tap事件介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家一個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-03-25
  • jQuery+html5實(shí)現(xiàn)企業(yè)年會(huì)數(shù)字抽獎(jiǎng)特效源碼

    jQuery+html5實(shí)現(xiàn)企業(yè)年會(huì)數(shù)字抽獎(jiǎng)特效源碼是一款基于jQuery+HTML5實(shí)現(xiàn)的企業(yè)年會(huì)電子數(shù)字抽獎(jiǎng)代碼。需要的朋友前來(lái)下載源碼
    2016-03-25
  • html5生成柱狀圖(條形圖)效果的實(shí)例代碼

    下面小編就為大家分享一篇html5生成柱狀圖(條形圖)效果的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家一個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-03-25
  • 用html5繪制折線(xiàn)圖的實(shí)例代碼

    下面小編就為大家?guī)?lái)一篇用html5繪制折線(xiàn)圖的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家。也給大家一個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-03-25
  • 詳解HTML5 Canvas繪制時(shí)指定顏色與透明度的方法

    這篇文章主要介紹了HTML5 Canvas繪制時(shí)指定顏色與透明度的方法,包括全局透明globalAlpha屬性的介紹,需要的朋友可以參考下
    2016-03-25
  • 實(shí)例講解使用HTML5 Canvas繪制陰影效果的方法

    這篇文章主要介紹了使用HTML5 Canvas繪制陰影效果的方法,包括一個(gè)3D拉影+邊緣模糊效果文字的編寫(xiě)例子,在陰影效果的利用上進(jìn)一步深入,需要的朋友可以參考下
    2016-03-25
  • HTML5 Canvas API中drawImage()方法的使用實(shí)例

    這篇文章主要介紹了HTML5 Canvas API中drawImage()方法的使用實(shí)例,drawImage()方法主要用來(lái)對(duì)圖像進(jìn)行縮放或裁剪,文中給出了其坐標(biāo)及相關(guān)參數(shù)的用法,需要的朋友可以參考下
    2016-03-25
  • 使用HTML5 Canvas API中的clip()方法裁剪區(qū)域圖像

    這篇文章主要介紹了使用HTML5 Canvas API中的clip()方法裁剪區(qū)域圖像的實(shí)例教程,其中需要特別注意save()和restore()方法的搭配使用,需要的朋友可以參考下
    2016-03-25
  • 移動(dòng)端HTML5實(shí)現(xiàn)文件上傳功能【附代碼】

    下面小編就為大家?guī)?lái)一篇移動(dòng)端HTML5實(shí)現(xiàn)文件上傳功能【附代碼】。小編覺(jué)得聽(tīng)錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-03-25

最新評(píng)論

扎囊县| 斗六市| 荆州市| 和顺县| 松溪县| 宝清县| 苍溪县| 红原县| 钦州市| 楚雄市| 茂名市| 鹤山市| 马尔康县| 大宁县| 墨玉县| 宁乡县| 祁门县| 北川| 孝感市| 景洪市| 拉萨市| 措美县| 边坝县| 渝中区| 武乡县| 彝良县| 太仓市| 雷州市| 汝城县| 永安市| 台山市| 射洪县| 共和县| 庆云县| 肥城市| 缙云县| 仁怀市| 历史| 漳浦县| 方城县| 江陵县|