HTML5应用——欢乐老虎机

 言归正传,游戏的界面如下:




















           其实游戏本身应该是挺简单的,以下根据几个模块解说一下:

      一:用户界面

       游戏中有图片和<canvas>绘制的矩形、圆形。在开始编写前应该准备好游戏所需要的图片。我自己用PS简单画了几个,然后用VC写个小程序将图片进行反色、放缩处理就得到了全部图片:例如自己画了几个:

                                 

               其次关于界面押分、启动、投币、得分、积分等,首先需要<canvas>标签:

[html]  view plain  copy
 print ?
  1. <span style="font-size:18px;"><canvas id="mycanvas" width="900" height="650" onclick="dealclick(con)" onmousemove="dealmove(con)" style="border:1px solid yellow;">  
  2. Your brower does not support canvas of HTML5!  
  3. </canvas></span>  
[html]  view plain  copy
 print ?
  1. <span style="font-size:18px;">  
  2. </span>  
[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;">*****创建显示线条框架的函数***************/  
  2. function showFrame(con, x, y, space)  
  3.  {  
  4.      con.beginPath();  
  5.      con.lineWidth = 1;  
  6.      con.moveTo(x, y-1); con.lineTo(x + space * 7, y-1);  
  7.      con.moveTo(x, y + space); con.lineTo(x + space * 7, y + space);  
  8.      con.moveTo(x, y + space * 6-1); con.lineTo(x + space * 7-1, y + space * 6);  
  9.      con.moveTo(x, y + space * 7); con.lineTo(x + space * 7, y + space * 7);  
  10.      con.moveTo(x, y); con.lineTo(x, y + space * 7);  
  11.      con.moveTo(x+space , y); con.lineTo(x + space, y + space * 7);  
  12.      con.moveTo(x + space * 6, y); con.lineTo(x + space * 6, y + space * 7);  
  13.      con.moveTo(x + space * 7, y); con.lineTo(x + space * 7, y + space * 7);  
  14.          con.closePath();  
  15.      con.stroke();  
  16. }  
  17. /********************************************/  
  18. /****创建显示某个特定图片的函数*************/  
  19. function showImage(i, flag,x,y,con) //1为西瓜,0为小西瓜,2为黑西瓜,3为黑小西瓜  
  20.  {  
  21.      var img = new Image();  
  22.     switch (i)   
  23.   {  
  24.       case 1: if (flag == 1)  
  25.               img.src = "苹果.png";  
  26.           else  
  27.               if (flag == 0)  
  28.                   img.src = "小苹果.png";  
  29.               else  
  30.                   if (flag == 3)  
  31.                       img.src = "黑苹果.bmp";  
  32.                   else  
  33.                       img.src = "黑小苹果.bmp";  
  34.           break;  
  35.       case 2:  
  36.           if (flag == 1)  
  37.               img.src = "橙子.png";  
  38.           else  
  39.               if (flag == 0)  
  40.                   img.src = "小橙子.png";  
  41.               else  
  42.                   if (flag == 3)  
  43.                       img.src = "黑橙子.bmp";  
  44.                   else  
  45.                       img.src = "黑小橙子.bmp";  
  46.           break;  
  47.       case 3:  
  48.           if (flag == 1)  
  49.               img.src = "芒果.png";  
  50.           else  
  51.               if (flag == 0)  
  52.                   img.src = "小芒果.png";  
  53.               else  
  54.                   if (flag == 3)  
  55.                       img.src = "黑芒果.bmp";  
  56.                   else  
  57.                       img.src = "黑小芒果.bmp";  
  58.           break;  
  59.       case 4:  
  60.           if (flag == 1)  
  61.               img.src = "铃铛.png";  
  62.           else  
  63.               if (flag == 0)  
  64.                   img.src = "小铃铛.png";  
  65.               else  
  66.                   if (flag == 3)  
  67.                       img.src = "黑铃铛.bmp";  
  68.                   else  
  69.                       img.src = "黑小铃铛.bmp";  
  70.           break;  
  71.       case 5:  
  72.           if (flag == 1)  
  73.               img.src = "西瓜.png";  
  74.           else  
  75.               if (flag == 0)  
  76.                   img.src = "小西瓜.png";  
  77.               else  
  78.                   if (flag == 3)  
  79.                       img.src = "黑西瓜.bmp";  
  80.                   else  
  81.                       img.src = "黑小西瓜.bmp";  
  82.           break;  
  83.       case 6:  
  84.           if (flag == 1)  
  85.               img.src = "双星.png";  
  86.           else  
  87.               if (flag == 0)  
  88.                   img.src = "小双星.png";  
  89.               else  
  90.                   if (flag == 3)  
  91.                       img.src = "黑双星.bmp";  
  92.                   else  
  93.                       img.src = "黑小双星.bmp";  
  94.           break;  
  95.       case 7:  
  96.           if (flag == 1)  
  97.               img.src = "双七.png";  
  98.           else  
  99.               if (flag == 0)  
  100.                   img.src = "小双七.png";  
  101.               else  
  102.                   if (flag == 3)  
  103.                       img.src = "黑双七.bmp";  
  104.                   else  
  105.                       img.src = "黑小双七.bmp";  
  106.           break;  
  107.       case 8:  
  108.           if (flag == 1)  
  109.               img.src = "大王.png";  
  110.           else  
  111.               if (flag == 0)  
  112.                   img.src = "小王.png";  
  113.               else  
  114.                   if (flag == 3)  
  115.                       img.src = "黑大王.bmp";  
  116.                   else  
  117.                       img.src = "黑小王.bmp";  
  118.           break;  
  119.       case 9:  
  120.           if (flag == 1)  
  121.               img.src = "机会.png";  
  122.           else  
  123.               img.src = "黑机会.bmp";  
  124.       defaultbreak;  
  125.   }  
  126.   img.onload = function () {  
  127.       con.drawImage(img, x, y);  
  128.   }  
  129. }  
  130. /********************************************************************/  
  131. /**************显示得分与积分***********************/  
  132. function showScore(con, win_score, score) {  
  133.     con.save();  
  134.     con.font = "40px impact";  
  135.     con.fillStyle = "red";  
  136.     con.fillText("得分", 160, 35);  
  137.     con.fillText("积分", 400, 35);  
  138.     con.fillStyle = "#3DD369";  
  139.     con.fillRect(160, 42, 74, 35);  
  140.     con.fillRect(400, 42, 74, 35);  
  141.     var str = win_score.toString();  
  142.     con.font = "30 宋体";  
  143.     con.fillStyle = "red";  
  144.     con.fillText(str, 160, 70);  
  145.     str = score.toString();  
  146.     con.fillText(str, 400, 70);  
  147.     con.restore();  
  148. }  
  149. /**************创建显示大小的函数**************/  
  150. function showBigSmall(con)  //大小  
  151. {  
  152.     con.save();  
  153.     con.beginPath();  
  154.     var g = con.createRadialGradient(230, 320, 0, 230, 320, 20); //创建渐变颜色  
  155.     g.addColorStop(0.2, "#C8EE2B"); //黄  
  156.     g.addColorStop(0.8, "#BCC1AC"); //  
  157.     con.fillStyle = g;  
  158.     con.arc(230, 320, 20, 0, Math.PI * 2, true);  
  159.     con.fill();  
  160.     con.closePath();  
  161.     con.restore();  
  162.     con.save();  
  163.     con.beginPath();  
  164.     var g1 = con.createRadialGradient(370, 320, 0, 370, 320, 20); //创建渐变颜色  
  165.     g1.addColorStop(0.2, "#C8EE2B"); //黄  
  166.     g1.addColorStop(0.8, "#BCC1AC"); //  
  167.     con.fillStyle = g1;  
  168.     con.arc(370, 320, 20, 0, Math.PI * 2, true);  
  169.     con.fillStyle = "";  
  170.     con.fill();  
  171.     con.closePath();  
  172.     con.fillStyle = "black"; con.font = "30px 楷体";  
  173.     con.fillText("大", 215, 330);  
  174.     con.fillText("小", 355, 330);  
  175.     con.restore();  
  176. }  
  177. /*******创建显示投币与退币的函数****************/  
  178. function showGiveQuit(con) //投与退  
  179. {  
  180.     con.save();  
  181.     con.beginPath();  
  182.     var g = con.createRadialGradient(200, 260, 0, 200, 260, 15); //创建渐变颜色  
  183.     g.addColorStop(0.2, "#C8EE2B"); //黄  
  184.     g.addColorStop(0.8, "#BCC1AC"); //  
  185.     con.fillStyle = g;  
  186.     con.arc(200, 260, 15, 0, Math.PI * 2, true);  
  187.     con.fill();  
  188.     con.closePath();  
  189.     con.restore();  
  190.     con.save();  
  191.     con.beginPath();  
  192.     var g1 = con.createRadialGradient(400, 260, 0, 400, 260, 15); //创建渐变颜色  
  193.     g1.addColorStop(0.2, "#C8EE2B"); //黄  
  194.     g1.addColorStop(0.8, "#BCC1AC"); //  
  195.     con.fillStyle = g1;  
  196.     con.arc(400, 260, 15, 0, Math.PI * 2, true);  
  197.     con.fill();  
  198.     con.closePath();  
  199.     con.restore();  
  200.     con.save();  
  201.     con.beginPath();  
  202.     g1 = con.createRadialGradient(300, 235, 0, 300, 235, 15); //创建渐变颜色  
  203.     g1.addColorStop(0.2, "#C8EE2B"); //黄  
  204.     g1.addColorStop(0.8, "#BCC1AC"); //  
  205.     con.fillStyle = g1;  
  206.     con.arc(300, 235, 15, 0, Math.PI * 2, true);  
  207.     con.fill();  
  208.     con.closePath();  
  209.     con.fillStyle = "black"; con.font = "30px 楷体";  
  210.     con.fillText("退币", 170, 235); con.fillText("投币", 370, 235);con.fillText("启动", 270, 210);  
  211.     con.restore();  
  212. }  
  213.   
  214. /********创建显示界面的函数**************/  
  215. function showSurface(con, x, y, space)  
  216.  {  
  217.      // showFrame(con, x, y, space); //显示主框架  
  218.      con.save();  
  219.      showBeilv(con, y - 80, space);  
  220.      con.restore();  
  221.      con.save();  
  222.      showImage(2, 1, x, y, con); showImage(4, 1, x + space, y, con); showImage(8, 0, x + 2 * space, y, con); showImage(8, 1, x + 3 * space, y, con);  
  223.      showImage(1, 1, x + 4 * space, y,con); showImage(1, 0, x + 5 * space, y, con); showImage(3, 1, x + 6 * space, y, con);  
  224.      showImage(4,0,x,y+space,con);showImage(1,1,x,y+2*space,con);showImage(6,0,x,y+4*space,con);showImage(6,1,x,y+5*space,con); showImage(3,1,x,y+6*space,con);  
  225.      showImage(5, 1, x + 6 * space, y + space, con); showImage(5, 0, x + 6 * space, y + 2 * space, con); showImage(1, 1, x + 6 * space, y + 4 * space, con);  
  226.      showImage(2, 0, x + 6 * space, y + 5 * space, con); showImage(2, 1, x + 6 * space, y + 6 * space, con);  
  227.      showImage(3, 0, x + space, y + 6 * space, con); showImage(1, 1, x + 2 * space, y + 6 * space, con); showImage(7, 1, x + 3 * space, y + 6 * space, con);  
  228.      showImage(7, 0, x + 4 * space, y + 6 * space, con); showImage(4, 1, x + 5 * space, y + 6 * space, con);  
  229.      showImage(9, 1, x, y + 3 * space, con); showImage(9, 1, x + 6 * space, y + 3 * space, con);  
  230.      con.restore();  
  231.      con.save();  
  232.      showFrame(con, x, y, space);  
  233.      con.restore();  
  234.      con.save();  
  235.      showLight(con, 0);  
  236.      con.restore();  
  237.      con.save();  
  238.      showGiveQuit(con);  
  239.      con.restore();  
  240.      init_param();  
  241.     // gain_score = 200; score = 20;  
  242.      con.save();  
  243.      showScore(con, gain_score, score);  
  244.      con.restore();  
  245.      con.save();  
  246.      showYafen(yafen, con, y, space);  
  247.      con.restore();  
  248.      con.save();  
  249.      showBigSmall(con);  
  250.      con.restore();  
  251. }  
  252. /*************************************************/  
  253. /***********创建显示说明和倍率的函数*******************/  
  254. function showBeilv(con,y,space)  
  255.  {  
  256.      con.save();  
  257.      var str;  
  258.      con.fillStyle = "black"; con.lineWidth = 3; con.font = "40px 汉仪丫丫体简";  
  259.      str = "*100"; showImage(8, 1, 620, y, con);con.fillText(str, 700, y + 50);  
  260.      str = "*40"; showImage(7, 1, 620, y + space, con);con.fillText(str, 700, y + 50 + space);  
  261.      str = "*30"; showImage(6, 1, 620, y + 2 * space, con); con.fillText(str, 700, y + 50 + 2*space);  
  262.      str = "*20"; showImage(5, 1, 620, y + 3 * space, con); con.fillText(str, 700, y + 50 + 3*space);  
  263.      str = "*20"; showImage(4, 1, 620, y + 4 * space, con); con.fillText(str, 700, y + 50 + 4*space);  
  264.      str = "*15"; showImage(3, 1, 620, y + 5 * space, con); con.fillText(str, 700, y + 50 + 5*space);  
  265.      str = "*10"; showImage(2, 1, 620, y + 6 * space, con); con.fillText(str, 700, y + 50 + 6*space);  
  266.      str = "*5"; showImage(1, 1, 620, y + 7 * space, con); con.fillText(str, 700, y + 50 + 7*space);  
  267.      con.restore();  
  268.   
  269. }  
  270. /*********************************************/  
  271. /******创建显示各个压分大小的函数**************/  
  272. function showYafen(yafen,con,y,space)   
  273. {  
  274.     con.save();  
  275.     con.fillStyle = "#3DD369";  
  276.     for (var i = 0; i < 8; i++)  
  277.         con.fillRect(780, y + i * space - 60, 60, 40);  
  278.     con.fillStyle = "red"; con.font = "40px 楷体";  
  279.     for (var j = 0; j < 8; j++) {  
  280.         var str = yafen[7-j].toString();  
  281.         con.fillText(str, 780, y + j * space - 28);  
  282.     }  
  283.     //其次创建8个按钮  
  284.     con.restore();  
  285.     con.save();  
  286.     for (var m = 0; m < 8; m++)   
  287.     {  
  288.         con.beginPath();  
  289.         var g = con.createRadialGradient(860, y+m*space-40, 0, 860, y+m*space-40, 15); //创建渐变颜色  
  290.         g.addColorStop(0.2, "#C8EE2B"); //黄  
  291.         g.addColorStop(0.8, "#BCC1AC"); //  
  292.         con.fillStyle = g;  
  293.         con.arc(860, y + m * space - 40, 15, 0, Math.PI * 2, true); con.fill(); con.closePath();  
  294.     }  
  295.     con.restore();  
  296.   
  297. }  
  298. /***********************************************/  
  299. /***************显示指示灯的亮灭*************/  
  300. function showLight(con, flag) //等  
  301. {  
  302.    con.save();  
  303.    if (flag == 0) //等灭  
  304.    {  
  305.        var g = con.createRadialGradient(300, 50, 0, 300, 50, 25); //创建渐变颜色  
  306.        g.addColorStop(0.2, "black"); //黄  
  307.        g.addColorStop(0.8, "white"); //  
  308.        con.fillStyle = g;  
  309.        con.arc(300, 50, 25, 0, Math.PI * 2, true); con.fill();  
  310.    }  
  311.    else //等亮  
  312.    {  
  313.        var g1 = con.createRadialGradient(300, 50, 0, 300, 50, 25); //创建渐变颜色  
  314.        g1.addColorStop(0.2, "red"); //黄  
  315.        g1.addColorStop(0.8, "white"); //  
  316.        con.fillStyle = g1;  
  317.        con.arc(300, 50, 25, 0, Math.PI * 2, true); con.fill();  
  318.    }  
  319.    con.restore();  
  320. }  
  321. /*************************</span>  

   二:事件处理

    在<canvas>标签中加入了οnclick="dealclick(con)"代码,这是整个事件处理。

    其实事件处理包括几个步骤: 根据坐标找出对应的事件(因为游戏中有押分、启动、投币等多个事件),然后再处理对应的事件。

       dealclick(con)函数如下:

    

[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;">function dealclick(con)   
  2.     {  
  3.         var posx = event.clientX;  
  4.         var posy = event.clientY;  
  5.         var flag = getPos(posx, posy); //获得对应的事件序号  
  6.         //alert(posx.toString()+" "+posy.toString()+"    "+flag.toString());  
  7.         if (flag == 0)   //表示不是兴趣区域  
  8.             return;  
  9.         if (flag >= 1 && flag <= 8) //对应的事件是压分  
  10.         {  
  11.             deal_yafen_event(flag,con);  
  12.             return;  
  13.         }  
  14.         if (flag >= 9) //对应事件  
  15.         {  
  16.             switch (flag) //  
  17.             {  
  18.                 case 9: deal_quit_event(con); break//退币事件  
  19.                 case 10: deal_give_event(con); break;  //投币事件  
  20.                 case 11: begin_event(con); break//启动事件  
  21.                 case 12: choseBig(); break;    //选大  
  22.                 case 13: choseSmall(); break; ;     //选小  
  23.                 case 14: LRevent(1); break;  
  24.                 case 15: LRevent(0); break;  
  25.             }  
  26.         }  
  27.   
  28.     }</span>  
       其中getPos事件是找出对应事件代号的

   

[html]  view plain  copy
 print ?
  1. <span style="font-size:18px;">/****根据坐标寻找对应位置的函数************/  
  2. function getPos(posx, posy)   
  3. {  
  4.     if (posx < 200 || posx > 1100 || posy < 20 || posy > 670)  
  5.         return 0;  //返回零,不在canvas范围中  
  6.     if (posx >= 1035 && posx <= 1075)   //表示在yafen的横坐标范围中  
  7.     {  
  8.         for (var i = 1; i <= 8; i++)  //1-8也分别是序号  
  9.         {  
  10.             if (posy > Y + (i - 1) * 80 - 35 && posy < Y + (i - 1) * 80 - 5)  
  11.                 return 9 - i;    //注意1-8分别对应苹果-大王的位置  
  12.         }  
  13.         return 0;  
  14.     }  
  15.     if (posx >= 385 && posx <= 615)  //在事件启动范围中  
  16.     {  
  17.         if (posx >= 385 && posx <= 415 && posy >= 265 && posy <= 295)  
  18.             return 9; //退币对应事件9  
  19.         if (posx >= 585 && posx <= 615 && posy >= 265 && posy <= 295)  
  20.             return 10; //投币对应事件10  
  21.         if (posx >= 485 && posx <= 515 && posy >= 240 && posy <= 270)  
  22.             return 11; //启动对应事件11  
  23.         if (posx >= 410 && posx <= 250+200 && posy >= 320 && posy <= 360)  
  24.             return 12; //选大  
  25.         if (posx >= 550 && posx <= 590 && posy >= 320 && posy <= 360)  
  26.             return 13; //选小  
  27.         if (posx >= 235+200 && posx <= 270+200 && posy >= 410 && posy <= 430)  
  28.             return 14; //左移  
  29.         if (posx >= 340 + 200 && posx <= 375 + 200 && posy >= 410 && posy <= 430)  
  30.             return 15; //右移  
  31.                
  32.     }  
  33.     return 0;  
  34.   
  35. }</span><span style="color:#3333ff;font-size:24px; ">  
  36. </span>  
       关于对应的押分,选大、选小事件其实都是比较简单的, 可以简单说一下选大选小中关于控制概率的算法, 例如控制庄家赢的概率是70%;可以利用var num=Math.random(); if(num<0.7)就算庄家赢,return true. 这都是比较简单的。

      最复杂的其实是启动事件。 玩过老虎机的朋友都知道,灯的闪烁、以及闪烁有快慢。 js中只有setInterval() 函数处理定时问题,所以编写时比较复杂

     

[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;">/********************处理起动事件***************/  
  2.     function begin_event(con) //启动事件  
  3.     {  
  4.         if (isOK == false)  
  5.             return//表示上一次的启动还没有完成  
  6.         var g=0;  
  7.         for (var e = 0; e < 8; e++)  
  8.             g += yafen[e];  
  9.         if (g == 0)  
  10.             return;  //表示没有压分  
  11.         if (gain_score != 0) //如果右边有钱先将钱转到右边  
  12.         {  
  13.             score += gain_score;  
  14.             gain_score = 0;  
  15.             showScore(con, gain_score, score);  
  16.             return;  
  17.         }  
  18.         if (repeatYafen == true//表示重复上次的压分不变  
  19.         {  
  20.             showYafen(yafen, con, Y, 80); //显示压分  
  21.             var totalyafen=0;  
  22.             for (var a = 0; a < 8; a++)  
  23.                 totalyafen += yafen[a];  
  24.             if (totalyafen > score) //表示余额不足  
  25.                 return;  
  26.             else  
  27.                 score -= totalyafen; //扣分;  
  28.             showScore(con, gain_score, score);  
  29.         }   
  30.         for (n = 0; n < 6; n++)  
  31.             time[n] = 0;  
  32.         n = count = 0;  
  33.          var id = getTheOne(0);  //获取本次中奖的号码  
  34.         // var id = 17; //用于实验  
  35.          var id2, id3;  
  36.          isOK = false;//表示进入闪烁模式  
  37.         if (id >= 0 && id <= 15)//没有中机会  
  38.         {  
  39.             id2 = getOnlyOne(id);  //得到在屏幕中的序号  
  40.             aim_pos1 = id2;  
  41.             light_flash(id,id2, 0, con);  //灯闪烁  
  42.         }  
  43.         if (id == 16)  //中了左机会  
  44.         {  
  45.             id2 = getTheOne(1); //再次获得序号  
  46.             id3 = getOnlyOne(id2); //得到在屏幕中的序号  
  47.             aim_pos1 = id3; //记录新的启示序号  
  48.             light_flash(id, 0, 1, con);  
  49.            // alert(aim_pos1.toString());  
  50.         }  
  51.         if (id == 17)  //中了右机会  
  52.         {  
  53.             id2 = getTheOne(1);  //在次获得序号  
  54.             id3 = getOnlyOne(id2); //得到在屏幕中的位置  
  55.             aim_pos1 = id3;  
  56.             //alert(id3.toString());  
  57.             light_flash(id, 12, 2, con);  
  58.         }  
  59.   
  60.     }  
  61.     /******************************************/</span>  
        主要介绍一下利用setInterval()介绍一下如何实现递增的延时,如老虎机灯快停时闪烁的越来越慢。可能我的方法不太好,大家可以参考一下

[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;">/*****************闪烁函数1*********************/  
  2.     function flash1() //闪烁  
  3.     {  
  4.        var k=0;  
  5.         if (n <count - 5) //这段时间内正常闪烁  
  6.         {  
  7.             if (n == 0)  
  8.                 showImageId(aim_pos, con, 0);  
  9.             else {  
  10.                  k = (aim_pos - 1 + n) % 24;  
  11.                 showImageId(k, con, 1);  
  12.                 k = (k + 1) % 24;  
  13.                 showImageId(k, con, 0);  
  14.             }  
  15.             showLight(con, n % 2); flashSound();  
  16.             flashSound();  
  17.             n++;  
  18.         }  
  19.         else  //延时闪烁  
  20.         {  
  21.             switch(time[0]) //位置  
  22.             {  
  23.                 case 0: time[0]++; k = (aim_pos - 1 + n) % 24; showImageId(k, con, 1); k = (k + 1) % 24; showImageId(k, con, 0); flashSound(); showLight(con, n % 2); n++; break;  
  24.              case 1: time[1]++;  
  25.                      if(time[1]==2) //时间到  
  26.                      {  
  27.                          k = (aim_pos - 1 + n) % 24; showImageId(k, con, 1); k = (k + 1) % 24; showImageId(k, con, 0); showLight(con, n % 2); flashSound();  
  28.                         time[0]++; n++;  
  29.                      }break;  
  30.              case 2:time[2]++;  
  31.                     if(time[2]==3) //时间到  
  32.                     {  
  33.                         k = (aim_pos - 1 + n) % 24; showImageId(k, con, 1); k = (k + 1) % 24; showImageId(k, con, 0); showLight(con, n % 2); flashSound();  
  34.                         time[0]++; n++;  
  35.                     }break;  
  36.              case 3:time[3]++;  
  37.                     if(time[3]==4) //时间到  
  38.                     {  
  39.                         k = (aim_pos - 1 + n) % 24; showImageId(k, con, 1); k = (k + 1) % 24; showImageId(k, con, 0); showLight(con, n % 2); flashSound();  
  40.                         time[0]++; n++;  
  41.                     }break;  
  42.              case 4:  
  43.                     time[4]++;  
  44.                     if(time[4]==5) //时间到  
  45.                     {  
  46.                         k = (aim_pos - 1 + n) % 24; showImageId(k, con, 1); k = (k + 1) % 24; showImageId(k, con, 0); showLight(con, n % 2); flashSound();  
  47.                         time[0]++; n++;  
  48.                     } break;  
  49.                 case 5: time[5]++;  
  50.                     if (time[5] == 6) //时间到  
  51.                     {  
  52.                         k = (aim_pos - 1 + n) % 24; showImageId(k, con, 1); k = (k + 1) % 24; showImageId(k, con, 0); showLight(con, n % 2); flashSound();  
  53.                         clearInterval(jsq); showLight(con, 1); flashSound();  
  54.                         aim_pos = aim_pos1; //更新起始位置  
  55.                         countGainScore(0, con, aim_pos1); repeatYafen = true//设置默认是重复压分模式  
  56.                         isOK = true;  
  57.                     }  
  58.             }  
  59.         }  
  60.     }</span>  

      三:背景音乐

        游戏中需要游戏背景音乐。 这需要用到html5中的<audio>标签,然后通过js来控制声音的播放与暂停

     在游戏界面中先载入:

   

[html]  view plain  copy
 print ?
  1.  <audio src="sound\HP.wav" id="win"></audio><br />     
  2. <audio src="sound\pig.wav" id="lose"></audio><br />  
  3. <audio src="sound\CLICK.WAV" id="flash"></audio>  
    然后利用js来控制, 例如介绍一下选大选小时赢时候的背景音乐

[javascript]  view plain  copy
 print ?
  1. var win = document.getElementById("win");  
  2. unction winSound() //  
  3.    {  
  4.        win.currentTime = 0; //置于当前  
  5.        win.play();  
  6.    }  
   然后在自己需要控制的地方加入播放函数即可。

     

  四:游戏bug

    由于HTML5还不够成熟,因此浏览器对其支持能力不够好。例如背景音乐,长期使用定时器播放后浏览器会失去对<audio>的支持能力。 由于游戏是在浏览器中运行的,所以效率相比vc++的程序比较低。 如何脚本过于复杂会直接崩溃。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值