HTML5 小游戏:是男人就撑过30秒

话不多说HTML5 图画板写的一个小游戏,原形为是男人就撑过30秒。

下载地址:

具体下载目录在 /2012年资料/1月/30日/HTML5 小游戏:是男人就撑过30秒/

演示地址:http://www.muu.cc/html5/nanren30/index.html

说明:

上下左右控制 ctrl键可加速

player是小球

star是怪物

请用支持canvas的浏览器访问 推荐用 firefox 或chrome

代码

  1. <!DOCTYPE HTML>  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  5. <title>HTML5游戏:是男人就撑过30秒 || www.88181.com</title>  
  6. <script language="javascript" type="text/javascript">  
  7. //定义键盘值  
  8. var KEY = { D: 68, W: 87, A: 65, S:83, RIGHT:39, UP:38, LEFT:37, DOWN:40, QUICK:17};  
  9. //定义输入对象  
  10. var input = {  
  11.     right   : false,  
  12.     up  : false,  
  13.     left    : false,  
  14.     down    : false,  
  15.     quick   : false  
  16. };  
  17. //小球对象  
  18. var player = {  
  19.     speed   : 1,  
  20.     qspeed  : 2,  
  21.     left    : 0,  
  22.     top : 0,  
  23.     xleft   : 0,  
  24.     dleft   : 0,  
  25.     xtop    : 0,  
  26.     dtop    : 0,  
  27.     r   : 5  
  28. }  
  29. player.init = function(){  
  30.     thisthis.xleft = this.r;  
  31.     thisthis.xtop = this.r;  
  32.     this.dleft = $("myCanvas").width-this.r;  
  33.     this.dtop = $("myCanvas").height-this.r;  
  34.       
  35.     this.left = $("myCanvas").width/2;  
  36.     this.top = $("myCanvas").height/2;  
  37.       
  38. }  
  39. player.getSpeed = function(){  
  40.     return (input.quick?this.qspeed:this.speed);  
  41. }  
  42. player.update = function(){   
  43.     if (input.right)    player.left+=player.getSpeed();  
  44.     if (input.left)     playerplayer.left-=player.getSpeed();  
  45.     if (input.down)     player.top+=player.getSpeed();  
  46.     if (input.up)       playerplayer.top-=player.getSpeed();  
  47.     if (player.left>player.dleft)    playerplayer.left=player.dleft;  
  48.     if (player.left<player.xleft)    playerplayer.left=player.xleft;  
  49.     if (player.top>player.dtop)  playerplayer.top=player.dtop;  
  50.     if (player.top<player.xtop)  playerplayer.top=player.xtop;  
  51.       
  52.     var c=$("myCanvas");  
  53.     var ccxt=c.getContext("2d");       
  54.     cxt.fillStyle="#FF0000";  
  55.     cxt.beginPath();  
  56.     cxt.arc(player.left,player.top,player.r,0,Math.PI * 2,true);  
  57.     cxt.closePath();  
  58.     cxt.fill();  
  59. }  
  60.   
  61. //星星  
  62. var star = function(){  
  63.     this.x = 0;  
  64.     this.y = 0;  
  65.     this.r = 5;  
  66.     this.c = "#00FF00";  
  67.     this.ax = 0;  
  68.     this.ay = 0;  
  69.     this.a = 0;  
  70.     this.rAngle = 0;  
  71.     this.speed = 0;  
  72.     this.isAddX = true;  
  73.     this.isAddY = true;  
  74.       
  75.     this.init = function(){  
  76.         var lon = ($("myCanvas").width+$("myCanvas").height)*2;  
  77.         var rlon = Math.floor(Math.random()*(lon+1));  
  78.         this.rAngle = Math.floor(Math.random()*91);  
  79.         if(rlon<$("myCanvas").width){//上  
  80.             this.x = rlon;  
  81.             this.y = 0;  
  82.         }else if(rlon<$("myCanvas").width+$("myCanvas").height){//右  
  83.             this.x = $("myCanvas").width;  
  84.             this.y = rlon-$("myCanvas").width;  
  85.         }else if(rlon<$("myCanvas").width*2+$("myCanvas").height){//下  
  86.             this.x = $("myCanvas").width - (rlon-$("myCanvas").width-$("myCanvas").height);  
  87.             this.y = $("myCanvas").height;  
  88.         }else{//左  
  89.             this.x = 0;  
  90.             this.y = $("myCanvas").height-(rlon-$("myCanvas").width*2-$("myCanvas").height);  
  91.         }  
  92.                       
  93.         if(rlon<$("myCanvas").width/2 || rlon>$("myCanvas").width*2+$("myCanvas").height+$("myCanvas").height/2){//左上  
  94.             this.isAddX = true;  
  95.             this.isAddY = true;  
  96.         }else if(rlon<$("myCanvas").width+$("myCanvas").height/2){//右上  
  97.             this.isAddX = false;  
  98.             this.isAddY = true;  
  99.         }else if(rlon<$("myCanvas").width+$("myCanvas").height+$("myCanvas").width/2){//右下  
  100.             this.isAddX = false;  
  101.             this.isAddY = false;  
  102.         }else{//左下  
  103.             this.isAddX = true;  
  104.             this.sAddY = false;  
  105.         }  
  106.         this.ax = Math.sin(Math.PI/180*this.rAngle)*star.speed;  
  107.         thisthis.ax = this.isAddX?this.ax:0-this.ax;  
  108.         this.ay = Math.cos(Math.PI/180*this.rAngle)*star.speed;  
  109.         thisthis.ay = this.isAddY?this.ay:0-this.ay;  
  110.     }  
  111.       
  112.       
  113.     this.update = function(){//更新  
  114.         thisthis.x=this.x+this.ax;  
  115.         thisthis.y=this.y+this.ay;  
  116.           
  117.         if((this.isAddX && this.x>$("myCanvas").width) || (!this.isAddX && this.x<0) || (this.isAddY && this.y>$("myCanvas").height) || (!this.isAddY && this.y<0)){  
  118.             this.init();  
  119.             return;  
  120.         }  
  121.           
  122.         //$("message").innerHTML = $("message").innerHTML+"<br> x="+this.x+";y="+this.y;  
  123.         //$("message").innerHTML = $("message").innerHTML+"<br>cxt.arc("+Math.round(this.x)+","+Math.round(this.y)+","+this.r+",0,Math.PI * 2,true)";  
  124.         var c=$("myCanvas");  
  125.         var ccxt=c.getContext("2d");       
  126.         cxt.fillStyle=this.c;  
  127.         cxt.beginPath();  
  128.         cxt.arc(this.x,this.y,this.r,0,Math.PI * 2,true);  
  129.         cxt.closePath();  
  130.         cxt.fill();  
  131.     }  
  132.     this.iscollide = function(){//判断是否被撞到  
  133.         var x = Math.abs(player.left-this.x);  
  134.         var y = Math.abs(player.top-this.y);  
  135.         var R = this.r+player.r;  
  136.         if(R*R < x*x+y*y){  
  137.             return true;  
  138.         }  
  139.         return false;  
  140.     }  
  141. }  
  142. star.speed = 1;  
  143.   
  144. var press = function(event){  
  145.     var code = event.keyCode || window.event;  
  146.     switch(code) {  
  147.         case KEY.RIGHT:  
  148.         case KEY.D: input.right = true; break;  
  149.         case KEY.UP:  
  150.         case KEY.W: input.up = true; break;  
  151.         case KEY.LEFT:  
  152.         case KEY.A: input.left = true; break;  
  153.         case KEY.DOWN:  
  154.         case KEY.S: input.down = true; break;  
  155.         case KEY.QUICK: input.quick = true; break;  
  156.     }  
  157. }  
  158.   
  159. var release = function(event) {  
  160.     var code = event.keyCode || window.event;  
  161.     switch(code) {  
  162.         case KEY.RIGHT:  
  163.         case KEY.D: input.right = false; break;  
  164.           
  165.         case KEY.UP:  
  166.         case KEY.W: input.up = false; break;  
  167.           
  168.         case KEY.LEFT:  
  169.         case KEY.A: input.left = false; break;  
  170.           
  171.         case KEY.DOWN:  
  172.         case KEY.S: input.down = false; break;  
  173.           
  174.         case KEY.QUICK: input.quick = false; break;  
  175.     }  
  176. }  
  177.   
  178. var stars = new Array();  
  179. var myInter;  
  180. var begin;  
  181. var time = 0;  
  182. //加载事件  
  183. var load = function(){  
  184.     player.init();  
  185.     for(i=0;i<20;i++){  
  186.         var s = new star();  
  187.         s.init();  
  188.         stars[i] = s;  
  189.     }  
  190.     begin = new Date();  
  191.     myInter = setInterval(function(){update();},20);  
  192. }  
  193.   
  194. var $ = function(id){  
  195.     return document.getElementById(id);  
  196. }  
  197.   
  198. //更新方法  
  199. var update = function(){  
  200.     var c=$("myCanvas");  
  201.     cc.width = c.width; // Clears the canvas    
  202.     player.update();  
  203.     for(i=0;i<stars.length;i++){  
  204.         stars[i].update();  
  205.     }  
  206.     updatetime();  
  207.     isDead();  
  208. }  
  209. //更新时间  
  210. var updatetime = function(){      
  211.     var end = new Date();  
  212.     var time = Math.round((end-begin)/1000);  
  213.     star.speed = Math.round(time/10);  
  214.     $("time").innerHTML = time;  
  215. }  
  216. //判断是否死了  
  217. var isDead = function(){  
  218.     for(i=0;i<stars.length;i++){  
  219.         var flag = stars[i].iscollide();  
  220.         if(flag==false){  
  221.             clearInterval(myInter);  
  222.             alert("失败了");  
  223.             return;  
  224.         }  
  225.     }  
  226. }  
  227. </script>  
  228. </head>  
  229.   
  230. <body onLoad="load();" onkeydown="press(event);" onkeyup="release(event);" >  
  231.     <canvas id="myCanvas" width="400" height="400" style=" border:2px solid #F00; left:30%; position:absolute; ">  
  232.     <h1>换个好浏览器吧,ie太垃圾了</h1>  
  233.     </canvas>  
  234.     <div id="message">  
  235.     兼容 wasd 和 ↑←↓→<br>  
  236.     ctrl 键加速<br>  
  237.     <span id="time"></span>秒  
  238.     </div>  
  239. </body>  
  240. </html>  

相关推荐