js 飞机大战
完整文件及代码可以在网盘下载,下载链接为:https://pan.baidu.com/s/1hs7sBUs 密码: d83x
飞机大战css定义:
<style> #container{ width:320px; height:568px; background: url(images/start.png); margin:20px auto; position: relative; overflow: hidden; } #container input{ width:120px; height: 38px; background: #ff6600; border:0; color:#fff; font-size:14px; font-family: 微软雅黑; position: absolute; left: 100px; bottom:50px; } #enddiv{ position: absolute; top: 210px; left: 75px; border: 1px solid gray; border-radius: 5px; text-align: center; background-color:#d7ddde; display: none; z-index: 2; } .plantext{ width: 160px; height: 30px; line-height: 30px; font-size: 16px; font-weight: bold; } #enddiv div{ width: 160px; height: 50px; } #enddiv div button{ margin-top:10px ; width: 90px; height: 30px; border: 1px solid gray; border-radius: 30px; } #scoretext{ margin: 0; font-family: arial; font-size:12px; font-weight: bold; color:#ff6600; position: absolute; left: 4px; top: 4px; z-index: 100; } </style>
飞机大战: HTML代码如下:
<div id="container"> <p id="scoretext"></p> <div id="enddiv"> <p class="plantext">游戏结束</p> <div><button onclick="restartGame()" id="restart">继续</button></div> </div> <input type="button" value="开始游戏" id="startBtn"> </div>
飞机大战 : 调用js
//中大型飞机射击次数未实现,gameover未实现 function startGame(container){ var startBtn = document.getElementById("startBtn"); startBtn.onclick = function(){ container.style.background = "url(images/background_1.png)"; this.style.display = "none"; bgMove(container); var score = 0; var myplan = new MyPlan(120,480,container); var middleEnemy = new MiddleEnemy(container,myplan.bullets,myplan,score); //中型飞机对象实例 var maxEnemy = new MaxEnemy(container,myplan.bullets,myplan,score);//大型飞机对象实例 var enemy = new Enemy(container,myplan.bullets,myplan,middleEnemy,maxEnemy,score); enemy.init(); } } var speed = 0; function bgMove(container){ setInterval(function(){ speed++; container.style.backgroundPosition = "0 " + speed + "px"; if(speed > 568){ speed = 0; } },15); } function gameOver(){ var enddiv = document.getElementById("enddiv"); var restart = document.getElementById("restart"); enddiv.style.display = "block"; restart.onclick = function(){ location.reload(); } } var score = 0; function getScore(num){ var scoretext = document.getElementById("scoretext"); score += num; scoretext.innerHTML = score + "分"; } onload = function(){ var container = document.getElementById("container"); startGame(container); }
飞机大战: 我方飞机创建:
Array.prototype.remove = function(value){ for(var i = 0; i < this.length; i++){ if(this[i] == value){ this.splice(i,1); } } } function MyPlan(x , y , container){ this.x = x; this.y = y; this.img = "images/my.gif"; this.container = container; this.bullets = []; this.createTimer; this.init(); } MyPlan.prototype = { init:function(){ this.create(); this.planMove(); this.bullets.push(this.plan); var that = this; this.createTimer = setInterval(function(){ that.createBullets(); },200); this.createBullets(); }, planMove:function(){ var that = this; this.container.onmousemove = function(e){ e = e || event; var maxLeft = that.container.offsetWidth - that.plan.offsetWidth; var maxTop = that.container.offsetHeight - that.plan.offsetHeight; var planX = Math.max(Math.min(e.clientX - that.container.offsetLeft - that.plan.offsetWidth / 2,maxLeft),0); var planY = Math.max(Math.min(e.clientY - that.container.offsetTop - that.plan.offsetHeight / 2,maxTop),0); that.plan.style.left = planX + "px"; that.plan.style.top = planY + "px"; } }, create:function(){ this.plan = document.createElement("img"); this.plan.src = this.img; this.plan.style.cssText = "position:absolute; top:" + this.y + "px; left:" + this.x + "px;"; this.container.appendChild(this.plan); }, createBullets:function(){ this.bull = document.createElement("img"); this.bull.src = "images/bullet1.png"; var bullX = this.plan.offsetLeft + this.plan.offsetWidth / 2 - 6 / 2; var bullY = this.plan.offsetTop - 14; this.bull.style.cssText = "position:absolute; top:" + bullY + "px; left:" + bullX + "px;"; this.container.appendChild(this.bull); this.bullets.push(this.bull); var bull = this.bull; //不能用that = this 对象冒充 闭包问题 var container = this.container; var bullets = this.bullets; this.bull.timer = setInterval(function(){ bull.style.top = bull.offsetTop - 3 + "px"; if(bull.offsetTop <= -14){ bullets.remove(bull); container.removeChild(bull); clearInterval(bull.timer); } },8); } }
飞机大战: 敌方基本飞机创建:
function Enemy(container,bullets,myplan,middleEnemy,maxEnemy,score){ this.container = container; this.img = "images/enemy1_fly_1.png"; this.createTime = 600; //创建敌机的间隔时间 this.bullets = bullets; this.dieImg = "images/enemy1_fly_3.gif"; this.width = 34; //敌机的宽度 this.height = 24; //敌机的高度 this.myplan = myplan; this.count = 1; //小型敌机创建个数 this.dieCount = 1; //敌机消灭需子弹打击次数 this.middleEnemy = middleEnemy; this.maxEnemy = maxEnemy; this.score = score; } Enemy.prototype = { init:function(){ var that = this; var middleEnemy = this.middleEnemy; var maxEnemy = this.maxEnemy; var count = 0; setInterval(function(){ that.create(); count++; if(count % 5 == 0){ middleEnemy.create(); } if(count % 30 == 0){ maxEnemy.create(); count = 1; } },this.createTime); }, create:function(){ this.enemy = document.createElement("img"); this.enemy.src = this.img; var enemyX = Math.random() * (this.container.offsetWidth - this.width); var enemyY = -1 * this.height; this.enemy.style.cssText = "position:absolute; left:" + enemyX + "px; top:" + enemyY + "px;"; this.container.appendChild(this.enemy); var enemy = this.enemy; this.data_hitCount = 0; var container = this.container; var bullets = this.bullets; var dieImg = this.dieImg; var myplan = this.myplan; var plan = this.myplan.plan; var createBullets = this.myplan.createBullets; var dieCount = this.dieCount; var isremove = true; //是否可以移除敌机 var score = this.score; var that = this; this.enemy.timer = setInterval(function(){ enemy.style.top = enemy.offsetTop + 3 + "px"; for(var i = 0; i < bullets.length; i++){ if(bullets[i].offsetLeft + bullets[i].offsetWidth > enemy.offsetLeft && bullets[i].offsetLeft < enemy.offsetLeft + enemy.offsetWidth){ if(bullets[i].offsetTop + bullets[i].offsetHeight > enemy.offsetTop && bullets[i].offsetTop < enemy.offsetTop + enemy.offsetHeight && isremove){ if(i == 0){ plan.src = "images/myover.gif"; container.onmousemove = null; clearInterval(myplan.createTimer); gameOver(); } else{ container.removeChild(bullets[i]); bullets.remove(bullets[i]); that.data_hitCount++; if(that.data_hitCount == dieCount){ isremove = false; enemy.src = dieImg; getScore(dieCount); setTimeout(function(){ container.removeChild(enemy); },300); } } } } } if(enemy.offsetTop >= container.offsetHeight){ container.removeChild(enemy); clearInterval(enemy.timer); } },30); } }
飞机大战: 其他敌机创建:
function MiddleEnemy(container,bullets,myplan,score){ Enemy.call(this,container,bullets,myplan,score); this.img = "images/enemy2_fly_1.png"; this.dieImg = "images/enemy2_fly_3.gif"; this.width = 46; //敌机的宽度 this.height = 60; //敌机的高度 this.dieCount = 5; } MiddleEnemy.prototype = Enemy.prototype; function MaxEnemy(container,bullets,myplan,score){ Enemy.call(this,container,bullets,myplan,score); this.img = "images/enemy3_fly_1.png"; this.dieImg = "images/enemy3_fly_3.gif"; this.width = 110; //敌机的宽度 this.height = 164; //敌机的高度 this.dieCount = 10; } MaxEnemy.prototype = Enemy.prototype;
效果图如图所示:
我要成为酷酷的人http://www.cnblogs.com/CooLLYP/