微前端架构如何改变企业的开发模式与效率提升
622
2022-11-13
Html 5 坦克大战(韩顺平版本)
html 5代码部分如下:
javascript部分代码如下:
//为了编程方便,我们定义两个颜色数组var heroColor=new Array("#BA9658","#FEF26E");var enmeyColor=new Array("#00A2B5","#00FEFE");//其它的敌人坦克,这里的扩展性,还是不错的.//定义一个炸弹类function Bomb(x,y){ this.x=x; this.y=y; this.isLive=true; //炸弹是否活的,默认true; //炸弹有一个生命值 this.blood=9; //减生命值 this.bloodDown=function(){ if(this.blood>0){ this.blood--; }else{ //说明炸弹死亡 this.isLive=false; } }}//子弹类//type表示:这颗子弹是敌人的,还是自己的//tank表示对象,说明这颗子弹,属于哪个坦克.function Bullet(x,y,direct,speed,type,tank){ this.x=x; this.y=y; this.direct=direct; this.speed=speed; this.timer=null; this.isLive=true; this.type=type; this.tank=tank; this.run=function run(){ //在该表这个子弹的坐标时,我们先判断子弹是否已经到边界 //子弹不前进,有两个逻辑,1.碰到边界,2. 碰到敌人坦克. if(this.x<=0||this.x>=400||this.y<=0||this.y>=300||this.isLive==false){ //子弹要停止. window.clearInterval(this.timer); //子弹死亡 this.isLive=false; if(this.type=="enemy"){ this.tank.bulletIsLive=false; } }else{ //这个可以去修改坐标 switch(this.direct){ case 0: this.y-=this.speed; break; case 1: this.x+=this.speed; break; case 2: this.y+=this.speed; break; case 3: this.x-=this.speed; break; } } document.getElementById("aa").innerText="子弹x="+this.x+" 子弹y="+this.y; }}//这是一个Tank类function Tank(x,y,direct,color){ this.x=x; this.y=y; this.speed=1; this.isLive=true; this.direct=direct; //一个坦克,需要两个颜色. this.color=color; //上移 this.moveUp=function(){ this.y-=this.speed; this.direct=0; } //向右 this.moveRight=function(){ this.x+=this.speed; this.direct=1; } //下移 this.moveDown=function(){ this.y+=this.speed; this.direct=2; } //左 this.moveLeft=function(){ this.x-=this.speed; this.direct=3; }}//定义一个Hero类 //x 表示坦克的 横坐标, y 表示纵坐标, direct 方向 function Hero(x,y,direct,color){ //下面两句话的作用是通过对象冒充,达到继承的效果 this.tank=Tank; this.tank(x,y,direct,color); //增加一个函数,射击敌人坦克. this.shotEnemy=function(){ //创建子弹, 子弹的位置应该和hero有关系,并且和hero的方向有关.!!! //this.x 就是当前hero的横坐标,这里我们简单的处理(细化) switch(this.direct){ case 0: heroBullet=new Bullet(this.x+9,this.y,this.direct,1,"hero",this); break; case 1: heroBullet=new Bullet(this.x+30,this.y+9,this.direct,1,"hero",this); break; case 2: heroBullet=new Bullet(this.x+9,this.y+30,this.direct,1,"hero",this); break; case 3: //右 heroBullet=new Bullet(this.x,this.y+9,this.direct,1,"hero",this); break; } //把这个子弹对象放入到数组中 -> push函数 heroBullets.push(heroBullet); //调用我们的子弹run, 50 是老师多次测试得到的一个结论., 这里技术难度比较大. //就算你工作过1-2年,你也未必想到, 下面启动方式,每个子弹的定时器是独立,如果按原来的方法 //则所有子弹共享一个定时器. var timer=window.setInterval("heroBullets["+(heroBullets.length-1)+"].run()",50); //把这个timer赋给这个子弹(js对象是引用传递!) heroBullets[heroBullets.length-1].timer=timer; } } //定义一个EnemyTank类 function EnemyTank (x,y,direct,color){ //也通过对象冒充,来继承Tank this.tank=Tank; this.count=0; this.bulletIsLive=true; this.tank(x,y,direct,color); this.run=function run(){ //判断敌人的坦克当前方向 switch(this.direct){ case 0: if(this.y>0){ this.y-=this.speed; } break; case 1: if(this.x+30<400){ this.x+=this.speed; } break; case 2: if(this.y+30<300){ this.y+=this.speed; } break; case 3: if(this.x>0){ this.x-=this.speed; } break; } //改变方向,走30次,再改变方向 if(this.count>30){ this.direct=Math.round(Math.random()*3);//随机生成 0,1,2,3 this.count=0; } this.count++; //判断子弹是否已经死亡,如果死亡,则增加新的一颗子弹 if(this.bulletIsLive==false){ //增子弹,这是需要考虑当前这个敌人坦克的方向,在增加子弹 switch(this.direct){ case 0: etBullet=new Bullet(this.x+9,this.y,this.direct,1,"enemy",this); break; case 1: etBullet=new Bullet(this.x+30,this.y+9,this.direct,1,"enemy",this); break; case 2: etBullet=new Bullet(this.x+9,this.y+30,this.direct,1,"enemy",this); break; case 3: //右 etBullet=new Bullet(this.x,this.y+9,this.direct,1,"enemy",this); break; } //把子弹添加到敌人子弹数组中 enemyBullets.push(etBullet); //启动新子弹run var mytimer=window.setInterval("enemyBullets["+(enemyBullets.length-1)+"].run()",50); enemyBullets[enemyBullets.length-1].timer=mytimer; this.bulletIsLive=true; } } } //画出自己的子弹,多说一句,你也可以把该函数封装到Hero类中 function drawHeroBullet(){ //现在要画出所有子弹 for( var i=0;i
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~