首页 > 语言 > JavaScript > 正文

JavaScript制作简易的微信打飞机

2024-05-06 16:17:55
字体:
来源:转载
供稿:网友

这篇文章主要介绍了JavaScript制作简易的微信打飞机,只有简单的功能,大神们可以自由扩展哈。有需要的小伙伴可以参考下。

简单的用JavaScript模拟微信打飞机,部分功能还不完善,刚开始写,还有很多不足,还望大家多多指出。

 

 
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
  2. <html> 
  3. <head> 
  4. <title></title> 
  5. <meta http-equiv="content" content="text/html" charset="utf-8"/> 
  6. <style type="text/css"
  7. *{ 
  8. margin: 0; 
  9. padding: 0; 
  10. #contentdiv{ 
  11. position: absolute; 
  12. left: 500px; 
  13. #startdiv{ 
  14. width: 320px; 
  15. height: 568px; 
  16. background-image: url(../image/开始背景.png); 
  17. button{ 
  18. outline: none; 
  19. #startdiv button{ 
  20. position: absolute; 
  21. top: 500px; 
  22. left: 82px; 
  23. width: 150px; 
  24. height: 30px; 
  25. border: 1px solid black; 
  26. border-radius: 30px; 
  27. background-color: #c4c9ca; 
  28. #maindiv{ 
  29. width: 320px; 
  30. height: 568px; 
  31. background-image:url(../image/background_1.png) ; 
  32. display: none; 
  33. #maindiv img{ 
  34. position: absolute; 
  35. z-index: 1; 
  36. #scorediv{ 
  37. font-size: 16px; 
  38. font-weight: bold; 
  39. position: absolute; 
  40. top: 10px; 
  41. left: 10px; 
  42. display: none; 
  43. #scorediv{ 
  44. font-size: 18px; 
  45. font-weight: bold; 
  46. #suspenddiv{ 
  47. position: absolute; 
  48. top: 210px; 
  49. left: 82px; 
  50. display: none; 
  51. z-index: 2; 
  52. #suspenddiv button{ 
  53. width: 150px; 
  54. height: 30px; 
  55. margin-bottom: 20px; 
  56. border: 1px solid black; 
  57. border-radius: 30px; 
  58. background-color: #c4c9ca; 
  59. #enddiv{ 
  60. position: absolute; 
  61. top: 210px; 
  62. left: 75px; 
  63. border: 1px solid gray; 
  64. border-radius: 5px; 
  65. text-align: center; 
  66. background-color:#d7ddde; 
  67. display: none; 
  68. z-index: 2; 
  69. .plantext{ 
  70. width: 160px; 
  71. height: 30px; 
  72. line-height: 30px; 
  73. font-size: 16px; 
  74. font-weight: bold; 
  75. #planscore{ 
  76. width: 160px; 
  77. height: 80px; 
  78. line-height: 80px; 
  79. border-top: 1px solid gray; 
  80. border-bottom: 1px solid gray; 
  81. font-size: 16px; 
  82. font-weight: bold; 
  83. #enddiv div{ 
  84. width: 160px; 
  85. height: 50px; 
  86. #enddiv div button{ 
  87. margin-top:10px ; 
  88. width: 90px; 
  89. height: 30px; 
  90. border: 1px solid gray; 
  91. border-radius: 30px; 
  92. </style> 
  93. </head> 
  94.  
  95. <body> 
  96. <div id="contentdiv"
  97. <div id="startdiv"
  98. <button onclick="begin()">开始游戏</button> 
  99. </div> 
  100. <div id="maindiv"
  101. <div id="scorediv"
  102. <label>分数:</label> 
  103. <label id="label">0</label> 
  104. </div> 
  105. <div id="suspenddiv"
  106. <button>继续</button><br/> 
  107. <button>重新开始</button><br/> 
  108. <button>回到主页</button> 
  109. </div> 
  110. <div id="enddiv"
  111. <p class="plantext">飞机大战分数</p> 
  112. <p id="planscore">0</p> 
  113. <div><button onclick="jixu()">继续</button></div> 
  114. </div> 
  115. </div> 
  116. </div> 
  117. <script type="text/javascript"
  118. //获得主界面 
  119. var mainDiv=document.getElementById("maindiv"); 
  120. //获得开始界面 
  121. var startdiv=document.getElementById("startdiv"); 
  122. //获得游戏中分数显示界面 
  123. var scorediv=document.getElementById("scorediv"); 
  124. //获得分数界面 
  125. var scorelabel=document.getElementById("label"); 
  126. //获得暂停界面 
  127. var suspenddiv=document.getElementById("suspenddiv"); 
  128. //获得游戏结束界面 
  129. var enddiv=document.getElementById("enddiv"); 
  130. //获得游戏结束后分数统计界面 
  131. var planscore=document.getElementById("planscore"); 
  132. //初始化分数 
  133. var scores=0; 
  134.  
  135. /* 
  136. 创建飞机类 
  137. */ 
  138. function plan(hp,X,Y,sizeX,sizeY,score,dietime,sudu,boomimage,imagesrc){ 
  139. this.planX=X; 
  140. this.planY=Y; 
  141. this.imagenode=null
  142. this.planhp=hp; 
  143. this.planscore=score; 
  144. this.plansizeX=sizeX; 
  145. this.plansizeY=sizeY; 
  146. this.planboomimage=boomimage; 
  147. this.planisdie=false
  148. this.plandietimes=0; 
  149. this.plandietime=dietime; 
  150. this.plansudu=sudu; 
  151. //行为 
  152. /* 
  153. 移动行为 
  154. */ 
  155. this.planmove=function(){ 
  156. if(scores<=50000){ 
  157. this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu+"px"
  158. else if(scores>50000&&scores<=100000){ 
  159. this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu+1+"px"
  160. else if(scores>100000&&scores<=150000){ 
  161. this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu+2+"px"
  162. else if(scores>150000&&scores<=200000){ 
  163. this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu+3+"px"
  164. else if(scores>200000&&scores<=300000){ 
  165. this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu+4+"px"
  166. else
  167. this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu+5+"px"
  168. this.init=function(){ 
  169. this.imagenode=document.createElement("img"); 
  170. this.imagenode.style.left=this.planX+"px"
  171. this.imagenode.style.top=this.planY+"px"
  172. this.imagenode.src=imagesrc; 
  173. mainDiv.appendChild(this.imagenode); 
  174. this.init(); 
  175.  
  176. /* 
  177. 创建子弹类 
  178. */ 
  179. function bullet(X,Y,sizeX,sizeY,imagesrc){ 
  180. this.bulletX=X; 
  181. this.bulletY=Y; 
  182. this.bulletimage=null
  183. this.bulletattach=1; 
  184. this.bulletsizeX=sizeX; 
  185. this.bulletsizeY=sizeY; 
  186. //行为 
  187. /* 
  188. 移动行为 
  189. */ 
  190. this.bulletmove=function(){ 
  191. this.bulletimage.style.top=this.bulletimage.offsetTop-20+"px"
  192. this.init=function(){ 
  193. this.bulletimage=document.createElement("img"); 
  194. this.bulletimage.style.left= this.bulletX+"px"
  195. this.bulletimage.style.top= this.bulletY+"px"
  196. this.bulletimage.src=imagesrc; 
  197. mainDiv.appendChild(this.bulletimage); 
  198. this.init(); 
  199.  
  200. /* 
  201. 创建单行子弹类 
  202. */ 
  203. function oddbullet(X,Y){ 
  204. bullet.call(this,X,Y,6,14,"../image/bullet1.png"); 
  205.  
  206. /* 
  207. 创建敌机类 
  208. */ 
  209. function enemy(hp,a,b,sizeX,sizeY,score,dietime,sudu,boomimage,imagesrc){ 
  210. plan.call(this,hp,random(a,b),-100,sizeX,sizeY,score,dietime,sudu,boomimage,imagesrc); 
  211. //产生min到max之间的随机数 
  212. function random(min,max){ 
  213. return Math.floor(min+Math.random()*(max-min)); 
  214.  
  215. /* 
  216. 创建本方飞机类 
  217. */ 
  218. function ourplan(X,Y){ 
  219. var imagesrc="../image/我的飞机.gif"
  220. plan.call(this,1,X,Y,66,80,0,660,0,"../image/本方飞机爆炸.gif",imagesrc); 
  221. this.imagenode.setAttribute('id','ourplan'); 
  222.  
  223. /* 
  224. 创建本方飞机 
  225. */ 
  226. var selfplan=new ourplan(120,485); 
  227. //移动事件 
  228. var ourPlan=document.getElementById('ourplan'); 
  229. var yidong=function(){ 
  230. var oevent=window.event||arguments[0]; 
  231. var chufa=oevent.srcElement||oevent.target; 
  232. var selfplanX=oevent.clientX-500; 
  233. var selfplanY=oevent.clientY; 
  234. ourPlan.style.left=selfplanX-selfplan.plansizeX/2+"px"
  235. ourPlan.style.top=selfplanY-selfplan.plansizeY/2+"px"
  236. // document.getElementsByTagName('img')[0].style.left=selfplanX-selfplan.plansizeX/2+"px"; 
  237. // document.getElementsByTagName('img')[0]..style.top=selfplanY-selfplan.plansizeY/2+"px"; 
  238. /* 
  239. 暂停事件 
  240. */ 
  241. var number=0; 
  242. var zanting=function(){ 
  243. if(number==0){ 
  244. suspenddiv.style.display="block"
  245. if(document.removeEventListener){ 
  246. mainDiv.removeEventListener("mousemove",yidong,true); 
  247. bodyobj.removeEventListener("mousemove",bianjie,true); 
  248. else if(document.detachEvent){ 
  249. mainDiv.detachEvent("onmousemove",yidong); 
  250. bodyobj.detachEvent("onmousemove",bianjie); 
  251. clearInterval(set); 
  252. number=1; 
  253. else
  254. suspenddiv.style.display="none"
  255. if(document.addEventListener){ 
  256. mainDiv.addEventListener("mousemove",yidong,true); 
  257. bodyobj.addEventListener("mousemove",bianjie,true); 
  258. else if(document.attachEvent){ 
  259. mainDiv.attachEvent("onmousemove",yidong); 
  260. bodyobj.attachEvent("onmousemove",bianjie); 
  261. set=setInterval(start,20); 
  262. number=0; 
  263. //判断本方飞机是否移出边界,如果移出边界,则取消mousemove事件,反之加上mousemove事件 
  264. var bianjie=function(){ 
  265. var oevent=window.event||arguments[0]; 
  266. var bodyobjX=oevent.clientX; 
  267. var bodyobjY=oevent.clientY; 
  268. if(bodyobjX<505||bodyobjX>815||bodyobjY<0||bodyobjY>568){ 
  269. if(document.removeEventListener){ 
  270. mainDiv.removeEventListener("mousemove",yidong,true); 
  271. else if(document.detachEvent){ 
  272. mainDiv.detachEvent("onmousemove",yidong); 
  273. else
  274. if(document.addEventListener){ 
  275. mainDiv.addEventListener("mousemove",yidong,true); 
  276. else if(document.attachEvent){ 
  277. mainDiv.attachEvent("nomousemove",yidong); 
  278. //暂停界面重新开始事件 
  279. //function chongxinkaishi(){ 
  280. // location.reload(true); 
  281. // startdiv.style.display="none"; 
  282. // maindiv.style.display="block"; 
  283. //} 
  284. var bodyobj=document.getElementsByTagName("body")[0]; 
  285. if(document.addEventListener){ 
  286. //为本方飞机添加移动和暂停 
  287. mainDiv.addEventListener("mousemove",yidong,true); 
  288. //为本方飞机添加暂停事件 
  289. selfplan.imagenode.addEventListener("click",zanting,true); 
  290. //为body添加判断本方飞机移出边界事件 
  291. bodyobj.addEventListener("mousemove",bianjie,true); 
  292. //为暂停界面的继续按钮添加暂停事件 
  293. suspenddiv.getElementsByTagName("button")[0].addEventListener("click",zanting,true); 
  294. // suspenddiv.getElementsByTagName("button")[1].addEventListener("click",chongxinkaishi,true); 
  295. //为暂停界面的返回主页按钮添加事件 
  296. suspenddiv.getElementsByTagName("button")[2].addEventListener("click",jixu,true); 
  297. else if(document.attachEvent){ 
  298. //为本方飞机添加移动 
  299. mainDiv.attachEvent("onmousemove",yidong); 
  300. //为本方飞机添加暂停事件 
  301. selfplan.imagenode.attachEvent("onclick",zanting); 
  302. //为body添加判断本方飞机移出边界事件 
  303. bodyobj.attachEvent("onmousemove",bianjie); 
  304. //为暂停界面的继续按钮添加暂停事件 
  305. suspenddiv.getElementsByTagName("button")[0].attachEvent("onclick",zanting); 
  306. // suspenddiv.getElementsByTagName("button")[1].attachEvent("click",chongxinkaishi,true); 
  307. //为暂停界面的返回主页按钮添加事件 
  308. suspenddiv.getElementsByTagName("button")[2].attachEvent("click",jixu,true); 
  309. //初始化隐藏本方飞机 
  310. selfplan.imagenode.style.display="none"
  311.  
  312. /* 
  313. 敌机对象数组 
  314. */ 
  315. var enemys=[]; 
  316.  
  317. /* 
  318. 子弹对象数组 
  319. */ 
  320. var bullets=[]; 
  321. var mark=0; 
  322. var mark1=0; 
  323. var backgroundPositionY=0; 
  324. /* 
  325. 开始函数 
  326. */ 
  327. function start(){ 
  328. mainDiv.style.backgroundPositionY=backgroundPositionY+"px"
  329. backgroundPositionY+=0.5; 
  330. if(backgroundPositionY==568){ 
  331. backgroundPositionY=0; 
  332. mark++; 
  333. /* 
  334. 创建敌方飞机 
  335. */ 
  336.  
  337. if(mark==20){ 
  338. mark1++; 
  339. //中飞机 
  340. if(mark1%5==0){ 
  341. enemys.push(new enemy(6,25,274,46,60,5000,360,random(1,3),"../image/中飞机爆炸.gif","../image/enemy3_fly_1.png")); 
  342. //大飞机 
  343. if(mark1==20){ 
  344. enemys.push(new enemy(12,57,210,110,164,30000,540,1,"../image/大飞机爆炸.gif","../image/enemy2_fly_1.png")); 
  345. mark1=0; 
  346. //小飞机 
  347. else
  348. enemys.push(new enemy(1,19,286,34,24,1000,360,random(1,4),"../image/小飞机爆炸.gif","../image/enemy1_fly_1.png")); 
  349. mark=0; 
  350.  
  351. /* 
  352. 移动敌方飞机 
  353. */ 
  354. var enemyslen=enemys.length; 
  355. for(var i=0;i<enemyslen;i++){ 
  356. if(enemys[i].planisdie!=true){ 
  357. enemys[i].planmove(); 
  358. /* 
  359. 如果敌机超出边界,删除敌机 
  360. */ 
  361. if(enemys[i].imagenode.offsetTop>568){ 
  362. mainDiv.removeChild(enemys[i].imagenode); 
  363. enemys.splice(i,1); 
  364. enemyslen--; 
  365. //当敌机死亡标记为true时,经过一段时间后清除敌机 
  366. if(enemys[i].planisdie==true){ 
  367. enemys[i].plandietimes+=20; 
  368. if(enemys[i].plandietimes==enemys[i].plandietime){ 
  369. mainDiv.removeChild(enemys[i].imagenode); 
  370. enemys.splice(i,1); 
  371. enemyslen--; 
  372.  
  373. /* 
  374. 创建子弹 
  375. */ 
  376. if(mark%5==0){ 
  377. bullets.push(new oddbullet(parseInt(selfplan.imagenode.style.left)+31,parseInt(selfplan.imagenode.style.top)-10)); 
  378.  
  379. /* 
  380. 移动子弹 
  381. */ 
  382. var bulletslen=bullets.length; 
  383. for(var i=0;i<bulletslen;i++){ 
  384. bullets[i].bulletmove(); 
  385. /* 
  386. 如果子弹超出边界,删除子弹 
  387. */ 
  388. if(bullets[i].bulletimage.offsetTop<0){ 
  389. mainDiv.removeChild(bullets[i].bulletimage); 
  390. bullets.splice(i,1); 
  391. bulletslen--; 
  392.  
  393. /* 
  394. 碰撞判断 
  395. */ 
  396. for(var k=0;k<bulletslen;k++){ 
  397. for(var j=0;j<enemyslen;j++){ 
  398. //判断碰撞本方飞机 
  399. if(enemys[j].planisdie==false){ 
  400. if(enemys[j].imagenode.offsetLeft+enemys[j].plansizeX>=selfplan.imagenode.offsetLeft&&enemys[j].imagenode.offsetLeft<=selfplan.imagenode.offsetLeft+selfplan.plansizeX){ 
  401. if(enemys[j].imagenode.offsetTop+enemys[j].plansizeY>=selfplan.imagenode.offsetTop+40&&enemys[j].imagenode.offsetTop<=selfplan.imagenode.offsetTop-20+selfplan.plansizeY){ 
  402. //碰撞本方飞机,游戏结束,统计分数 
  403. selfplan.imagenode.src="../image/本方飞机爆炸.gif"
  404. enddiv.style.display="block"
  405. planscore.innerHTML=scores; 
  406. if(document.removeEventListener){ 
  407. mainDiv.removeEventListener("mousemove",yidong,true); 
  408. bodyobj.removeEventListener("mousemove",bianjie,true); 
  409. else if(document.detachEvent){ 
  410. mainDiv.detachEvent("onmousemove",yidong); 
  411. bodyobj.removeEventListener("mousemove",bianjie,true); 
  412. clearInterval(set); 
  413. //判断子弹与敌机碰撞 
  414. if((bullets[k].bulletimage.offsetLeft+bullets[k].bulletsizeX>enemys[j].imagenode.offsetLeft)&&(bullets[k].bulletimage.offsetLeft<enemys[j].imagenode.offsetLeft+enemys[j].plansizeX)){ 
  415. if(bullets[k].bulletimage.offsetTop<=enemys[j].imagenode.offsetTop+enemys[j].plansizeY&&bullets[k].bulletimage.offsetTop+bullets[k].bulletsizeY>=enemys[j].imagenode.offsetTop){ 
  416. //敌机血量减子弹攻击力 
  417. enemys[j].planhp=enemys[j].planhp-bullets[k].bulletattach; 
  418. //敌机血量为0,敌机图片换为爆炸图片,死亡标记为true,计分 
  419. if(enemys[j].planhp==0){ 
  420. scores=scores+enemys[j].planscore; 
  421. scorelabel.innerHTML=scores; 
  422. enemys[j].imagenode.src=enemys[j].planboomimage; 
  423. enemys[j].planisdie=true
  424. //删除子弹 
  425. mainDiv.removeChild(bullets[k].bulletimage); 
  426. bullets.splice(k,1); 
  427. bulletslen--; 
  428. break
  429. /* 
  430. 开始游戏按钮点击事件 
  431. */ 
  432. var set; 
  433. function begin(){ 
  434.  
  435. startdiv.style.display="none"
  436. mainDiv.style.display="block"
  437. selfplan.imagenode.style.display="block"
  438. scorediv.style.display="block"
  439. /* 
  440. 调用开始函数 
  441. */ 
  442. set=setInterval(start,20); 
  443. //游戏结束后点击继续按钮事件 
  444. function jixu(){ 
  445. location.reload(true); 
  446. </script> 
  447. </body> 
  448. </html> 

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选