javascript游戏之打飞机、接礼物

一个简单的JS游戏,需要jquery插件,是根据Floyd的打飞机游戏进行了一些简化和修改,界面比较丑陋,添加些素材就好看多啦,比如加个背景图片,子弹换成各种礼物图片,黄色板砖换成礼物篮等等,编码闲暇之余用来放松还是不错的

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>飞机接子弹</title>
<style>
	#panel{height:400px;width:300px;background:Black;position:absolute;left:100px;top:100px;overflow:hidden;}
	#panel div{position:absolute;left:0;color:White;font-size:12px;}
	#panel .time{top:0;}
	#panel .canBigCount{top:12px;}
	#panel .score{top:24px;}
</style>

</head>
<body>

<br />
<div style="color:Red;">游戏说明:方向键左右控制移动,空格为变大5秒,吃到白色加100分,红色扣100分,蓝色增加一次变大</div>
<div><input type="button" value="开始" onclick="GameStart()" /></div>

<div id="panel" tabindex="0">
	<div class="time">时间:<span id="time">60</span></div>
	<div class="canBigCount">可变大次数:<span id="canBigCount">1</span></div>
	<div class="score">分数:<span id="score">0</span></div>
</div>

<script type="text/javascript" src="demo.js"></script>
</body>
</html>
var Fly = function () {
    //板砖dom元素
    this.dom = null;
    //板砖信息
    this.left = 0;
    this.top = 0;
    this.width = 0;
    this.height = 0;
    //移动状态
    this.isMove = false;
    //setInterval id
    this.moveId = null;
}
Fly.prototype = {
    //移动位移
    movepx: 10,
    //移动位置更新频率
    moveSpeed: 30,
    //初始化板砖位置
    init: function (gameWidth, gameHeight) {
        this.dom = $('#fly');
        this.width = this.dom.width();
        this.height = this.dom.height();

        this.left = (gameWidth - this.width) / 2;
        this.top = gameHeight - this.height;
        this.update();
    },
    //更新位置
    update: function () {
        this.dom.css({ 'left': this.left, 'top': this.top });
    },
    //键盘按下事件
    keydown: function (e, gameWidth) {
        switch (e.keyCode) {
            //方向左
            case 37: {
                if (!this.isMove) {
                    this.isMove = true;
                    this.move('left');
                }
                break;
            };
                //方向右
            case 39: {
                if (!this.isMove) {
                    this.isMove = true;
                    this.move('right', gameWidth);
                }
                break;
            };
        }
    },
    //键盘释放事件
    keyup: function (e) {
        if (e.keyCode == 37 || e.keyCode == 39) {
            this.stop();
        }
    },
    //板砖移动
    move: function (dir, gameWidth) {
        _this = this;
        if (dir == 'left') {
            this.moveId = setInterval(function () {
                _this.left = _this.left - _this.movepx <= 0 ? 0 : _this.left - _this.movepx;
                _this.update();
            }, this.moveSpeed);
        }
        else {
            this.moveId = setInterval(function () {
                _this.left = _this.left + _this.movepx >= gameWidth - _this.width ? gameWidth - _this.width : _this.left + _this.movepx;
                _this.update();
            }, this.moveSpeed);
        }
    },
    stop: function () {
        this.isMove = false;
        clearInterval(this.moveId);
    }
}

//子弹类,type为类型
var Bullet = function (type) {
    //子弹dom元素
    this.dom = null;
    //子弹信息
    this.left = 0;
    this.top = 0;
    this.width = 0;
    this.height = 0;
    this.type = type;

    this.create();
}
Bullet.prototype = {
    //子弹类型与颜色映射表
    bullettype: {
        "good": "White",
        "bad": "Blue",
        "heart": "Red"
    },
    //每次移动位移
    movepx: 10,
    //子弹速度
    movespeed: 50,
    //创建子弹dom
    create: function () {
        this.width = 5;
        this.height = 5;
        this.dom = $('<div style="position:absolute;width:' + this.width + 'px;height:' + this.height + 'px;overflow:hidden;background:' + this.bullettype[this.type] + ';"></div>');
    },
    //初始化子弹位置
    initPosition: function (gameWidth) {
        this.left = parseInt(Math.random() * gameWidth + 1, 10);
        this.dom.css('left', this.left);
    },
    //子弹动画,height为游戏背景高度
    animation: function (height) {
        var _this = this;
        //向下移动函数
        var downmove = function () {
            //更新位置
            _this.top = _this.top + _this.movepx;
            _this.update();
            //判断子弹位置以及是否击中板砖
            if (_this.top < height && !_this.isBeatFly()) {
                setTimeout(downmove, _this.movespeed);
            }
            else {
                //动画结束触发事件
                _this.onEnd();
            }
        }
        downmove();
    },
    //更新位置
    update: function () {
        this.dom.css({ 'left': this.left, 'top': this.top });
    },
    //判断子弹击中板砖否
    checkBeatFly: function (fly) {
        if (this.left >= fly.left && this.left + this.width <= fly.left + fly.width) {
            if (this.top + this.height >= fly.top && this.top + this.height <= fly.top + fly.height) {
                return true;
            }
        }
        return false;
    },
    //动画结束触发事件,外部覆盖
    onEnd: function () { },
    //子弹是否击中板砖以及击中后处理事件,外部覆盖
    isBeatFly: function () { }
}

