借助HTML5 Canvas API制作一个简单的猜字游戏

   2016-05-17 0
核心提示:这篇文章主要介绍了借助HTML5 Canvas API制作一个简单的猜字游戏的实例分享,游戏中每局会自动生成一个字母,玩家按键盘来猜测该字母是哪一个,需要的朋友可以参考下

二话不说,先上效果图以及源代码~
借助HTML5 Canvas API制作一个简单的猜字游戏

HTML代码

XML/HTML Code复制内容到剪贴板
  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复制内容到剪贴板
  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.         //猜测次数   
  101.         context.fillStyle = "#109900";   
  102.         context.font = "16px _sans";   
  103.         context.fillText("猜测次数: "+guesses, 215, 60);   
  104.            
  105.         //大还是小   
  106.         context.fillStyle = "#000000";   
  107.         context.font = "16px _sans";   
  108.         context.fillText("大还是小: "+higherOrLower, 150, 135);   
  109.            
  110.         //已经猜测的字符   
  111.         context.fillStyle = "#FF0000";   
  112.         context.font = "16px _sans";   
  113.         context.fillText("已经猜测的字符: "+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. }  

从游戏名称可以看出,该游戏是猜字游戏。每局系统都会自动生成一个字母,玩家会按键盘来猜测该字母是哪一个。

例如生成的是s,玩家按了h,则游戏就会提示《小了》,因为英文字母当中h的索引比s的索引更靠前。

案例当中涉及的变量。

guesses:猜测次数
message:文字提示,指导用户如何玩该游戏
letters:文字数组,存放我们要猜测的文字的集合。这个例子用的是a到z
today:今天的日期
letterToGuess:要猜测的文字
higherOrLower:是《大了》还是《小了》
letterGuessed:已经猜测过得文字
gameOver:游戏是否结束,是布尔变量,开始的时候是false,猜对后设为true

变量的声明

JavaScript Code复制内容到剪贴板
  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复制内容到剪贴板
  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()函数和floor()函数,根据文字的数组生成要猜测的文字。

并且当用户按键盘的时候监听《keyup》事件,根据传递过来的event,生成按下的键值。

因猜测游戏对大小写不敏感,为防止用户按大写字母,我们需要把值转换成小写形式。

猜测次数+1

猜测出来的文字添加到已经猜测的文字数组当中

JavaScript Code复制内容到剪贴板
  1. var letterPressed = String.fromCharCode(e.keyCode);   
  2. letterPressed = letterPressed.toLowerCase();   
  3. guesses++;   
  4. letterGuessed.push(letterPressed);   

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

通过indexOf函数 我们可以判断要猜测的文字和我们输入的文字在字符集上面的索引值。

如果我们输入的更靠前则提示《小了》反之《大了》

最终用户猜对了要猜测的文字 我们会在中央用大号字体显示《你猜对了》

JavaScript Code复制内容到剪贴板
  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. }  

 

至此这个功能差不多完成了吧,我们还有一个小功能,那就是通过按下按钮的方式可以把屏幕结果抓去出来。

用的函数为toDataUrl(),有兴趣的朋友研究一下。

 
标签: HTML5 Canvas 游戏
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • html5 Canvas 如何自适应屏幕大小
    但是这样创建出的画布不能随着浏览器窗口大小的改变而动态的改变画布的大小。而这一点往往又非常重要, 因为我们会经常改变浏览器窗口大小,不会一直保持某个固定的大小。 html代码 canvas width="300" height="300" id="myCanvas"/canvas设置样式 * {
    03-08
  • html5 中meta中 content=width=device-width注
    !DOCTYPE html        html        head        meta http-equiv="content-type" content="text/html; charset=UTF-8"        meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0"        sty
    03-08
  • HTML5] html和css的使用方法以及样式
    第一步: 清除默认样式第二步: 划分模块第三步: 设置模块的大小以及位置第四步: 划分下一级模块html和css引入网页头像link rel="shortcut icon" href="img/...ico"css样式表的引入方式css样式表的引入方式1、外链式link href="" rel="stylesheet"2、嵌入式
    03-08
  • html5 CSS input placeholder兼容性处理
    1.HTML5对Web Form做了许多增强,比如input新增的type类型、Form Validation等。Placeholder是HTML5新增的另一个属性,当input或者textarea设置了该属性后,该值的内容将作为灰字提示显示在文本框中,当文本框获得焦点时,提示文字消失。以前要实现这效果都是
    03-08
  • HTML5 script 标签的 crossorigin 和integrity
    Bootstrap 4 依赖的基础库中出现了两个新的属性1 script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"/script2 script s
    03-08
  • HTML5 Canvas 绘制斜线
    HTML5 Canvas 绘制斜线
     !DOCTYPE HTMLhtmltitleCanvas直线/titlebodycanvas 您的浏览器不支持 Canvas/canvasscript type="text/javascript"var c = document.getElementById("myCanvas");var cxt = c.getContext("2d");cxt.beginPath();cxt.moveTo(70,140);cxt.lineTo(140,70)
    03-08
  • HTML5 Canvas 画圆【每日一段代码4】
    HTML5 Canvas 画圆【每日一段代码4】
    !DOCTYPE HTMLhtmlbodycanvas ;cxt.beginPath();cxt.arc(100,100,30,0,Math.PI*2,true);cxt.closePath();cxt.fill();/script/body/html显示图: 【画圆,Math.PI 函数的应用。cxt.arc(100,100,30,0,Math.PI*2,true); 括号内第一个和第二个参数,代表圆心坐标
    03-08
  • html5 css3 新元素简单页面布局
    html5 css3 新元素简单页面布局
    【html 代码】!Doctype htmlhtmlhead meta charset="gb2312"titleHMTL5/title link rel="stylesheet" href="html5.css"/headbody header h1脆梨网/h1 h4邪恶漫画专家!/h4 h2邪恶小漫画/h2 /headerdiv关于/a /navsection article header h1Article Header/h1 /
    03-08
  • 微信开发之移动手机WEB页面(HTML5)Javascript实
    在做一个微信的微网站中的一个便民服务电话功能的应用,用到移动web页面中列出的电话号码,点击需要实现调用通讯录,网页一键拨号的拨打电话功能。如果需要在移动浏览器中实现拨打电话,发送email,美国服务器,调用sns等功能,移动手机WEB页面(HTML5)Javascr
    03-08
  • flash传值给javascript,并在html页面输出 flash
    AS里面这样写:getURL("javascript:getval('"+变量+"')"); html里面这样写:script language="javascript" function getval(str) {// url是全局变量,函数正确执行alert("获取的值为:"+str); }/script
    03-08
点击排行