最近微信的飞机大战非常流行,下载量非常高。

利用JS进行模拟制作了一个简单的飞机大战[此源码有很多地方可以进行重构和优化]

[此游戏中没有使用HTML5 任何浏览器都可以运行]。

效果图:

原理:利用javascript setInterval函数不停的进行元素位置的切换和添加飞机子弹,在飞机和子弹的运动中进行位置

检测,进行子弹和飞机的消失。

1、添加飞机

setInterval(function () {
var flyDiv = $('<div class="flyDiv"></div>');
flyDiv.css({left: Math.random() * 578, top: -22});
flyDiv.appendTo(main);
}, 3000);

2、添加子弹

    setInterval(function () {
var flyZ = $('<span class="z"></span>');
var l = m.offset().left + 23, t = m.offset().top;
flyZ.css({left: l, top: t});
flyZ.appendTo(main);
}, 600);

3、飞机的运动

setInterval(function () {
var allDiv = main.find('div'), allZ = main.find('span');
for (var i = 0; i < allDiv.length; i++) {
var f = $(allDiv[i]);
var nowTop = f.offset().top;
nowTop += 10;
f.css({top: nowTop});
for (var j = 0; j < allZ.length; j++) {
var z = $(allZ[j]);
if (testColl(
z.offset().left, z.offset().top, z.width(), z.height(),
f.offset().left, f.offset().top, f.width(), f.height()
)) {
z.remove();
f.remove();
sum.text(parseInt(sum.text()) + 1);
}
}
if (nowTop + 22 >= 400) {
f.remove();
}
}
}, 60);
4、子弹的运动
    setInterval(function () {
var allZ = main.find('span'),
allDiv = main.find('div');
for (var i = 0; i < allZ.length; i++) {
var z = $(allZ[i]);
var nowTop = z.offset().top;
nowTop -= 10;
z.css({top: nowTop}); for (var j = 0; j < allDiv.length; j++) {
var f = $(allDiv[j]);
if (testColl(
z.offset().left, z.offset().top, z.width(), z.height(),
f.offset().left, f.offset().top, f.width(), f.height()
)) {
z.remove();
f.remove();
sum.text(parseInt(sum.text()) + 1);
}
}
if (nowTop + 22 <= 0) {
z.remove();
}
} }, 60);

5、碰撞检测

function testColl(x1, y1, w1, h1, x2, y2, w2, h2) {
var l1 = x1;
var r1 = x1 + w1;
var t1 = y1;
var b1 = y1 + h1; var l2 = x2;
var r2 = x2 + w2;
var t2 = y2;
var b2 = y2 + h2; if (r1 < l2 || l1 > r2 || b1 < t2 || t1 > b2) {
return false;
}
else {
return true;
}
}

【完整源码】

<!DOCTYPE html>

<html lang="zh">

<head>

    <meta charset="utf-8"/>

    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>

    <title> new document </title>

    <style type="text/css">

        * {

            margin: 0;

            padding: 0;

        }

 

        #main {

            width: 600px;

            height: 400px;

            border: solid 1px #000;

            background: #cccccc;

        }

 

        .flyDiv {

            width: 20px;

            height: 20px;

            background: red;

            position: absolute;

        }

 

        .z {

            display: block;

            width: 4px;

            background: #000000;

            height: 10px;

            position: absolute;

            top: 390px;

        }

 

        .m {

            width: 50px;

            height: 50px;

            background: #000000;

            position: absolute;

            top: 345px;

            left: 275px;

        }

    </style>

</head>

 

<body>

<!-- html :begin -->

<div id="main"></div>

<div class="m" id="m"></div>

<div>

    打击飞机数:<label id="sum">0</label>

</div>

<!-- html :end -->

</body>

<script src="js/jquery-1.10.2.min.js"></script>

<script>

    $(document).ready(function () {

        var main = $('#main'),

                m = $('#m'),

                sum = $('#sum');

        $(document).on('keydown', function (ev) {

            var oEvent = ev || window.event;

            var l = m.offset().left,

                    t = m.offset().top;

            switch (oEvent.keyCode) {

                case 37:

                    if (l >= 0) {

                        l -= 12;

                    }

                    break;

                /*    case 38:

                 if (t >= 0) {

                 t -= 2;

                 }

                 break;*/

                case 39:

                    if (!(l + 50 > 600)) {

                        l += 12;

                    }

                    break;

                case 40:

                    if (!(t + 50 > 400)) {

                        t += 12;

                    }

                    break;

            }

            m.css({left: l, top: t});

        });

        setInterval(function () {

            var flyDiv = $('<div class="flyDiv"></div>');

            flyDiv.css({left: Math.random() * 578, top: -22});

            flyDiv.appendTo(main);

        }, 3000);

 

        setInterval(function () {

            var allDiv = main.find('div'), allZ = main.find('span');

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

                var f = $(allDiv[i]);

                var nowTop = f.offset().top;

                nowTop += 10;

                f.css({top: nowTop});

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

                    var z = $(allZ[j]);

                    if (testColl(

                            z.offset().left, z.offset().top, z.width(), z.height(),

                            f.offset().left, f.offset().top, f.width(), f.height()

                    )) {

                        z.remove();

                        f.remove();

                        sum.text(parseInt(sum.text()) + 1);

                    }

                }

                if (nowTop + 22 >= 400) {

                    f.remove();

                }

            }

        }, 60);

 

        setInterval(function () {

            var flyZ = $('<span class="z"></span>');

            var l = m.offset().left + 23, t = m.offset().top;

            flyZ.css({left: l, top: t});

            flyZ.appendTo(main);

        }, 600);

 

        setInterval(function () {

            var allZ = main.find('span'),

                    allDiv = main.find('div');

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

                var z = $(allZ[i]);

                var nowTop = z.offset().top;

                nowTop -= 10;

                z.css({top: nowTop});

 

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

                    var f = $(allDiv[j]);

                    if (testColl(

                            z.offset().left, z.offset().top, z.width(), z.height(),

                            f.offset().left, f.offset().top, f.width(), f.height()

                    )) {

                        z.remove();

                        f.remove();

                        sum.text(parseInt(sum.text()) + 1);

                    }

                }

                if (nowTop + 22 <= 0) {

                    z.remove();

                }

            }

 

        }, 60);

 

        function testColl(x1, y1, w1, h1, x2, y2, w2, h2) {

            var l1 = x1;

            var r1 = x1 + w1;

            var t1 = y1;

            var b1 = y1 + h1;

 

            var l2 = x2;

            var r2 = x2 + w2;

            var t2 = y2;

            var b2 = y2 + h2;

 

            if (r1 < l2 || l1 > r2 || b1 < t2 || t1 > b2) {

                return false;

            }

            else {

                return true;

            }

        }

    });

