js实例--飞机大战

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8"/>
        <title>飞机大战</title>
        <style>
            #did{
                width:500px;height:500px;
                background:url("./images/bg2.png") no-repeat 0px -1036px;
                position:relative;overflow:hidden;}
            #gid{position:absolute;top:350px;left:100px;}
            #p0,#p1,#p2,#p3,#p4,#e1,#e2,#e3,#boom{position:absolute;}
        </style>
    </head>
    <body>
        <h2>JavaScript实例:飞机大战</h2>
        <div id="did">
            <img id="p0" src="./images/eshot.png" style="display:none;"/>
            <img id="p1" src="./images/eshot.png" style="display:none;"/>
            <img id="p2" src="./images/eshot.png" style="display:none;"/>
            <img id="p3" src="./images/eshot.png" style="display:none;"/>
            <img id="p4" src="./images/eshot.png" style="display:none;"/>

            <img id="e1" src="./images/e1.png" style="display:none;"/>
            <img id="e2" src="./images/e2.png" style="display:none;"/>
            <img id="e3" src="./images/e3.png" style="display:none;"/>

            <img id="boom" src="./images/boom.gif" style="display:none;"/>

           <img id="gid" src="./images/me.png"/>
        </div>
        <script type="text/javascript">
            var btop=-1036;
            var m=0,b=0;
            var did = document.getElementById("did");
            var gid = document.getElementById("gid");
            var boom = document.getElementById("boom");
            window.document.onkeydown = function(ent){
                //获取兼容的事件对象
                var event = ent || window.event;
                //alert(event.keyCode);
                //根据键盘值执行对应操作
                switch(event.keyCode){
                    case 37: //左方向键
                        gid.style.left = Math.max(0,gid.offsetLeft-5)+"px";
                        break;
                    case 38: //上方向键
                        gid.style.top = Math.max(0,gid.offsetTop-5)+"px";
                        break;
                    case 39: //右方向键
                        gid.style.left = Math.min(450,gid.offsetLeft+5)+"px";
                        break;
                    case 40: //下方向键
                        gid.style.top = Math.min(440,gid.offsetTop+5)+"px";
                        break;
                    case 32: //空格键
                        shoot(gid.offsetLeft+51,gid.offsetTop); //发射炮弹
                        break;
                }
            }

            //发射炮弹方法
            function shoot(x,y){
                //遍历所有炮弹
                for(var i=0;i<5;i++){
                    var p = document.getElementById("p"+i);
                    //判断炮弹是否可用
                    if(p.style.display=="none"){
                        p.style.top = y+"px";
                        p.style.left = x+"px";
                        p.style.display = "block";
                        return;
                    }
                }
            }

            //碰撞检测函数
            function doCheckP(p,e){
                //获取检测坐标
                var x1 = e.offsetLeft+3;
                var x2 = e.offsetLeft+93;
                var y1 = e.offsetTop+35;
                var y2 = e.offsetTop+59;
                var x = p.offsetLeft+1;
                var y = p.offsetTop;
                //判断是否有像素重叠
                if(x>x1 && x<x2 && y>y1 && y<y2){
                     return true;
                }
                return false;
            }

            //游戏主线程
            function running(){
                //负责移动可见炮弹
                for(var i=0;i<5;i++){
                    var p = document.getElementById("p"+i);
                    //判断炮弹是否可用
                    if(p.style.display=="block"){
                        p.style.top = p.offsetTop-5+"px";
                        //回收出了屏幕的炮弹
                        if(p.offsetTop<-10){
                            p.style.display = "none";
                        }

                        //碰撞检测
                        //遍历所有敌机
                        for(var j=1;j<=3;j++){
                            var e = document.getElementById("e"+j);
                            //判断是否可见
                            if(e.style.display=="block"){
                                if(doCheckP(p,e)){

                                    //设置爆炸位置
                                    boom.style.top = p.offsetTop-170+"px";
                                    boom.style.left = p.offsetLeft-200+"px";
                                    boom.style.display ="block";
                                    b=0;

                                    //隐藏敌机和炮弹
                                    p.style.display = "none";
                                    e.style.display = "none";
                                }
                            }
                        }
                    }
                }

                //随机设置出现敌机
                var n = Math.ceil(Math.random()*10000)%20;
                if(n==5){
                    for(var i=1;i<=3;i++){
                        var e = document.getElementById("e"+i);
                        //判断而是否可用
                        if(e.style.display=="none"){
                            e.style.display="block";
                            e.style.top=-85+"px";
                            e.style.left=Math.ceil(Math.random()*10000)%400+"px";
                            break;
                        }
                    }
                }

                //负责移动可见飞机
                for(var i=1;i<=3;i++){
                    var e = document.getElementById("e"+i);
                    //判断而是否可用
                    if(e.style.display=="block"){
                        e.style.top = e.offsetTop+4+"px";
                        //判断是否出界
                        if(e.offsetTop>500){
                            e.style.display = "none";
                        }
                    }
                }

                //控制爆炸时间
                if(b>=0){
                    b++;
                }
                if(b>10){
                     boom.style.display ="none";
                     b=-1;
                }

                //负责无缝滚动背景图片
                m+=2;
                did.style.backgroundPosition="0px "+(btop+m)+"px";
                if(m>768){
                    m=0;
                }

                setTimeout("running()",33);
            }

            running();
        </script>
    </body>
