• 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

  • 相关阅读:
    python+selenium+unnitest写一个完整的登陆的验证
    selenium+python启动Firefox浏览器失败问题和点击登陆按钮无效问题
    WEB请求处理
    MySQL数据库实现分页查询的SQL语句写法!
    容错性测试
    如何简单实现接口自动化测试(基于 python) 原博主地址https://blog.csdn.net/gitchat/article/details/77849725
    python里如何获取当前日期前后N天或N月的日期
    java:面向对象(接口(续),Compareble重写,Comparator接口:比较器的重写,内部类,垃圾回收机制)
    java:面向对象(多态,final,抽象方法,(简单工厂模式即静态方法模式),接口)
    Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)
  • 原文地址:https://www.cnblogs.com/riskyer/p/3400101.html
Copyright © 2020-2023  润新知