HTML5全民飞机大战网页小游戏源码,html+js实现飞机大战网页小游戏,玩法比较为简单,左右移动鼠标打击,不让前面的小飞机经过。飞机掉落速度越来越快,游戏结束后有分数显示,可以用来做分数比拼。游玩演示地址http://www.bokequ.com/show/youxi/3/
1、html页面代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>HTML5全民飞机大战小游戏 - bokequ.com</title> <style> html { width: 100%; height: 100%; margin: 0; padding: 0; position: relative; background-image: linear-gradient(#2C3E50,#4CA1AF); } .canvasbig { position: absolute; left: calc(50% - 260px); top: calc(50% - 400px); width: 520px; height: 800px; } .canvasdiv { position: absolute; cursor: pointer; left: 160px; top: 500px; width: 200px; height: 53px; background-image: url(img/starting.png); } .none { display: none; } </style> </head> <body> <!-- <script src="js/circle.js"></script> --> <div class="canvasbig"> <div class="canvasdiv"></div> <canvas width="520" height="800" id="canvas1"></canvas> </div> <script src="js/index.js"></script> </body> </html>
2、js代码
var canvas1 = document.getElementById("canvas1"); var context = canvas1.getContext('2d'); var canvasbig = document.getElementsByClassName("canvasbig")[0]; //背景图片 var bg = new Image(); bg.src = "img/bg.jpg"; //全民飞机大战标题 var starthead = new Image(); starthead.src = "img/starthead.png"; //加载时候的狗子和文字 var load = new Image(); var loadnum = 1, loadtime = 0, loadrect = 1; var loadtextblur = true, loadtextnum = -1, pointnum = 1; //我方战斗机 var myplane = new Image(); myplane.src = "img/myplane1.png"; var myplaneX = canvas1.width / 2, myplaneY = 730; //战斗机子弹 var bullet = new Image(); bullet.src = "img/bullet.png"; var bullettime = 0, bulletnum = 0, bulletarr = []; //敌机 var enemytime = 0, enemyarr = []; var enemy1 = new Image(); enemy1.src = `img/enemy1.png`; var enemy2 = new Image(); enemy2.src = `img/enemy2.png`; var enemy3 = new Image(); enemy3.src = `img/enemy3.png`; var enemy4 = new Image(); enemy4.src = `img/enemy4.png`; var enemyall = [enemy1, enemy2, enemy3, enemy4]; //战斗机爆炸 var myplane1boom = new Image(); var myboomnum = 1, myboomtime = 0; //敌机爆炸 var enemychangearr = []; //boss警告 var warning1 = new Image(); warning1.src = "img/warning1.png" var warning2 = new Image(); warning2.src = "img/warning2.png"; var warningtime = 0, warningchange = 0; //boss出场背景 var bossbg = new Image(); bossbg.src = "img/bg2.jpg"; var boss = new Image(); boss.src = "img/planeboss.png"; //boss改变飞机速度 var bossattacktime = 0; var bossattacknum = 1; var obj = { gamestart: 1, gameload: 0, gamerun: 0, gameover: 0, dead: 0, score: 0, life: 3, bgy1: -854, bgy2: 0, warnon: 0, bosstime: 0, bossattack: 0, bgon: function () { context.drawImage(bg, 0, this.bgy1, 520, 854); context.drawImage(bg, 0, this.bgy2, 520, 854); }, bgchange: function () { this.bgy1++; this.bgy2++; if (this.bgy1 == 0) { this.bgy1 = -854; this.bgy2 = 0; } }, scoring: function () { var gradient = context.createLinearGradient(0, 0, 120, 60); gradient.addColorStop(0, '#ff9569'); gradient.addColorStop(1, '#e92758'); context.font = '30px sans-serif'; context.fillStyle = gradient; context.fillText("SCORE:" + this.score, 10, 50); }, lifeing: function () { context.font = '30px sans-serif'; context.fillStyle = "#D28140"; context.fillText("LIFE:" + this.life, 400, 50); if (obj.dead == 1 && myboomnum == 9 && obj.life > 0) { obj.dead = 0; bullettime = 0; bulletnum = 0; bulletarr = []; enemytime = 0; enemyarr = []; myboomnum = 1; myboomtime = 0; enemychangearr = []; myplane1boom.src = `img/myplane1boom${myboomnum}.png`; } else if (obj.dead == 1 && obj.life == 0) { obj.gameover = 1; } }, gameovering: function () { if (obj.gameover == 1) { obj.gamestart = 1; obj.gameover = 0; obj.dead = 0; obj.gamerun = 0; } }, starting: function () { canvasdiv.className = "canvasdiv"; obj.life = 3; obj.score = 0; loadnum = 1; loadtime = 0; loadrect = 1; loadtextblur = true; loadtextnum = -1; pointnum = 1; myplaneX = canvas1.width / 2; myplaneY = 730; bullettime = 0; bulletnum = 0; bulletarr = []; enemytime = 0; enemyarr = []; myboomnum = 1; myboomtime = 0; enemychangearr = []; warningtime = 0; warningchange = 0; bossattacktime = 0; bossattacknum = 1; obj.bossbgy1 = -2420, obj.bossbgy2 = -1640, obj.bossbgy3 = -860, obj.bg2boss = -262, obj.bosstimeblur = true, obj.bossattack = 0; context.drawImage(starthead, 110, 200); }, loading: function () { loadtime++; loadrect++; if (loadtime == 5) { loadtime = 0; loadnum++; if (loadnum == 10) { loadnum = 1; } load.src = `img/load${loadnum}.png`; } context.beginPath(); context.fillStyle = 'white'; context.fillRect(0, 0, 520, 800); var gradient = context.createLinearGradient(20, 500, 397, 30); gradient.addColorStop(0, '#29bdd9'); gradient.addColorStop(1, '#276ace'); context.fillStyle = gradient; context.fillRect(20, 500, loadrect, 30); context.closePath(); context.drawImage(load, loadrect + 20, 480, 102, 72); }, loadtext: function () { if (loadtextblur == false) { loadtextnum--; } else if (loadtextblur == true) { loadtextnum += 2; } context.beginPath(); context.font = '40px sans-serif'; context.fillStyle = 'black'; context.fillText("加载中 ", 50, 450); context.beginPath(); context.font = '80px sans-serif'; if (pointnum == 1) { context.fillText(". ", 200, 450 - loadtextnum); context.fillText(". ", 240, 450); context.fillText(". ", 280, 450); if (loadtextnum < 0) { pointnum = 2; loadtextnum = 0; loadtextblur = true; } else if (loadtextnum > 39) { loadtextblur = false; } } else if (pointnum == 2) { context.fillText(". ", 200, 450); context.fillText(". ", 240, 450 - loadtextnum); context.fillText(". ", 280, 450); if (loadtextnum < 0) { pointnum = 3; loadtextnum = 0; loadtextblur = true; } else if (loadtextnum > 39) { loadtextblur = false; } } else if (pointnum == 3) { context.fillText(". ", 200, 450); context.fillText(". ", 240, 450); context.fillText(". ", 280, 450 - loadtextnum); if (loadtextnum < 0) { pointnum = 1; loadtextnum = 0; loadtextblur = true; } else if (loadtextnum > 39) { loadtextblur = false; } } context.closePath(); }, myplane: function (e) { myplaneX = e.offsetX; myplaneY = e.offsetY; context.drawImage(myplane, myplaneX - myplane.width / 2, myplaneY - myplane.height / 2); }, bulleton: function () { bullettime++; var bulletX = myplaneX - bullet.width / 2; var bulletY = myplaneY - myplane.height / 2 - bullet.height; var num; if (obj.bossattack == 1) { num = 10 }else{ num = 20 } if (bullettime >= num) { var changearr = [bulletX, bulletY, 0]; bulletarr.push(changearr); bullettime = 0; } }, bulletchange: function () { var result = []; for (var i = 0; i < bulletarr.length; i++) { if (bulletarr[i][1] - bulletarr[i][2] >= 0) { context.drawImage(bullet, bulletarr[i][0], bulletarr[i][1] - bulletarr[i][2]); bulletarr[i][2] += 4; result.push(bulletarr[i]); } } bulletarr = result; }, enemy: function () { enemytime++; var enemynum = parseInt(Math.random() * 4); if (obj.bossattack == 1) { num = 10 }else{ num = 25 } if (enemytime >= num) { if (enemynum == 3 && Math.random() < 0.9) { return; } else { var enemylife = 1 if (enemynum == 3) { enemylife = 5 } var changearr = [Math.random() * 520 - enemyall[enemynum].width / 2, -enemyall[enemynum].height, 0, enemynum, enemylife]; enemyarr.push(changearr); enemytime = 0; } } }, enemychange: function () { var result = []; if (obj.bossattack == 1) { bossattacktime++; if (bossattacktime == 80) { bossattacknum += 0.05; bossattacktime = 0; } } for (let i = 0; i < enemyarr.length; i++) { if (enemyarr[i][1] + enemyarr[i][2] <= canvas1.height) { context.drawImage(enemyall[enemyarr[i][3]], enemyarr[i][0], enemyarr[i][1] + enemyarr[i][2]); if (enemyall[enemyarr[i][3]] == enemy4) { enemyarr[i][2] += 1.5* bossattacknum; } else { enemyarr[i][2] += 2* bossattacknum; } result.push(enemyarr[i]); } } enemyarr = result; }, myplaneboom: function () { obj.dead = 1; myboomtime++; if (myboomtime >= 10) { myplane1boom.src = `img/myplane1boom${myboomnum}.png`; myboomnum++; myboomtime = 0; } context.drawImage(myplane1boom, myplaneX - myplane.width / 2, myplaneY - myplane.height / 2); if (myboomnum == 9) { obj.life -= 1; bulletarr = []; enemyarr = []; myplaneX = canvas1.width / 2; myplaneY = 750; } }, myplaneisbroke: function () { for (let i = 0; i < enemyarr.length; i++) { if (enemyarr[i][0] < myplaneX - myplane.width / 2 && enemyarr[i][1] + enemyarr[i][2] < myplaneY - myplane.height / 2 + myplane.height) { if (enemyarr[i][0] + enemyall[enemyarr[i][3]].width > myplaneX - myplane.width / 2 && enemyarr[i][1] + enemyarr[i][2] + enemyall[enemyarr[i][3]].height > myplaneY - myplane.height / 2) { obj.myplaneboom(); } } else if (enemyarr[i][0] > myplaneX - myplane.width / 2 && enemyarr[i][1] + enemyarr[i][2] < myplaneY - myplane.height / 2 + myplane.height) { if (enemyarr[i][0] < myplaneX - myplane.width / 2 + myplane.width && enemyarr[i][1] + enemyarr[i][2] + enemyall[enemyarr[i][3]].height > myplaneY - myplane.height / 2) { obj.myplaneboom(); } } } }, enemyboom: function () { var result = []; for (let i = 0; i < enemychangearr.length; i++) { enemychangearr[i][3]++; if (enemychangearr[i][3] >= 10) { enemychangearr[i][5].src = `img/enemy${enemychangearr[i][2]}boom${enemychangearr[i][4]}.png`; enemychangearr[i][4]++; enemychangearr[i][3] = 0; } context.drawImage(enemychangearr[i][5], enemychangearr[i][0], enemychangearr[i][1]); if (enemychangearr[i][4] < 6) { result.push(enemychangearr[i]); } }; enemychangearr = result; }, enemyisbroke: function () { for (let i = 0; i < bulletarr.length; i++) { for (let x = 0; x < enemyarr.length; x++) { if (bulletarr[i][0] < enemyarr[x][0] && bulletarr[i][1] - bulletarr[i][2] < enemyarr[x][1] + enemyarr[x][2] + enemyall[enemyarr[x][3]].height && bulletarr[i][1] - bulletarr[i][2] > enemyarr[x][1] + enemyarr[x][2]) { if (bulletarr[i][0] + bullet.width > enemyarr[x][0]) { enemyarr[x][4]--; if (enemyarr[x][4] == 0) { var enemyboom = new Image(); enemychangearr.push([enemyarr[x][0], enemyarr[x][1] + enemyarr[x][2], enemyarr[x][3] + 1, 0, 1, enemyboom]); if (enemyarr[x][3] == 3) { obj.score += 10; } else { obj.score += 2; } enemyarr.splice(x, 1); } bulletarr.splice(i, 1); } } else if (bulletarr[i][0] > enemyarr[x][0] && bulletarr[i][1] - bulletarr[i][2] < enemyarr[x][1] + enemyarr[x][2] + enemyall[enemyarr[x][3]].height && bulletarr[i][1] - bulletarr[i][2] > enemyarr[x][1] + enemyarr[x][2]) { if (bulletarr[i][0] < enemyarr[x][0] + enemyall[enemyarr[x][3]].width) { enemyarr[x][4]--; if (enemyarr[x][4] == 0) { var enemyboom = new Image(); enemychangearr.push([enemyarr[x][0], enemyarr[x][1] + enemyarr[x][2], enemyarr[x][3] + 1, 0, 1, enemyboom]); if (enemyarr[x][3] == 3) { obj.score += 10; } else { obj.score += 2; } enemyarr.splice(x, 1); } bulletarr.splice(i, 1); } } } } }, warning: function () { warningchange++; warningtime++; if (warningtime >= 20) { context.drawImage(warning1, 150, 200); context.drawImage(warning2, 190, 400); if (warningtime >= 80) { warningtime = 0; } } if (warningchange == 500) { obj.warnon = 0; obj.bosstime = 1; } }, bossbgy1: -2420, bossbgy2: -1640, bossbgy3: -860, bg2boss: -262, bosstimeblur: true, bossbgon: function () { context.drawImage(bossbg, 0, this.bossbgy1) context.drawImage(bossbg, 0, this.bossbgy2); context.drawImage(bossbg, 0, this.bossbgy3); if (obj.bosstime == 1) { context.drawImage(boss, 0, this.bg2boss); } }, bossbgchange: function () { this.bossbgy1 += 2; this.bossbgy2 += 2; this.bossbgy3 += 2; this.bg2boss += 2; if (this.bg2boss == 800) { this.bosstime = 0; this.bossattack = 1; }; if (this.bossbgy3 == 800) { this.bossbgy1 = -1540; this.bossbgy2 = -760; this.bossbgy3 = 20; } }, // bossY : -262, // bossX : 0, // bossfirstime : 0, // bosssecondtime : 0, // beatboss : function(){ // context.drawImage(boss,this.bossX,this.bossY); // if(obj.bossY <= 0){ // obj.bossfirstime ++; // if( obj.bossfirstime == 4){ // obj.bossY++; // obj.bossfirstime = 0; // } // }else{ // obj.bosssecondtime++; // if(obj.bosssecondtime == 2){ // obj.bossX++; // obj.bossfirstime = 0; // } // } // }, gua: function () { enemychangearr = []; for (let x = 0; x < enemyarr.length; x++) { var enemyboom = new Image(); enemychangearr.push([enemyarr[x][0], enemyarr[x][1] + enemyarr[x][2], enemyarr[x][3] + 1, 0, 1, enemyboom]); } enemyarr = []; } } setInterval(function () { obj.bgon(); obj.bgchange(); if (obj.gamestart == 1) { obj.starting(); } if (obj.gameload == 1) { if (loadrect >= 397) { obj.gameload = 0; obj.gamerun = 1; } obj.loading(); obj.loadtext(); } if (obj.gamerun == 1) { if (obj.score >= 300 && obj.bosstimeblur == true) { obj.warnon = 1; obj.gua(); obj.bosstimeblur = false; } if (obj.bosstime == 1 || obj.bossattack == 1) { obj.bossbgon(); obj.bossbgchange(); } if (obj.dead == 0) { context.drawImage(myplane, myplaneX - myplane.width / 2, myplaneY - myplane.height / 2); if (obj.bosstime == 0 && obj.warnon == 0) { obj.enemy(); obj.enemychange(); } obj.bulleton(); obj.bulletchange(); if (obj.warnon == 1) { obj.warning(); } } obj.myplaneisbroke(); obj.enemyisbroke(); obj.enemyboom(); obj.lifeing(); obj.gameovering(); obj.scoring(); } }, 10) var canvasdiv = document.getElementsByClassName("canvasdiv")[0]; canvasdiv.onclick = function () { canvasdiv.className = "canvasdiv none"; obj.gamestart = 0; obj.gameload = 1; } canvas1.onmousemove = function (e) { if (obj.gamerun == 1 && obj.dead == 0) { obj.myplane(e); this.style.cursor = "none"; } else { this.style.cursor = ""; } } document.onkeydown = function (event) { if (event.keyCode == 8 && obj.gamerun == 1) { obj.gua(); }; }
HTML5全民飞机大战小游戏是一款突破经典的飞行射击类精品网页小游戏,鼠标操作。
评论