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

 

 

posted on 2013-10-31 20:53  you Richer  阅读(776)  评论(0编辑  收藏  举报