var Game = {
    //分值
    gameScore: 100,
    //游戏背景dom元素
    gamePanel: null,
    //游戏背景宽度
    gameWidth: 0,
    //游戏背景高度
    gameHeight: 0,
    //子弹生成频率
    bulletHz: 200,
    //板砖
    fly: null,
    //分数
    score: 0,
    //爱心
    heart: 0,
    //时间
    time: 0,
    //是否开始
    start: false,
    //初始化
    init: function () {

        //初始化游戏背景数据
        this.gamePanel = $('#panel');
        this.gameWidth = this.gamePanel.width();
        this.gameHeight = this.gamePanel.height();
        this.score = 0;
        this.heart = 0;
        this.time = 30;
        $('#time,#heart,#score').html(0);

        //初始化板砖
        this.fly = new Fly();
        this.fly.init(this.gameWidth, this.gameHeight);

        //为body绑定键盘事件
        $('body').off('keydown').off('keyup')
            .keydown(function (e) {
                Game.fly.keydown(e, Game.gameWidth);
            })
            .keyup(function (e) {
                Game.fly.keyup(e);
            });

        //初始化子弹
        var _this = this;
        var process = function () {
            //随机数,决定生成加分或扣分子弹
            var random = parseInt(Math.random() * 10 + 1, 10);
            //随机数,决定生成爱心子弹
            var heart = parseInt(Math.random() * 50 + 1, 10);
            //新建一个子弹对象
            var bullet = new Bullet(random % 3 == 0 ? 'bad' : heart < 10 ? 'heart' : 'good');

            bullet.initPosition(_this.gameWidth);
            //覆盖子弹动画结束事件
            bullet.onEnd = function () {
                this.dom.remove();
                this.dom = null;
            }
            //覆盖子弹是否击中飞机以及击中后处理事件
            bullet.isBeatFly = function () {
                if (this.checkBeatFly(_this.fly)) {
                    _this.changeScore(this.type);
                    return true;
                }
                return false;
            }

            _this.gamePanel.append(bullet.dom);
            bullet.animation(_this.gameHeight);
            if (_this.time > 0) {
                setTimeout(process, _this.bulletHz);
            };
        }
        process();

        //计时
        this.startTime();
        this.start = true;
    },

    //改变分数
    changeScore: function (type) {
        switch (type) {
            case 'heart':
                this.heart += 1;
                $('#heart').html(this.heart);
                break;
            case 'good':
                this.score += 1;
                break;
            default:
                this.score -= 1;
                break;
        }

        $('#heart').html(this.heart);
        $('#score').html(this.score);
    },
    //计时
    startTime: function () {
        var _this = this;
        $('#time').html(this.time);
        setTimeout(function () {
            if (_this.time > 0) {
                _this.time -= 1;
                _this.startTime();
            } else {
                $('body').off('keydown').off('keyup');
                Game.fly.stop();
                _this.start = false;
            }
        }, 1000);
    }
}

function GameStart() {
    if (Game.start == false) {
        Game.init();
    }
}
时间: 2024-12-22 13:58:55

javascript游戏之打飞机、接礼物的相关文章

famo.us 一个JavaScript游戏引擎初探

好久之前就看到了famo.us的优良特性,尤其是它避开浏览器弊病的跳跃思维,再加上自己使用JQM来开发Web App时的页面切换的白屏bug,又比对了sencha touch,最后还是决定将famo.us作为开发框架,它是基于浏览器的,目标就是使页面呈现性能最大化,而我不会拿它来做游戏,只是做简单的WebApp,要的就是这个界面显示性能. 但悲剧的是国内没有关于famo.us的教程,近些日子Google被天朝打压的挺惨,幸运的是famo.us官网还是可以访问的,所以以下的学习结果都来自官网htt

20 款免费的 JavaScript 游戏引擎

