java fly bird小游戏_JavaScript实现Fly Bird小游戏

article/2025/9/29 19:22:35

3.1 小鸟

首先,创建小鸟的对象, bird.js 文件。

div:document.createElement("div"),showBird:function(parentObj) {

this.div.style.width = "40px";

this.div.style.height = "28px";

this.div.style.backgroundImage = "url(img/bird0.png)";

this.div.style.backgroundRepeat = "no-repeat";

this.div.style.position = "absolute";

this.div.style.left = "50px";

this.div.style.top = "200px";

this.div.style.zIndex = "1";

parentObj.appendChild(this.div); //将小鸟DIV插入游戏界面中

},fallSpeed: 0,//小鸟下落速度

flyBird: function(){ //控制小鸟飞翔下落的函数

bird.flyTimer = setInterval(fly,40);

function fly() {

bird.div.style.top = bird.div.offsetTop + bird.fallSpeed++ + "px";

if (bird.div.offsetTop < 0) {

bird.fallSpeed = 2; //这里用于控制小鸟不要飞出界面

}

if (bird.div.offsetTop >= 395) {

bird.fallSpeed = 0;

clearInterval(bird.flyTimer); //一旦飞到地面,清除定时器

clearInterval(bird.wingTimer); //清除翅膀摆动定时器

}

if (bird.fallSpeed > 12) {

bird.fallSpeed = 12; //鸟的最大下落速度控制在12

}

}

},wingWave: function() { //控制小鸟煽动翅膀的函数

var up = ["url(img/up_bird0.png)","url(img/up_bird1.png)"];

var down = ["url(img/down_bird0.png)","url(img/down_bird1.png)"];

var i = 0,j = 0;

bird.wingTimer = setInterval(wing,120);//逐帧动画,小鸟煽动翅膀

function wing() {

if (bird.fallSpeed > 0) {

bird.div.style.backgroundImage = down[i++];

if (i==2) {i = 0}

}if (bird.fallSpeed < 0) {

bird.div.style.backgroundImage = up[j++];

if (j==2) {j = 0}

}

}

},};

下面,实现点击start按钮时,加载小鸟。(在之前的代码基础上添加)

添加点击事件处理程序

jsHeadTitle.style.display = "none"; //隐藏标题

clearInterval(headWaveTimer); //关闭让标题摆动的定时器

jsStartBtn.style.display = "none"; //隐藏按键

bird.showBird(jsWrapBg); //插入小鸟到界面中

bird.flyBird(); //控制小鸟飞翔下落

bird.wingWave(); //逐帧动画,小鸟煽动翅膀

jsWrapBg.onclick = function(){

bird.fallSpeed = -8;

};

//待添加功能

//点击开始按键进入游戏界面

}

添加小鸟后的效果

20161215102424828.gif?20161115102431

3.2 障碍(上方水管和下方水管)

20161215103157419.jpg?20161115103213

障碍分为上方管道和下方管道,如示意图所示结构嵌套,这样就可以通过随机设置DownDiv2的高度和gapHeight的高度,来改变生成障碍的形态

block.js

SEObj.randomNum(0,150);

this.gapHeight = baSEObj.randomNum(150,160);

this.upHeight = 312 - this.downHeight - this.gapHeight;

// 用来生成Div的方法

this.createDiv = function(url,height,positionType,left,top) {

var newDiv = document.createElement("div");

newDiv.style.width = "62px";

newDiv.style.height = height;

newDiv.style.position = positionType;

newDiv.style.left = left;

newDiv.style.top = top;

newDiv.style.backgroundImage = url; //"url(/img/0.jpg)"

return newDiv;

};

this.createBlock = function() {

var upDiv1 = this.createDiv("url(img/up_mod.png)",this.upHeight + "px");

var upDiv2 = this.createDiv("url(img/up_pipe.png)","60px");

this.upDivWrap = this.createDiv(null,null,"absolute","450px");

this.upDivWrap.appendChild(upDiv1);

this.upDivWrap.appendChild(upDiv2);//生成上方管道

var downDiv1 = this.createDiv("url(img/down_pipe.png)","60px");

var downDiv2 = this.createDiv("url(img/down_mod.png)",this.downHeight +"px");

this.downDivWrap = this.createDiv(null,"450px",363 - this.downHeight + "px");

this.downDivWrap.appendChild(downDiv1);

this.downDivWrap.appendChild(downDiv2); //生成下方的管道

jsWrapBg.appendChild(this.upDivWrap);

jsWrapBg.appendChild(this.downDivWrap);

};

this.moveBlock = function() { //控制管道移动的方法

this.upDivWrap.style.left = this.upDivWrap.offsetLeft - 3 + "px";

this.downDivWrap.style.left = this.downDivWrap.offsetLeft - 3 + "px";

};

}

公共对象文件 baSEObj.js ,用来提供随机数,和两个矩形div的碰撞检测

var obj2Left = obj2.offsetLeft;

var obj2Width = obj2.offsetLeft + obj2.offsetWidth;

var obj2Top = obj2.offsetTop;