</script>

 

</html>

用Javascript模拟微信飞机大战游戏的更多相关文章

  1. 用javascript写星际飞机大战游戏

    在github里看到了个不错的脚本游戏,决定亲自动手来写,效果如下 下面是代码的思路分享 把整个代码理解消化确实不容易,但是如果你坚持看完相信你一定会有收获 如果没兴趣可以直接点击下面的链接 复制代码 ...

  2. 用Swift语言和Sprite Kit复制微信飞机大战游戏

    先上GitHub链接: https://github.com/songrotek/PlaneWar.git 接下来略微解说一下! 这个程序还有点Bug,见谅! 1 说明 游戏採用了Sprite kit ...

  3. 用DIV+Css+Jquery 实现的旧版微信飞机大战。

    用jquery 实现的旧版微信飞机大战. 以前一直都是做后台和业务逻辑,前端很少去做, 现在个小游戏. 方向键控制方向,Ctrl 键 放炸弹(当然你的有炸弹,哈哈)! 主要都是用div+Css实现的, ...

  4. 【一】仿微信飞机大战cocos2d-x3.0rc1

    參考 [偶尔e网事] 的 [cocos2d-x入门实战]微信飞机大战  cocos2dx 2.0版本号,偶尔e网事他写的很具体,面面俱到,大家很有必要看下.能够通过以下链接跳转: cocos2d-x入 ...

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

    最近接触过几个版本的cocos2dx,决定每个大变动的版本都尝试一下.本实例模仿微信5.0版本中的飞机大战游戏,如图: 一.工具 1.素材:飞机大战的素材(图片.声音等)来自于网络 2.引擎:coco ...

  6. Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现

    看到cocos2d-x推出了3.1版本号,真是每月一次新版本号,速度. 另一个好消息就是http://cn.cocos2d-x.org/上线了,祝贺!啥时候把我的视频和教程放上去呢?!! . 视频下载 ...

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

    在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人 ...

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

    接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 bool PlaneWarGame::init() { bool bRet = fals ...

  9. 11.pygame飞机大战游戏整体代码

    主程序 # -*- coding: utf-8 -*- # @Time: 2022/5/20 22:26 # @Author: LiQi # @Describe: 主程序 import pygame ...

随机推荐

  1. [译] 理解PHP内部函数的定义(给PHP开发者的PHP源码-第二部分)

    文章来自:http://www.hoohack.me/2016/02/10/understanding-phps-internal-function-definitions-ch 原文:https:/ ...

  2. php杂记(一)

    1.require_once & require include() 函数会将指定的档案读入并且执行里面的程序 include_once() 与include相同,但只允许一次: requir ...

  3. Backbone源码分析(一)

    距离上一篇博客有一段时间了,期间各种琐事萦绕.最主要的一件是,当我差不多将整个dojo核心源码看完,惊讶的发现dojo1.*的设计以是老态龙钟之象,而我沉溺在dojo中太久,已经不知道前端世界变成了什 ...

  4. ASP.Net MVC开发基础学习笔记:四、校验、AJAX与过滤器

    一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据 ...

  5. LOMA280保险原理读书笔记

    LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...

  6. FTP文件服务搭建与同步传输

    需求       搭建一台FTP服务器,用于文件的上传与下载:同时将FTP服务器目录中的文件同步到多个服务器中,实现同步更新,同时文件需要控制用户访问对应的文件夹权限. 需要用到的软件有:bestsy ...

  7. 小型单文件NoSQL数据库SharpFileDB初步实现

    小型单文件NoSQL数据库SharpFileDB初步实现 我不是数据库方面的专家,不过还是想做一个小型的数据库,算是一种通过mission impossible进行学习锻炼的方式.我知道这是自不量力, ...

  8. 《Spark快速大数据分析》—— 第五章 数据读取和保存

    由于Spark是在Hadoop家族之上发展出来的,因此底层为了兼容hadoop,支持了多种的数据格式.如S3.HDFS.Cassandra.HBase,有了这些数据的组织形式,数据的来源和存储都可以多 ...

  9. WPF入门教程系列二十——ListView示例(二)

    第四步.WPF后台逻辑代码编写 在后台用Entity Framework 6.1的Code First方式获取数据库中的数据.同时,在“刷新”按钮的方法中进行数据绑定.操作步骤如下: 1)  在“刷新 ...

  10. iOS中怎么存储照片到自定义相册

    在市场上主流App中,大多数App都具有存储图片到自己App的相册中.苹果提供的方法只能存储图片到系统相册,下面讲一下怎么实现: 实现思路:  1.对系统相册进行操作的前提必须导入#import &l ...