使用 HTML5,CSS3 和 Javascript 可以帮助面向对象开发者开发拥有各种特性的游戏,比如:3D 动画效果,Canvas,数学,颜色,声音,WebGL 等等.最明显的优势在于使用 HTML5 开发的游戏能在任何现代化流行的设备上运行. 某些游戏引擎仅仅是一个抽象的层次,就简单处理一些或者更多的繁杂游戏开发任务:其他只是注重 asset 加载,输入,物理效果,音频,sprite 地图和动画,而且相当多样化.还有一些引擎架构极其简单,只包括一个 2D 水平的编辑器和调试工具. 大部分的

Java小游戏之打飞机(二)

这篇文章本应昨天写的,可是真打算写的时候,CSDN博客维护,导致拖到了今天: 在上篇文章Java小游戏之打飞机(一)中已经详细介绍了该游戏的基本架构和需求分析,今天就详细写一写具体每个类的实现: 1)PlaneGameFrame类    ----游戏的主界面以及一些具体的飞机动作方法.碰撞检测等 代码: package plane; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java

25 个超棒的 HTML5 &amp; JavaScript 游戏引擎开发库

25 个超棒的 HTML5 & JavaScript 游戏引擎开发库 就像在汽车中,引擎完成主要的工作,使汽车看起来不可思议.游戏引擎同理,游戏开发者完成细节的工作,使游戏看起来真实.吸引人眼球.游戏引擎负责其余的事情.早期,游戏开发者通常从草图做起,花费高昂,且不容易获利.为了让游戏开发更加简单容易,主要的开发者开始授权他们的基本游戏引擎,如 Unreal.而且,随着手机和平板游戏的出现,所需预算比以前更少,对 JAVASCRIPT 和HTML5 游戏引擎的需求大增. 如果你是一个游戏开发者,

18 款超酷的 HTML5 和 JavaScript 游戏引擎库

现在的游戏开发变得越来越复杂,需要制作各种炫丽的效果,还要制作各种基于 2D 或者 3D 的场景.为了节省游戏开发者的时间,让开发者集中精力在游戏的创新上,出现了许许多多的游戏引擎.而现在为了实现跨平台,HTML5 和 JavaScript 成功为了游戏开发者必备的利器,特别是移动端的开发者,必须要能很好的掌握 HTML5 和 JavaScript. 现在这么多的游戏引擎,各有各的优点和缺点,为了帮助开发者们找到属于自己的那款游戏开发引擎,我们综合了许多方面的考虑,选出来以下的 18 个超酷的

18个功能强大的HTML5 和JavaScript游戏引擎库

如果你想要开发一个手机游戏,相关的游戏引擎库会是你寻找的目标之一.游戏引擎库的数量成百上千,哪一款才是你需要的呢?本文为你收集了18个功能强大的HTML5 和JavaScript 游戏引擎库. 相关推荐:排名前10的H5.Js 3D游戏引擎和框架 1. Impact JS Impact JS 是最好的游戏引擎之一,它能够帮助你创建那些玩家们高度关注的复杂图形图像.Impact JS 虽然不是免费的,但是它所带来的价值绝对是物超所值的. 2. Crafty JS 第二个要说到的非常流行的Java

20个免费的JavaScript游戏开发引擎

基于HTML5+JavaScript+CSS3技术,结合3D,动画,油画,数学,颜色,声音,WebGL能够创造非凡的游戏.在这篇文章中我们已经收集了20个免费的JavaScript游戏引擎帮助开发人员进行快速开发. 1. Crafty This is a lightweight and modular JavaScript game engine which consists of many components like animation, event management, redraw

Java小游戏之打飞机(一)

20150809 下午写了一下午,把打飞机的基本结构已经写完,下面要详细说明功能及源码: 先看一下运行界面: 游戏运行中图片 左上角是英雄机,黄色的是子弹,英雄机的任务就是躲子弹,英雄机可以通过键盘沿各个方向移动来躲子弹,躲的子弹越多,等级越高.子弹遇到墙壁可以反弹. 游戏结束界面 一旦英雄机被子弹击中,会有一个爆炸的效果,然后游戏结束,打印等级和游戏总时间. 项目结构图: 深层剖析: 由界面可以看出,有英雄机类.子弹类.然后一个主界面类,具体处理的时候,由于考虑到程序的扩展性和数据的封装,建了

分享:使用 TypeScript 编写的 JavaScript 游戏代码

<上篇博客>我写出了我一直期望的 JavaScript 大型程序的开发模式,以及 TS(TypeScript) 的一些优势.博客完成之后,我又花了一天时间试用 TS,用它来重构之前编写的一个 JS 游戏:<Javascript 坦克游戏>.   源码下载 源码我已经上传到 CSDN 了,无需资源分,下载地址:http://download.csdn.net/detail/zgynhqf/8565873. 源码使用 VS 2013 +TypeScript 1.4 进行开发.打开后,显