前端flappy bird游戏练习

css

    *{margin: 0;padding: 0;}
    body{background: #333;}
    /* 得分显示 */
    .mark{height: 20px;width: 100px;position: fixed;top: 120px;left: 200px;}
    /* 游戏显示区域 */
    #canvas{border: 1px solid #333;border-radius: 10px;top:0;left: 0;right: 0;bottom: 0;margin: auto;position: fixed;background: #fff;}
    /* 游戏结束后总分显示和重新开始 */
    #res{position: fixed;top:50%;left: 50%;margin-top: -25px;margin-left: -100px;;background:rgba(55, 55, 55, .3);height: 100px;width: 200px;border-radius: 20px;display: none;}
    /* 总分 */
    #res h2{padding: 5px 0;text-align: center;}
    /* 重新开始 */
    #res a{height: 30px;width: 80px;background:#333;color: #eee;;margin: 0 auto;display: block;text-decoration: none;line-height: 30px;text-align: center;}
    #res img{height: 50px;width: 50px;display: block;margin: 0 auto;border-radius: 50%;}

html

    <canvas id="canvas" height="400" width="800"></canvas>
    <div class="mark" id="mark">得分:0</div>
    <div class="res" id="res">
        <h2>得分:0</h2>
        <a id="reloadGame" href="#">重新开始</a>
        <img src="" alt=""/>
    </div>

javascript

    var birdX = 200;//鸟出现在画板上的位置
    var birdY = 200;
    var bird = new Image();
    bird.src = ‘../img/birdup.png‘;
    var canvas = document.getElementById(‘canvas‘);
    var context = canvas.getContext(‘2d‘);
    var birdTimer = null;//设置定时器的id
    var columnTimer = null;
    window.onload = function(){
        createColomn ();//创建柱子
        removeColumn();//如果柱子超出页面,则删除相应的柱子
    }

    //创建一个鸟
    bird.onload = function(){
        if(birdTimer == null){
            birdTimer = setInterval(function(){
                if(birdY <= 370){//如果小鸟没有到最下边,就继续下落
                    birdY++;
                }
                context.clearRect(0,0,800,400);//先清空图层,要不然每一帧的图像都将保留在canvas上
                drawColumn();//调用绘制柱子的函数
                context.drawImage(bird,birdX,birdY);
            },10)
        }
    };
    //按下空格键事件,小鸟的翅膀挥动效果
    document.onkeydown = function(e){
        bird.src = ‘../img/birddown.png‘;
        if(e.keyCode == 32 && birdY >= 10){
            birdY -= 30;
        }
    }
    document.onkeyup = function(e){
        bird.src = ‘../img/birdup.png‘;
        if(e.keyCode == 32 && birdY >= 10){
        }
    }
    //创建柱子
    var columnArr = [];//柱子容器
    function createColomn (){
        columnTimer = setInterval(function(){
            var column = {};//每个柱子的参数
            column.X = 900;//柱子从最右边出现
            column.Y = -Math.round(Math.random() * 100 +50);//柱子离上边的距离的随机0-150
            column.id = new Date().getTime();//设置柱子的id用时间来表示
            column.columnA = new Image();//下边的柱子
            column.columnB = new Image();//上边的柱子
            column.columnA.src = ‘../img/columnA.png‘;
            column.columnB.src = ‘../img/columnB.png‘;
            columnArr.push(column);
        },1500);
    }

    //删除掉数组中超出页面的柱子。
    var removeCoTimer = null;//设置删除柱子的定时器id
    function removeColumn(){
        removeCoTimer = setInterval(function(){
            for(var i = 0; i < columnArr.length; i++){
                if(columnArr[i].X < -100){//如果柱子超出页面,则删除柱子
                    columnArr.splice(i,1);
                    console.log(columnArr.length);
                }
            }
        },1000);
    }

    //绘制柱子
    var colId = null;//设置柱子的id,以免重复积分
    var mark = 0;//得分统计
    function drawColumn(){
        for(var i = 0; i < columnArr.length;i++){
            columnArr[i].X--;
            context.drawImage(columnArr[i].columnB,columnArr[i].X,columnArr[i].Y);//绘制上面的柱子
            context.drawImage(columnArr[i].columnA,columnArr[i].X,columnArr[i].Y + 350);//绘制下面的柱子
            if(birdX + 35 >= columnArr[i].X && birdX <= columnArr[i].X + 56){//检测小鸟的是否和柱子前后有碰撞
                if(birdY <= columnArr[i].Y + 234 || birdY + 26 >= columnArr[i].Y + 350){//检测小鸟是否和柱子上下有碰撞
                    clearInterval(birdTimer);//如果碰撞,则停止游戏定时器。
                    clearInterval(columnTimer);//停止创建柱子的定时器
                    var res = document.getElementById(‘res‘);//显示总分和重新开始的DOM节点

                    res.style.display = "block";
                    res.children[0].innerHTML = ‘得分:‘ + mark;
                }else{
                    if(columnArr[i].id != colId){//如果没有碰撞,检测柱子的id,防止重复计分
                        mark++;
                        colId = columnArr[i].id;
                        document.getElementById(‘mark‘).innerHTML = ‘得分:‘ + mark;
                    }
                }
            }
        }
    }
    //重新开始游戏。
    var a = document.getElementById(‘reloadGame‘);
    a.addEventListener(‘click‘,function(){
        location.reload();
    });

原文地址:https://www.cnblogs.com/solaris-wwf/p/11731491.html

时间: 2024-10-21 14:17:46

前端flappy bird游戏练习的相关文章

cocos2dx-html5 实现网页版flappy bird游戏

我也是第一次使用cocos2d_html5,对js和html5也不熟,看引擎自带的例子和引擎源码,边学边做,如果使用过cocos2d-x的话,完成这个游戏还是十分简单的.游戏体验地址: http://zhoujianghai.github.io/games/flappybird/ 1. 首先去cocos2d-x官网下载Cocos2d-html5-v2.2.2(目前最新版本)压缩包 2. 下载安装WampServer(http://www.wampserver.com/en/),后期在浏览器运行程

飞翔的圆(Flappy Bird)游戏源码完整版

这个源码是一个不错的休闲类的游戏源码,飞翔的圆(Flappy Bird)游戏源码V1.0,本项目是一个仿Flappy Bird的小游戏,只不过是把Flappy Bird里面的鸟替换成了简单的圆.感兴趣的朋友可以研究一下.本项目默认编码GBK. 源码下载:http://code.662p.com/view/9013.html public class LoadingActivity extends Activity { @Override public void onCreate(Bundle s

用Phaser实现Flappy Bird 游戏

How to Make a Flappy Bird in HTML5 With Phaser - Part 1 Flappy Bird is a nice little game with easy to understand mechanics, and I thought it would be a perfect fit for an HTML5 game tutorial for beginners. We are going to make a simplified version o

自主学习Flappy Bird游戏

背景 强化学习 神经网络 环境搭建 实验

自己动手写游戏:Flappy Bird

START:最近闲来无事,看了看一下<C#开发Flappy Bird游戏>的教程,自己也试着做了一下,实现了一个超级简单版(十分简陋)的Flappy Bird,使用的语言是C#,技术采用了快速简单的WindowsForm,图像上主要是采用了GDI+,游戏对象的创建控制上使用了单例模式,现在我就来简单地总结一下. 一.关于Flappy Bird <Flappy Bird>是由来自越南的独立游戏开发者Dong Nguyen所开发的作品,游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管

用Phaser来制作一个html5游戏——flappy bird (一)

Phaser是一个简单易用且功能强大的html5游戏框架,利用它可以很轻松的开发出一个html5游戏.在这篇文章中我就教大家如何用Phaser来制作一个前段时间很火爆的游戏:Flappy Bird,希望大家看后也能做出自己的html5游戏.大家可以先点击这里来试玩一下我已经做好的这个游戏,感受一下Phaser的游戏效果,游戏的完整代码我已经放到github上了.支持的浏览器:IE9+.Firefox.Chrome.Opera.Safari以及移动端的能支持html5的浏览器,推荐使用谷歌浏览器,

C语言版flappy bird黑白框游戏

在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird.代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了! 代码的完美度肯定是不够的,随手编的嘛,找完bug后就没再去想怎样优化它了,毕竟时间有限. 先说下它的设计思路吧,算法方面,基本是纯靠for if 语句加上纯粹的坐标x,y运算实现的,在下面的代码里,将会看到很多阿拉伯数字的加加减减.没有用到链表什么的,当然,我相信,如果用到链表的话,会更简单,代

Flappy bird用户手册

   flappy bird基本玩法: 小鸟会在屏幕中自动往前飞,点击屏幕小鸟就会弹一下,不点击屏幕就会直接往下掉.小鸟通过一根水管就能得一分,直到小鸟撞上水管游戏结束,然后结算分数. 在此过程中: (1)界面刚开始时,按空格键,然后按左键,进入运行界面,按空格键让鸟向上移动.  (2)通过吃苹果,可以无障碍的通过一个柱子.  (3)通过吃橙子,可以隐身5秒 flappy bird下载: flappy bird我们已经放在云平台共享上,链接网址为:http://pan.baidu.com/s/1

下坠的小鸟(flappy bird)速算版

下坠的小鸟速算版是根据著名的像素鸟(flappy bird)改编而成的一款运行在pc web上的游戏,它跟传统的玩法稍有不同,你必须时刻计算当前数字的倍数,以便为通过下一个数字缺口做准备,而不仅仅只是通过当前缺口.这不仅考验着您的速算功力,还对您的兼顾能力发起了挑战.ready? Go! http://sentsin.com/hello/flappy/ 下坠的小鸟(flappy bird)速算版,布布扣,bubuko.com