var obj2Height = obj2.offsetTop + obj2.offsetHeight;

if (!(obj1Left > obj2Width || obj1Width < obj2Left || obj1Top > obj2Height || obj1Height < obj2Top)) {

return true;

}

return false;

},};

下面我的想法是在start按钮点击的时候创建一个block,把这个block存储到数组 blocksArr 中,在 landTimer 定时器的方法 landRun 中检查此数组的长度,如果数组不为空数组,那么就让数组中所有的block移动。

检查最后一个block离开的距离,达到一定距离,就重新new 一个block,添加到数组。

检查第一个block,一旦达到一定位置,就在结构中移除downDivWrap 和 upDivWrap,同时在数组中删除。

if (blocksArr.length) {

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

blocksArr[i].moveBlock();

var x =baseObj.rectangleCrashExamine(blocksArr[i].downDivWrap,bird.div);

var y = baseObj.rectangleCrashExamine(blocksArr[i].upDivWrap,bird.div);

var z = bird.div.offsetTop >= 390;

if (x || y || z) {

window.clearInterval(landTimer);//清除landTimer定时器

bird.fallSpeed = 0; //小鸟下落

jsWrapBg.onclick = null; //消除点击事件

}

}

if (blocksArr[blocksArr.length - 1].downDivWrap.offsetLeft < (450 - blockDistance)) {

blockDistance = baSEObj.randomNum(130,250);

var newBlock = new Block();

newBlock.createBlock();

blocksArr.push(newBlock);

}

if (blocksArr[0].downDivWrap.offsetLeft < -50) {

jsWrapBg.removeChild(blocksArr[0].downDivWrap);

jsWrapBg.removeChild(blocksArr[0].upDivWrap);

blocksArr.shift(blocksArr[0]);

}

}

}

当前的游戏效果

20161215103308867.gif?20161115103318

3.3 计分器

游戏中的计分器相对较好实现

score">

var jsscore = document.getElementById("score");

var jsNum1 = document.getElementById("num1");

var jsNum2 = document.getElementById("num2");

var jsNum3 = document.getElementById("num3");

var score = 0;

今天先这样了,改天再写。哈哈

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250


http://chatgpt.dhexx.cn/article/ueOm0WBT.shtml

相关文章

FLY BIRD

这是作品需要的角色…… 注:水管要多弄几个造型例如: (作者用的背景是blue sky(scratch素材库里面的)) 一下是水管的程序: 小鸟的也很简单:

Java之编写FlyBird小游戏

Java小游戏编写&#xff08;飞翔的小鸟&#x1f426;&#xff09; 概述&#xff1a;主要使用面向对象&#xff0c;线程&#xff0c;继承、ImageIO流等完成的一个小游戏 主要文件&#xff1a; &#x1f405;&#x1f389;&#x1f405;&#x1f389;&#x1f405;&#x1f389;…

介绍一款2023年新出的mysql管理工具: FlyBird Database Manager

FlyBird Database Manager 介绍 FlyBird Database Manager 是一款mysql 界面化管理工具&#xff0c; 使用go语言编写&#xff0c;天然支持Windows, MacOS, Linux等主流平台。 提供无需安装的命令行版本&#xff0c; 命令行中启动服务&#xff0c;以html支持UI界面,在浏览器中…

网络打印机无法连接的解决方法

&#xfeff;&#xfeff; 网络 打印机无法连接的解决方法。 1、首先确定计算机是否可以连接网络打印机&#xff0c;网络打印机都会有一个内网ip地址&#xff0c;可以先ping一下看通不通&#xff0c;如果不通说明计算机与网络打印机之间线路不通&#xff0c;可以用排除法看看是…

win10 系统连接不到网络打印机

查看其它同事的网上邻居里可以看到内容&#xff0c;但 本机空空如也&#xff01; 解决方法&#xff1a;打开控制面板&#xff1a;如下图所示&#xff1a;1&#xff1a;“程序“”->2&#xff1a;“启用或关闭windows功能“->3&#xff1a;勾选"SMB 1.0/CIFS文件共享…

windows10突然连不上打印机问题

问题描述 windows10打印机突然连接不上了&#xff0c;出现了错误&#xff1a; Active Directory 域服务当前不可用。 解决方案 在cmd中输入 services.msc 找到 发现这个服务没有运行&#xff0c;点击运行按钮&#xff0c;出现错误信息&#xff1a; win10错误0x800706b9…

共享网络打印机连接,以及解决无法连接打印机的问题

win10共享网络打印机&#xff0c;及连接打印机 1.共享2.连接补充一点 1.共享 打开WIN的远程连接。&#xff08;一方面是为了能方便使用远程桌面&#xff0c;这个以后会写到&#xff09;——我的电脑—右键—属性—远程设置。把两个都选上。然后搜索栏输入‘打印机’&#xff0…

解决:Win11无法连接网络打印机

