HTML5 Canvas之猜数字游戏
主要的内容描述的是如何渲染一个矩形的边框和填充背景,以及文字.
代码中有详细的注释:
效果图:
以下是代码:
<!DOCTYPE html>
<html lang="cn">
<head>
<title>猜数字游戏示例</title>
<meta charset="gb2312">
<script type="text/javascript">
//@author 杨虹昌
//guess全局属性 GuessBean对象
var guess=null;
var context=null;//2d全局上下文 //检查浏览器是否支持canvas属性
function canvasSupport(){
return !!document.createElement("canvas").getContext;
} //dom加载完成后所执行的函数
function windowLoaded(){
canvasStart();
} //对日志对象的简单封装
var Debugger=(function(){
//输出日志信息
this.log=function(message){
try{
console.log(message);
}catch(e){ }
}
return this;
})(); // 定义游戏类实体
function GuessBean(){
this.today=null;//显示当前时间
this.guessNum=-1;//要猜的数字,初始为负数
this.pressNum=-1;//用户按下的数字,初始为负数代表是初始化状态
this.numGuessed;//用户已经猜过的数字
this.guesses=0;//记录用户猜过的次数
this.gameOver=false;//游戏是否已经结束
this.message="猜数字,数字从0-9.";//提示用户消息
this.hightOrLower="";
} //初始化游戏相关信息,并返回GuessBean对象
function initGame(){
Debugger.log("初始化游戏设置>>");
guess=new GuessBean();
guess.guessNum=Math.floor(Math.random()*10);//生成0-9的随机数
Debugger.log("此次生成的随机数:"+guess.guessNum);
guess.today=new Date();//获取当前日期
guess.guesses=0;//初始化猜的次数为0
guess.gameOver=false;
guess.hightOrLower="";
guess.numGuessed=[];
Debugger.log("绑定dom键盘按下事件.");
//添加事件绑定
window.addEventListener("keyup",listenerKeyPressed,true);
drawScreen();//执行渲染
} //canvas程序入口
function canvasStart(){
// 判断浏览器是否支持canvas
if(!canvasSupport()){
return;
}
//获取dom文档中id属性为"theCanvas"的元canvas素
var theCanvas=document.getElementById("theCanvas");
//获取2d上下文,注意:此处的2d只能是小写,大写不能获取此对象
context=theCanvas.getContext("2d");
Debugger.log("开始渲染>>");
initGame(); }
//完成屏幕渲染
function drawScreen(){
//
context.fillStyle="#ffffaa"; //设置填充颜色
context.fillRect(0,0,500,300); //创建一个矩形 //围绕图像以及文本绘制一个非填充的小方块,
context.strokeStyle="#000000"; //设置填充颜色
//绘制矩形边框,一下四个参数分别为:
//第一和第二个参数:左上角x,y坐标
//第三和第四个参数:右下角x,y坐标
context.strokeRect(5,5,490,290); //设置字体大小和字号
context.textBaseline="top"; //设置字体的垂直对齐方式 //日期
context.fillStyle="#000000"; //设置填充颜色
context.font="12px 隶书"; //设置字体大小和类型
//参数:
//第一个参数:渲染内容
//第二个参数:x轴
//第三个参数:y轴
context.fillText("时间:"+guess.today.toLocaleString(),20,10); // 消息
context.fillStyle="#ff0000"; //设置填充颜色
context.font="14px 隶书"; //设置字体大小和类型
context.fillText("消息:"+guess.message,250,10); //
context.fillStyle="#109910";
context.font="16px 隶书";
context.fillText("Guesses:"+guess.guesses,250,30); //
context.fillStyle="#000000";
context.font="23px 隶书";
context.fillText("Higher or Lower:"+guess.hightOrLower,30,125); //
context.fillStyle="#ff0000";
context.font="18px 隶书";
context.fillText("Num Guessed:"+guess.numGuessed,10,260); //游戏结束
if(guess.gameOver){
context.fillStyle="#ff0000";
context.font="40px 隶书";
context.fillText("恭喜你,答对了!",150,180);
}
} //处理键盘按下事件
function listenerKeyPressed(e){
//游戏结束
if(guess&&guess.gameOver){
Debugger.log("游戏结束.>>");
return;
}
var digit=String.fromCharCode(e.keyCode);
guess.guesses++;//猜的次数加1
guess.numGuessed.push(digit);//记录猜的值
//判断是否与对应的随机值相等
if(parseInt(digit)===guess.guessNum){
guess.gameOver=true;//游戏结束
}else{
//判断是否是数字
if((/^\d$/.test(digit))){
if(parseInt(digit)>guess.guessNum){
guess.hightOrLower="大了.";
}else{
guess.hightOrLower="小了.";
}
}else{
guess.hightOrLower="您按下的不是一个数字.";
}
}
drawScreen();//渲染
}
//添加事件监听
window.addEventListener("load",windowLoaded,false);
</script>
</head>
<body>
<canvas id="theCanvas" width="500" height="300">
<!-- 这个里面是写当不支持canvas时候的提示信息-->
浏览器不支持html5 canvas ,建议使用chrome 或者FF
</canvas>
</body>
</html>
源码地址: https://code.csdn.net/yhc13429826359/html5_canvas_demo
HTML5 Canvas之猜数字游戏的更多相关文章
- C语言猜数字游戏
猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...
- 不一样的猜数字游戏 — leetcode 375. Guess Number Higher or Lower II
好久没切 leetcode 的题了,静下心来切了道,这道题比较有意思,和大家分享下. 我把它叫做 "不一样的猜数字游戏",我们先来看看传统的猜数字游戏,Guess Number H ...
- java 猜数字游戏
作用:猜数字游戏.随机产生1个数字(1~10),大了.小了或者成功后给出提示. 语言:java 工具:eclipse 作者:潇洒鸿图 时间:2016.11.10 >>>>> ...
- 【原创Android游戏】--猜数字游戏Version 0.1
想当年高中时经常和小伙伴在纸上或者黑板上或者学习机上玩猜数字的游戏,在当年那个手机等娱乐设备在我们那还不是很普遍的时候是很好的一个消遣的游戏,去年的时候便写了一个Android版的猜数字游戏,只是当时 ...
- 【原创Android游戏】--猜数字游戏V1.1 --数据存储,Intent,SimpleAdapter的学习与应用
--------------------------------------------------------------- V0.1版本 上次做完第一个版本后,发现还有一些漏洞,并且还有一些可以添 ...
- python学习笔记 ——python写的猜数字游戏 002
from sys import exit import random def Arrfor(str): #CONTST = CONTST + 1 artificial = input("请输 ...
- 用MFC完成一个简单的猜数字游戏: 输入的四位数中,位置和数字都正确为A,数字相同而位置不同的为B。
最近学习了MFC一些比较基础的知识,所以打算通过做一个简单的数字游戏来理解MFC的流程并进一步熟悉其操作. 在这里,我做了一个猜数字的小游戏.第一步当然是设计主界面,先给大家展示一下游戏界面: 主界面 ...
- C语言之猜数字游戏
猜数字游戏 猜数字游戏是以前功能机上的一款益智游戏,计算机会根据输入的位数随机分配一个符合要求的数据,计算机输出guess后便可以输入数字,注意数字间需要用空格或回车符加以区分,计算机会根据输入信息给 ...
- c语言-猜数字游戏
#include <stdio.h> #include <stdlib.h> int top(); int input(); void main() { ; int numbe ...
随机推荐
- 【转】Java 字节流与字符流的区别
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...
- [转]Web 调试工具之 Advanced REST client
原文:http://bbs.itcast.cn/forum.php?mod=viewthread&tid=85654 安装方式: 3.1. 如果你能FQ访问谷歌商店,那么就简单了 在这里直接安 ...
- 关系型数据库与Key-value型数据库Mongodb模式设计对比
MongoDb 相比于传统的 SQL 关系型数据库,最大的不同在于它们的模式设计( Schema Design )上的差别,正是由于这一层次的差别衍生出其它各方面的不同. 我们可以简单的认为关系型数据 ...
- CentOS6系统优化
[root@xuliangwei ~]# cat /etc/redhat-release //系统环境CentOS6.6 CentOS release 6.6 (Final) [root@xulian ...
- mybatis 3 -枚举
定义枚举: public static enum AppStateEnum { Valid("有效"), Virtual("虚拟"), Hide("隐 ...
- svn can't save server certificate
f I use any svn command communicating with the remote server I get the following error: Error valida ...
- 迷你MVVM框架 avalonjs 0.93发布
这段时间吸取@limodou, @东灵等人的意见,做了以下改进 重构isArrayLike,提高avalon.each的性能,原来avalon.each是依赖于isArrayLike来判定是循环普通对 ...
- IIS上架设https网站证书处理备忘
1. 免费SSL证书申请 https://www.startssl.com 教程:http://hxs.fd.fj.cn/?action=show&id=13 2. 证书转换 申请到的证书有两 ...
- leetcode 204 count prim 数素数
描述: 给个整数n,计算小于n的素数个数. 思路: 埃拉托斯特尼筛法,其实就是普通筛子,当检测到2是素数,去除所有2的倍数:当检测到3是素数,去除其倍数. 不过这要求空间复杂度为n,时间复杂度为n. ...
- NoClassDefFoundError: net/sf/ezmorph/Morpher
使用import net.sf.json.JSONObject; json-lib-2.4-jdk15.jar时报这个错,各种查找,受到https://blog.csdn.net/chenleixin ...