日期:2014-05-16  浏览次数:20603 次

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 隶书";        //设置字体大小和类型