原生JS实现飞机大战小游戏

本文实例为大家分享了JS实现飞机大战小游戏的具体代码,供大家参考,具体内容如下

<html>

<head>

<title> 飞机大战 </title>

<style type="text/css">

*{margin:0;padding:0;font-family:"Microsoft yahei"}

body{overflow:hidden;;}

</style>

</head>

<body>

<script>

window.onload = function(){

Game.exe();

};

var Game = {

//启动程序

exe :function(){

document.body.style.background = '#fff';

var oDiv = document.createElement('div');

oDiv.id = 'GameBox';

oDiv.style.cssText = 'width:600px;height:500px;border:10px solid #999;margin:50px auto;font-family:"Microsoft yahei";text-align:center;position:relative;overflow:hidden;background:#fff';

document.body.appendChild(oDiv);

this.init();

},

score : 0 ,

ifEnd : false,

//初始化

init: function(){

var This = this;

var oDiv = document.getElementById('GameBox');

oDiv.innerHTML = '';

Game.score = 0;

Game.ifEnd = false;

var oH = document.createElement('h1');

oH.innerHTML = '飞机大战 v1.0';

oH.style.cssText = 'color:#555555;font-size:30px;padding-top:50px;';

oDiv.appendChild( oH );

for (var i=0;i<4 ;i++ )

{

var oP = document.createElement('p');

oP.index = i;

oP.style.cssText = 'font-size:18px;color:white;width:180px;height:50px;margin:40px auto;text-align:center;background:#999;line-height:40px;font-family:"Microsoft yahei";font-weight:bold;cursor:pointer;'

var html = '';

oP.onmouseenter = function(){

this.style.background = '#ff9933';

this.style.color = '##ff6600'

};

oP.onmouseleave = function(){

this.style.background = '#999';

this.style.color = 'white'

};

oP.onclick = function( e ){

e = e || window.event;

This.start( this.index , oDiv , e );

};

switch( i ){

case 0:

html = '简单难度';

break;

case 1:

html = '中等难度';

break;

case 2:

html = '困难难度';

break;

case 3:

html = '小天才附体';

break;

}

oP.innerHTML = html;

oDiv.appendChild(oP);

};

},

//游戏开始

start : function( index , oGameBox , e ){

oGameBox.innerHTML = '';

var oS = document.createElement('span');

oS.innerHTML = this.score;

oS.style.cssText = 'position:absolute;left:20px;top:20px;font-size:14px;color:black;';

oGameBox.appendChild( oS );

this.plane( oGameBox , e ,index );

this.enemy( oGameBox ,oS ,index );

},

//关于飞机

plane : function( oGameBox , e ,index ){

var x = e.pageX;

y = e.pageY;

var oPlane = new Image();

oPlane.src = 'images/plane.png';

oPlane.width = 60;

oPlane.height = 36;

oPlane.id = 'plane';

var tY = oGameBox.offsetTop+parseInt(oGameBox.style.borderWidth)+oPlane.height/2;

var lX = oGameBox.offsetLeft+parseInt(oGameBox.style.borderWidth)+oPlane.width/2;

window.onresize = function(){

lX = oGameBox.offsetLeft+parseInt(oGameBox.style.borderWidth)+oPlane.width/2;

};

var top = y- tY;

var left = x- lX;

oPlane.style.cssText = 'display:block;position:absolute;top:'+top+'px;left:'+left+'px;';

oGameBox.appendChild( oPlane );

var leftMin = - oPlane.width/2;

var leftMax = oGameBox.clientWidth - oPlane.width/2;

var topMin = 0;

var topMax = oGameBox.clientHeight - oPlane.height;

document.onmousemove = function(e){

if( !Game.ifEnd )

{

e = e || window.event;

var top = e.pageY -tY;

var left = e.pageX -lX;

top = Math.min( top , topMax );//取参数里最小的if( top > topMax )top = topMax;

top = Math.max( top ,topMin );//取参数里最大的

left = Math.min( left , leftMax );//取参数里最小的if( top > topMax )top = topMax;

left = Math.max( left ,leftMin );

oPlane.style.left = left + 'px';

oPlane.style.top = top + 'px';

}

};

this.biu( oPlane , oGameBox ,index );

},

biu : function( oPlane , oGameBox ,index ){

var speed ;

switch ( index )

{

case 0:

speed = 30;

break;

case 1:

speed = 40;

break;

case 2:

speed = 50;

break;

case 3:

speed = 10;

break;

}

this.BiuTimer = setInterval(function(){

var oBiu = new Image();

oBiu.src = 'images/bullet.png';

oBiu.width = 6;

oBiu.height = 22;

oBiu.className = 'bullet';

var top = oPlane.offsetTop - oBiu.height +3 ;

var left = oPlane.offsetLeft + oPlane.width/2 -oBiu.width/2;

oBiu.style.cssText = 'position:absolute;top:'+top+'px;left:'+left+'px;';

oGameBox.appendChild( oBiu );

oBiu.timer = setInterval( function(){

if( !oBiu.parentNode){

clearInterval( oBiu.timer );

}

oBiu.style.top = oBiu.offsetTop - 10 + 'px';

if( oBiu.offsetTop < -oBiu.height ){

clearInterval( oBiu.timer );

oBiu.parentNode.removeChild( oBiu );

}

}, 13 );

} ,speed );

},

enemy : function( oGameBox ,oS , index ){

var a , x;

switch ( index )

{

case 0:

a = 1;

x = 500;

break;

case 1:

a = 2;

x = 300;

break;

case 2:

a = 3;

x = 200;

break;

case 3:

a = 5;

x = 100;

break;

}

this.EnemyTimer = setInterval( function(){

var oEnemy = new Image();

oEnemy.src = 'images/enemy.png';

oEnemy.width = 23;

oEnemy.height = 30;

var lMin = 0;

var lMax = oGameBox.clientWidth - oEnemy.width;

var left = Math.random()*(lMax-lMin) + lMin;

oEnemy.style.cssText = 'position:absolute;top: -'+(-oEnemy.height)+'px; left:'+left+'px;';

oGameBox.appendChild( oEnemy );

var b = Math.random() * a + 1 ;

oEnemy.timer = setInterval(function(){

oEnemy.style.top = oEnemy.offsetTop + b + 'px';//敌军的下落速度

if( oEnemy.offsetTop >= oGameBox.clientHeight ){

clearInterval( oEnemy.timer );

oEnemy.parentNode.removeChild( oEnemy );

}

},13);

//和子弹的碰撞监测

var allBiu = Game.getClass('bullet');

oEnemy.pzBiu = setInterval(function(){

for(var i = 0;i < allBiu.length;i++)

{

if( Game.boom( oEnemy ,allBiu[i]))

{

Game.score ++;

oS.innerHTML = Game.score;

oEnemy.src = 'images/boom.png';

clearInterval( oEnemy.pzBiu );

clearInterval( oEnemy.pzPlane );

allBiu[i].parentNode.removeChild( allBiu[i] );

setTimeout(function(){

if( oEnemy.parentNode ){

oEnemy.parentNode.removeChild( oEnemy );

};

},300);

break;

}

}

},50);

//和战机的碰撞监测

var oPlane = document.getElementById('plane');

oEnemy.pzPlane = setInterval(function(){

if( Game.ifEnd ){

clearInterval( oEnemy.pzPlane);

}

if( Game.boom( oEnemy , oPlane))

{

Game.ifEnd = true;

clearInterval( oEnemy.pzPlane);

clearInterval( Game.BiuTimer);

clearInterval( Game.EnemyTimer);

oEnemy.src = 'images/boom.png';

oPlane.src = 'images/boom2.png';

setTimeout(function(){

Game.over( oGameBox );

},300);

}

},50);

} , x );//敌军生成速度

},

//碰撞监测

boom : function( obj1 , obj2 ){

var T1 = obj1.offsetTop;

var B1 = T1 + obj1.clientHeight;

var L1 = obj1.offsetLeft;

var R1 = L1 + obj1.clientWidth;

var T2 = obj2.offsetTop;

var B2 = T2 + obj2.clientHeight;

var L2 = obj2.offsetLeft;

var R2 = L2 + obj2.clientWidth;

if ( R2 < L1 || L2 > R1 || B2 < T1 || T2 > B1 )

{

return false; // 没撞上

}

else

{

return true; // 撞上了

}

},

//游戏结束

over : function( oGameBox ){

oGameBox.innerHTML = '';

var oDiv = document.createElement('div');

oDiv.style.cssText = 'width:300px;height:200px;margin:100px auto;background:#e0e0e0;border:5px solid #858585';

var oT = document.createElement('h3');

oT.innerHTML = 'Game Over';

oT.style.cssText = 'padding-top:50px;font-size:25px;';

var oP1 = document.createElement('p');

oP1.innerHTML = '您的得分是:' + '<span style="color:#ffffff;font-weight:bold;">' + this.score + '</span>';

oP1.style.cssText = 'font-size:16px;color:#fff;';

var oRestart = document.createElement('div');

oRestart.style.cssText = 'width:100px;height:40px;font-size:14px;text-align:center;line-height:40px;color:white;background:#999;margin:20px auto;cursor:pointer;';

oRestart.innerHTML = '重新开始';

oRestart.onclick = function(){

Game.init();

};

oDiv.appendChild( oT );

oDiv.appendChild( oP1 );

oDiv.appendChild( oRestart );

oGameBox.appendChild( oDiv );

},

//getclass 方法

getClass : function( cName , parent ){

parent = parent || document;

if( document.getElementsByClassName ){

return parent.getElementsByClassName(cName);

}

else

{

var all = parent.getElementsByTagName('*');

var arr = [];

for( var i = 0;i<all.length;i++ )

{

var arrClass = all.className.split(' ');

for( var j = 0; j < arrClass.length;j++ ){

if( arrClass[j] == cName )

{

arr.push( all[i]);

break;

}

}

}

return arr;

}

},

};

</script>

</body>

</html>

效果图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 原生JS实现飞机大战小游戏 的全部内容, 来源链接: utcz.com/p/220723.html

回到顶部