H5 打飞机游戏

index.html

  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>H5 打飞机游戏</title>
  6. <script type="text/javascript" src="./jquery.min.1.7.1.js"></script>
  7. <style>
  8. body{padding:0; margin:0; text-align:center}
  9. .content{border:1px #000 solid; width:480px; margin:0 auto; height:800px; display:block; font-size:72px;}
  10. .info,.blog{border:1px #000 solid; position:fixed; top:5px; right:5px; width:150px; text-align:left}
  11. .blog{ left:10px; background:#000; text-align:center; width:100px}
  12. .blog a{ color: #FFF; text-decoration:none; font-size:15px; }
  13. </style>
  14. </head>
  15. <body>
  16. <div class="content"><canvas id="dotu" width="480" height="800"></canvas></div>
  17. <div class="blog"><a href="/">回到博客首页</a></div>
  18. <div class="info">
  19. 鼠标X:<span id="sbX"></span><br>鼠标Y:<span id="sbY"></span><br>小飞机数:<span id="fjs"></span><br>子弹数:<span id="zds"></span><br>打中:<span id="isdz"></span><br>生成飞机时间:<span id="scfj"></span>
  20. </div>
  21. <script type="text/javascript" src="./dotu_game.js"></script>
  22. </body>
  23. </html>

 

dotu_game.js

  1. // JavaScript Document
  2. var c = document.getElementById("dotu");
  3. var cxt = c.getContext("2d");
  4. var img = newImg("./assets/bg_01.jpg");
  5. var fps;
  6. cxt.drawImage(img,0,0,480,800);
  7. var flivverLog = 0;
  8. var flivver1 = newImg("./assets/flivver.png");
  9. var flivver2 = newImg("./assets/flivver2.png");
  10. var flivver3 = newImg("./assets/flivver3.png");
  11. // 用于记录游戏的时间,越到后面越快
  12. var time1 = 0;
  13. var time2 = 80;
  14. // 积分
  15. var jifen = 0;
  16. function getSudu(){
  17. var number = parseInt(Math.random()*10);
  18. if(number < 5 && number > 0){
  19. return number;
  20. }
  21. return 1;
  22. }
  23. // 飞机的对象
  24. function flivverObj(hp,ewidth,eheight,eimg,esudu){
  25. // 随机的X
  26. this.x = parseInt(Math.random()*460+1);
  27. this.y = 0;
  28. // 血量
  29. this.hp = hp;
  30. // 挨打
  31. this.hit = 0;
  32. // 是否死亡
  33. this.over = 0;
  34. this.width = ewidth;
  35. this.height = eheight;
  36. this.img = eimg;
  37. this.sudu = esudu;
  38. }
  39. // 获取飞机
  40. function getFlivver(type){
  41. switch(type){
  42. case 1:
  43. return new flivverObj(100,50,30,flivver1,getSudu());
  44. case 2:
  45. return new flivverObj(500,70,90,flivver2,getSudu());
  46. case 3:
  47. return new flivverObj(1000,110,170,flivver3,getSudu());
  48. }
  49. }
  50. function cartridge(x,y){
  51. this.x = x;
  52. this.y = y;
  53. }
  54. function gameover(){
  55. window.clearTimeout(fps);
  56. //$('#dotu').fadeOut();
  57. $('.content').css('position','relative');
  58. $('.content').append('<span style="position:absolute; top:5px; left:2px; font-size:150px; color:#cc0000; text-align:center" id="sil"></span>');
  59. $('#sil').html('你').hide().fadeIn(1000,function(){
  60. $(this).html('你屎').hide().fadeIn(1000,function(){
  61. $(this).html('<a href="javascript:location.reload();" style="color:#cc0000" title="重新开始">你屎了</a><br>' + jifen + ' 分').hide().fadeIn();
  62. });
  63. });
  64. }
  65. (function(cxt){
  66. var dotu = {nums:0};
  67. // 用于存放小飞机
  68. var flivver = new Array();
  69. var flivverImg = newImg("./assets/flivver.png");
  70. // 自己
  71. var me = {x:240,y:750};
  72. var meImg = newImg('assets/me.png');
  73. // 子弹
  74. var cartridges = new Array();
  75. var cartridgeImg = newImg('./assets/cartridge.png');
  76. var boo1 = newImg('./assets/boo1.png');
  77. var over = newImg('./assets/over.png');
  78. //
  79. dotu.update = function(){
  80. dotu.setTimes();
  81. // 设置背景
  82. dotu.setBg();
  83. // 设置小飞机
  84. dotu.setFlivver();
  85. // 画自己
  86. dotu.setMe();
  87. // 子弹
  88. dotu.cartridge();
  89. cxt.font = "italic 20px 微软雅黑";
  90. cxt.strokeText("积分:" + jifen, 10, 30);
  91. $('#fjs').html(flivver.length);
  92. $('#zds').html(cartridges.length);
  93. $('#scfj').html("1000/" + time2 + " 毫秒");
  94. }
  95. dotu.setTimes = function(){
  96. time1++ ;
  97. // 100 秒 1个档位
  98. if(time1 == 1000){
  99. time1 = 0;
  100. time2 = (time2 == 20) ? 20 : time2 - 20;
  101. }
  102. }
  103. /**
  104. * 设置移动的背景
  105. */
  106. dotu.setBg = function(){
  107. dotu.nums++;
  108. if(dotu.nums == 800){
  109. dotu.nums = 0;
  110. }
  111. // 画布的背景
  112. cxt.drawImage(img,0,dotu.nums,480,800);
  113. cxt.drawImage(img,0,dotu.nums - 800,480,800);
  114. }
  115. dotu.setFlivver = function(){
  116. // 生成飞机
  117. if(dotu.nums % time2 == 0){
  118. flivverLog++;
  119. if(flivverLog % 6 == 0){
  120. flivver.push(getFlivver(2));
  121. }else if(flivverLog % 13 == 0){
  122. flivver.push(getFlivver(3));
  123. }else{
  124. flivver.push(getFlivver(1));
  125. }
  126. }
  127. for(a in flivver){
  128. flivver[a].y += flivver[a].sudu;
  129. // 如果超出屏幕将该小飞机删除
  130. if(flivver[a].y > 780){
  131. flivver.splice(a, 1);
  132. }
  133. // 将小飞机画到画布上
  134. // 小飞机死亡
  135. if(flivver[a].over > 0){
  136. flivver[a].over --;
  137. if(flivver[a].over > 20){
  138. cxt.drawImage(boo1,flivver[a].x + flivver[a].width/2 - 20 ,flivver[a].y + flivver[a].height / 2 -10,41,39);
  139. }else if(flivver[a].over > 2){
  140. cxt.drawImage(over,flivver[a].x + flivver[a].width/2 - 20 ,flivver[a].y + flivver[a].height / 2 -10,40,43);
  141. }else{
  142. flivver.splice(a, 1);
  143. }
  144. }else{
  145. cxt.drawImage(flivver[a].img,flivver[a].x,flivver[a].y,flivver[a].width,flivver[a].height);
  146. // 判断自己是否死亡
  147. if( me.x > (flivver[a].x - flivver[a].width + 20) && (me.x) <(flivver[a].x + flivver[a].width - 20) && (me.y) < (flivver[a].y + flivver[a].height + 20) && (me.y + 72) > (flivver[a].y - 20)){
  148. gameover();
  149. }
  150. if(flivver[a].hit > 0){
  151. cxt.drawImage(boo1,flivver[a].x + flivver[a].width/2 - 20 ,flivver[a].y + flivver[a].height / 2 -10,41,39);
  152. //cxt.drawImage(boo1,flivver[a].x + 5 ,flivver[a].y,41,39);
  153. flivver[a].hit--;
  154. }
  155. }
  156. }
  157. }
  158. // 更新自己的距离
  159. dotu.setMe = function(){
  160. cxt.drawImage(meImg,me.x,me.y,64,72);
  161. }
  162. // 更新子弹方法
  163. dotu.cartridge = function(){
  164. if(dotu.nums % 10 == 0){
  165. cartridges.push(new cartridge(me.x + 30,me.y));
  166. }
  167. for(i in cartridges){
  168. // 飞到顶部就将OBJ删除掉
  169. if(cartridges[i].y < 0){
  170. cartridges.splice(i, 1);
  171. continue;
  172. }
  173. cartridges[i].y -= 20;
  174. // 将小飞机画到画布上
  175. cxt.drawImage(cartridgeImg,cartridges[i].x,cartridges[i].y,7,17);
  176. // 子弹碰到飞机的情况
  177. for(j in flivver){
  178. if(flivver[j].over > 0){
  179. continue;
  180. }
  181. if(cartridges[i].x > flivver[j].x && cartridges[i].x < flivver[j].x+ flivver[j].width && cartridges[i].y > flivver[j].y && cartridges[i].y -flivver[j].height < flivver[j].y){
  182. flivver[j].hit = 10;
  183. $('#isdz').html('打中了编号' + j);
  184. if(flivver[j].hp > 1){
  185. flivver[j].hp -= 80;
  186. }else{
  187. flivver[j].over = 40;
  188. jifen += 50000;
  189. }
  190. // 子弹消失
  191. cartridges.splice(i, 1);
  192. break;
  193. }
  194. }
  195. }
  196. }
  197. // 绑定鼠标事件
  198. c.addEventListener('mousemove', function onMouseMove(evt) {
  199. me.x = evt.layerX - $('#dotu').offset().left - 32;
  200. me.y = evt.layerY - 36 ;
  201. $('#sbX').html(me.x);
  202. $('#sbY').html(me.y);
  203. });
  204. fps = setInterval(dotu.update, 1000/100);
  205. }(cxt))
  206. function newImg(src){
  207. var obj = new Image();
  208. obj.src = src;
  209. return obj;
  210. }
  211. //setInterval(h.update, 1000/65);

 

效果图:
H5 打飞机游戏