</html>
时间: 2024-12-15 06:37:26

js实例--飞机大战的相关文章

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:

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人都要崩溃了. 最后发现引擎中CCMenu::itemForTouch函数中有遍历子节点的行为,但是循环中没有判断子节点类型是否为CCMenuItem.如图:码,这样一来,加入到pMenu中的图片精灵被当作菜单项取了出来使用,导致报错.老版本的果然又不完善的地方,整个人都不好了...果断修改引擎里的源

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 1 bool PlaneWarGame::init() 2 { 3 bool bRet = false; 4 do 5 { 6 CC_BREAK_IF(! CCLayer::init()); 7 8 _size = CCDirector::sharedDirector()->getWinSize(); 9 10 // 设置触摸可用 11 this->setIsTouchEnabled

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)

最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:cocos2d-1.0.1-x-0.9.2 3.环境:vs2010 二.使用的类 1.游戏菜单界面类:PlaneWarMenu——派生自CCLayer类. 1 // 游戏菜单界面类 2 class PlaneWarMenu: public CCLayer 3 { 4 public: 5 virtual bo

[知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)

整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能进行基本操作了. 敌机对象的实现,并且初步完成了boos出现(30s自动出现).然后又引出了许多方法的处理,如英雄子弹击中敌机和boos,英雄与敌机相撞等等.并一一解决. 随后又设置了一些游戏的参数,如血量,关卡数,等级,积分,必杀,道具对象等等. 最后又完成了一些辅助功能,暂停游戏,继续游戏,退出

python 飞机大战 实例

飞机大战 #coding=utf-8 import pygame from pygame.locals import * import time import random class Base(object): def __init__(self,x,y,screen,image_name): self.x=x self.y=y self.screen=screen self.image=pygame.image.load(image_name).convert() class BaseBul

Python飞机大战实例有感——pygame如何实现“切歌”以及多曲重奏?

目录 pygame如何实现"切歌"以及多曲重奏? 一.pygame实现切歌 初始化路径 尝试一 尝试二 尝试三 成功 总结 二.如何在python多线程顺序执行的情况下实现音乐和音效同时播放? 尝试一 尝试二 尝试三 尝试四 成功 总结 pygame如何实现"切歌"以及多曲重奏? 昨天晚上研究了好久pygame的音乐混合器mixer,出了很多问题后最终成功,不过学习本来也不可能一帆风顺的吗,下面我就来讲一讲我遇到的问题. 一.pygame实现切歌 初始化路径 # 导

web版canvas做飞机大战游戏 总结

唠唠:两天的时间跟着做了个飞机大战的游戏,感觉做游戏挺好的.说是用html5做,发现全都是js.说js里一切皆为对象,写的最多的还是函数,都是函数调用.对这两天的代码做个总结,希望路过的大神指点一下,我对这个游戏的思路,可改进优化的代码. 先说一下游戏的基本内容: 打飞机(不要想歪了),有鼠标控制移动英雄机,子弹自动射击:敌机从上而下,有三种敌机: 先说下HTML代码(主要就是这一行): <canvas id="canFly" width="480" heig

飞机大战编写以及Java的面向对象总结

面向对象课程完结即可编写一个简单的飞机大战程序.我觉得我需要总结一下 飞机大战中类的设计: 父类:FlyingObject(抽象类) 接口:Award .Enemy 子类:Hero.Bullet.Airplane (实现Enemy接口). Bee (实现Award接口) 运行类:ShootGame Hero.Bullet.Airplane . Bee 均继承自FlyingObject类,FLyingObject具有他们的公共属性以及行为,因为FlyingObject并不需要被实例化,那么大可以将