html5 canvas-2.用canvas制作一个猜字母的小游戏


Posted in HTML / CSS onJanuary 07, 2013

今天我们要用canvas制作一个猜字母的小游戏,先来张效果图。
html5 canvas-2.用canvas制作一个猜字母的小游戏 
游戏设计很简单,系统会随机从a-z的26个字母中选择一个保存起来,你键盘输入一个字母,系统会提示你正确字符比你当前输入字母小还是大,直到你输入正确的字母游戏才结束。
下面介绍js代码中需要用到的一些变量及其他们的含义,系统会在开始的时候初始化这些变量。
guesses:用户猜字母的次数;
message:帮助玩家如何玩游戏的说明;
letters:保存26个英文字母的数组;
today:当前时间;
letterToGuess:系统选中的字母,也就是你需要猜中的字母;
higherOrLower:提示用户当前输入的字母比答案大还是小;
lettersGuessed:用户已经猜过的字母;
gameOver:游戏是否结束。

复制代码
代码如下:

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 lettersGuessed;
var gameOver = false;

下面我们介绍响应键盘弹起的事件,用来判断用户输入的字母是否是正确答案:
复制代码
代码如下:

$(window).bind('keyup', eventKeyPressed);
复制代码
代码如下:

function eventKeyPressed(e) {
//首先判断游戏是否结束
if (!gameOver) {
//获取输入字母
var letterPressed = String.fromCharCode(e.keyCode);
//做小写处理
letterPressed = letterPressed.toLowerCase();
//游戏次数加1
guesses++;
//把输入字母保存到已猜字母数组
lettersGuessed.push(letterPressed);
//判断输入字母和答案是否一致,一致则游戏结束
if (letterPressed == letterToGuess) {
gameOver = true;
} else {
//获取答案在字母数组中的位置
var letterIndex = letters.indexOf(letterToGuess);
//获取输入字母在字母数组中的位置
var guessIndex = letters.indexOf(letterPressed);
Debugger.log(guessIndex);
//判断大小
if (guessIndex < 0) {
higherOrLower = "That is not a letter";
} else if (guessIndex > letterIndex) {
higherOrLower = "Letter is Lower than you entered";
} else {
higherOrLower = "Letter is Higher than you entered";
}
}
//重绘canvas
drawScreen();
}
}

这里需要注意的一点是,当我们需要对canvas中的图像做修改时,一般会重新绘制整个canvas对象。所以在我们每猜一次字母,都会执行drawScreen把整个canvas上的所有对象都绘制一遍。
下面我们看看drawScreen都干了什么。
复制代码
代码如下:

function drawScreen() {
//background
context.fillStyle = '#ffffaa';
context.fillRect(0, 0, 500, 300);
//box
context.strokeStyle = '#000000';
context.strokeRect(5, 5, 490, 290);
context.textBaseLine = 'top';
//date
context.fillStyle = '#000000';
context.font = '10px_sans';
context.fillText(today, 150, 20);
//message
context.fillStyle = '#ff0000';
context.font = '14px_sans';
context.fillText(message, 125, 40);
//guesses
context.fillStyle = '#109910';
context.font = '16px_sans';
context.fillText('Guesses:' + guesses, 215, 60);
//higher or lower
context.fillStyle = '#000000';
context.font = '16px_sans';
context.fillText('Higher or Lower:' + higherOrLower, 150, 125);
//letters guessed
context.fillStyle = '#ff0000';
context.font = '16px_sans';
context.fillText('Letters Guessed:' + lettersGuessed.toString(), 10, 260);
if (gameOver) {
context.fillStyle = "#FF0000";
context.font = "40px _sans";
context.fillText("You Got It!", 150, 180);
}
}

代码很简单,就是绘制背景,还有文字信息。下面我们介绍导入图像的功能,当我们点击“Export Canvas Image”按钮的时候,会打开一个新的页面,显示当前的图像。注意toDataURL()方法,他会返回一个64位的png图片数据。
复制代码
代码如下:

$('#createImageData').click(function () {
window.open(theCanvas.toDataURL(), 'canvasImage', 'left=0,top=0,width=' + theCanvas.width + ',height=' + theCanvas.height + ',toolbar=0,resizab le=0');
});

大家还是直接运行demo,查看最终效果吧。demo下载地址:html5canvas.guessTheLetter.zip
HTML / CSS 相关文章推荐
CSS3中31种选择器使用方法教程
Dec 05 HTML / CSS
用CSS3绘制三角形的简单方法
Jul 17 HTML / CSS
css3类选择器之结合元素选择器和多类选择器用法
Mar 09 HTML / CSS
浅谈CSS3 动画卡顿解决方案
Jan 02 HTML / CSS
html5记忆翻牌游戏实现思路及代码
Jul 25 HTML / CSS
使用Html5多媒体实现微信语音功能
Jul 26 HTML / CSS
关于iframe跨域使用postMessage的实现
Oct 29 HTML / CSS
html5 移动端视频video的android兼容(去除播放控件、全屏)
Mar 26 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
Aug 13 HTML / CSS
CSS3鼠标悬浮过渡缩放效果
Apr 17 HTML / CSS
教你做个可爱的css滑动导航条
Jun 15 HTML / CSS
CSS的calc函数用法小结
Jun 25 HTML / CSS
html5 canvas-1.canvas介绍(hello canvas)
Jan 07 #HTML / CSS
html5指南-1.html5全局属性(html5 global attributes)深入理解
Jan 07 #HTML / CSS
html5指南-2.如何操作document metadata
Jan 07 #HTML / CSS
html5指南-3.如何实现html元素拖拽功能
Jan 07 #HTML / CSS
html5指南-4.使用Geolocation实现定位功能
Jan 07 #HTML / CSS
html5指南-5.使用web storage存储键值对的数据
Jan 07 #HTML / CSS
html5指南-6.如何创建离线web应用程序实现离线访问
Jan 07 #HTML / CSS
You might like
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
原生js实现验证码功能
2017/03/16 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
Python绘制组合图的示例
2020/09/18 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
医学实习生自我鉴定
2013/12/12 职场文书
妈妈活动方案
2014/08/15 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
病人家属写给医院的感谢信
2015/01/23 职场文书
任长霞观后感
2015/06/16 职场文书
初三英语教学反思
2016/02/15 职场文书
600字作文之感受大自然
2019/11/27 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android