&#xff08;一&#xff09;打开本地组策略。 1.1 按winR键盘组合键打开“运行”。在运行框中输入 “gpedit.msc”&#xff0c;回车键。 1.2 “开始”菜单中搜索&#xff1a;组策略&#xff0c;然后出现【编辑组策略】&#xff0c;点击进入。 &#xff08;二&#xff09;管理模…

关于Windows11无法连接打印机

刚买的W11电脑&#xff0c;发现办公室的共享打印机连接不了&#xff0c;显示无法连接。也看了很多解决办法&#xff0c;都没能解决。 然后发现了可能是W11家庭版的问题&#xff0c;微软系统更新后&#xff0c;就是会存在打印机连接不上的问题。这个网址就可以解决以上的问题。…

Win10无法连接打印机怎么办?不能使用打印机的解决方法

在我们平常的办公中&#xff0c;经常会需要使用到打印机打印文件。想要使用打印机是需要先将电脑与打印机连接的&#xff0c;但是有部分Win10用户遇到了无法连接打印机的情况&#xff0c;对于这种情况应该如何解决呢&#xff1f;下面来看看详细的操作方法吧&#xff01; Ghost…

Win11 22H2共享打印机连不上怎么办?

Win11 22H2共享打印机连不上怎么办&#xff1f;有用户使用电脑的时候&#xff0c;需要去进行打印机的连接&#xff0c;但是在连接的过程中&#xff0c;却出现了无法连接的情况。那么遇到这个问题之后怎么去进行解决呢&#xff1f;一起来看看以下的解决方法分享吧。 解决方法&am…

windows无法连接到打印机?三个方法连接打印机(Win10系统)

在日常办公中&#xff0c;我们经常会用到打印机。一般情况下&#xff0c;打印机要与电脑连接才可以使用。有很多用户反馈&#xff0c;windows无法连接到打印机&#xff0c;这是怎么回事呢&#xff1f;请看文章是如何解决打印机无法连接到计算机的问题&#xff01; 操作环境&…

“windows无法连接到打印机”问题的解决

转载请注明出处&#xff1a;http://blog.csdn.net/dongdong9223/article/details/62045759 本文出自【我是干勾鱼的博客】 经常会出现“windows无法连接到打印机”这样的错误&#xff1a; 其实这是因为print spooler 自动关闭导致的&#xff0c;进入&#xff1a; 控制面板 -&…

windows无法连接到打印机

项目场景&#xff1a;windows无法连接到打印机 windows无法连接到打印机。本地打印后台处理程序服务没有运行。请重新启动打印机后台处理程序或重新启动计算机 问题描述 解决方案&#xff1a; 搜索服务&#xff0c;点击打开 搜索Print Spooler 查看状态是否运行&#xff0c;…

计算机无法连接打印机主机,电脑主机连不上网络打印机

其实网络打印机是一种智能型网络设备&#xff0c;它能够通过多种网络环境为大批用户提供打印服务。下面是学习啦小编为大家整理的关于电脑主机连不上网络打印机&#xff0c;一起来看看吧! 电脑主机连不上网络打印机 要解决无法连接的问题&#xff0c;我们要先将打印机取下在重新…

Win11无法连接打印机?Win11电脑无法连接打印机的解决方法

Win11无法连接打印机&#xff1f;近期有部分Win11用户在使用打印机时出现了电脑无法连接打印机的情况&#xff0c;导致无法正常打印&#xff0c;这是怎么回事呢&#xff1f;那么有没有什么办法恢复呢&#xff1f;下面小编就给大家分享一下详细的解决方法&#xff0c;有需要的朋…

安装打印机驱动仍连接不了打印机

打印机驱动安装了&#xff0c;但是使用打印机时却识别不了。很有可能是没有启动“Print Spooler” 打开【计算机管理】&#xff0c;点击左边的菜单栏的【服务】&#xff0c;找到【Print Spooler】并右键启动

计算机ip无法连接打印机,网络打印机无法连接的原因与解决办法-电脑故障

现在网络打印机很普及&#xff0c;我也接触过几款网络打印机&#xff0c;也遇到类似网络打印机无法打印这样的故障&#xff0c;下面是我总结网络打印机无法连接(打印机共享怎么设置)的解决方法&#xff0c;希望对大家有帮助&#xff1a; 1、首先确定计算机是否可以连接网络打印…

计算机无法连接到打印机主机,电脑连接不上打印机怎么办

我们工作的时少不了使用打印机&#xff0c;可是出现打印机无法连接是怎么回事呢?电脑连接不上打印机怎么办呢?小编为大家介绍一下解决电脑连接不上打印机的具体操作步骤&#xff0c;下面大家跟着学习啦一起来了解一下吧。 电脑连接不上打印机解决方法 第一步&#xff1a;如果…

Windows无法连接到打印机怎么办?快收藏这些正确做法!

案例&#xff1a;Windows无法连接到打印机怎么办&#xff1f; “朋友们朋友们&#xff0c;最近为了备考国考&#xff0c;我特地买了个打印机回来打印资料&#xff0c;但是我的Windows无法连接到打印机&#xff0c;这是为什么呢&#xff1f;有没有知道Windows应该怎么连接打印机…