JavaScript仿微信打飞机游戏
发布时间 - 2026-01-11 00:59:41 点击率:次本文实例为大家分享了js微信打飞机游戏的具体代码,供大家参考,具体内容如下

首先实现微信打飞机游戏,首先会有自己和敌机,采用canvas绘图来生成自己和敌人。
1、生成自己,且可以通过左右键来进行左右移动。
//生成自己,且可以左右移动
//控制飞机向右移动的函数
function moveRight(event){
context.clearRect(aligh,100,47,47);
//防止飞机移除背景外
if(aligh < 260){
var img = new Image();
img.src = "../images/self.png";
img.onload = function(){
context.drawImage(img, aligh,100);
}
aligh += 10 ;
}
//当飞机即将移出背景外时,让它停在最右端
if (aligh == 260){
var img = new Image();
img.src = "../images/self.png";
img.onload = function(){
context.drawImage(img, 260,100);
}
}
}
//控制飞机向左移动的函数
function moveLeft(event){
context.clearRect(aligh,100,47,47);
//防止飞机移出最左边的边界
if(aligh > 0){
var img = new Image();
img.src = "../images/self.png";
img.onload = function(){
context.drawImage(img, aligh,100);
}
aligh -= 10 ;
}
//使其控制在最左侧
if (aligh == 0){
var img = new Image();
img.src = "../images/self.png";
img.onload = function(){
context.drawImage(img, 0,100);
}
}
}
//判断按下的是哪个键,然后控制飞机左右移动
document.onkeydown = function(event){
if(event.keyCode == 37){
moveLeft();
}
if(event.keyCode == 39){
moveRight();
}
}
2、生成敌机。敌机就是在背景上随机生成图片。每隔一秒使其从上面下落。
var createId = setInterval(function(){
var top = 0+'px';
var enemy = document.createElement("img");
enemy.src = "../images/enemy.png";
//生成随机的位置
var randomleft = Math.floor(Math.random() * 300) ;
//如果生成的位置出现在背景外,则就取260
left = randomleft > 260 ? 260 + 'px': randomleft + 'px';
leftArr.push(left); //保存每个敌机的距左边的距离,方便碰撞检测的计算
arrPic.push(enemy); //将每个敌机的图片保存在数组中,方便碰撞检测后移除
main.appendChild(enemy);
enemy.style.paddingLeft = left ;
enemy.style.paddingTop = top;
var spandom = $("#main>img:last-child");//这儿利用jquery找到最后一个img
//让最后一个img动起来。则就相当于为每一个img都绑定了动画
spandom.animate({"paddingTop":420},6000,function(){
//当下落到底部时移除元素
this.remove();
arrPic.splice(0,1); //从数组中移除图片
leftArr.splice(0,1); //从数组中移除距离
fallCount ++; //检测下落了多少个飞机,超过十个没被打中,游戏就结束
});
//如果落下的飞机数超过十个没有被打中,则游戏结束
if(fallCount > 10){
clearInterval(createId);
clearInterval(crashId);
alert("当前得分 :"+count+" , 很遗憾,游戏结束!")
}
},1000);
3、现在主要是碰撞检测。每隔2.2秒进行一次检测,因为检测台频繁的话,直接长按向左向右键,都可以直接消除。就没有意义了
function checkCrash(){
crashId = setInterval(function(){
//由于每次自由落下的飞机在上面函数中都被移除了。所以leftArr数组中保存的就是当前页面存在的飞机的左距离数组。
for(var i = 0; i < leftArr.length; i++)
{
//首先将两种都转换成int型进行比较
var tempL = parseInt(leftArr[i]);
var tempA = parseInt(aligh); //表示自己距左侧的位置
//当自己的中心距离处于敌机的左右两侧范围内,则表示被击中
if(tempL <= (tempA + 20) && (tempA + 20) <= (tempL + 40)){
arrPic[i].remove(); //碰撞检测,移除敌机的图片
arrPic.splice(i,1); //从图片数组中移除图片
leftArr.splice(i,1); //从记录敌机左侧距离数组中移除该敌机的距离
count++;
score.innerHTML = "当前得分 "+count;
break; //检测到之后直接跳出循环,进行下一个2.2秒的碰撞检测
}
}
},2200);
}
checkCrash();
这个游戏还不太完整,没有生成子弹。大部分功能都已经实现了。
4、效果图如下:
最后附上源代码:
html&css
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8"/ >
<title></title>
<script type="text/javascript" src = "./fightFlight.js"></script>
<script src = "../jQuery/jquery-3.2.0.min.js"></script>
<style type="text/css">
*{
margin: 0px;
padding: 0px;
}
#main{
width: 300px;
height: 500px;
border:1px solid red;
margin: 0 auto;
}
#my{
position: absolute;
z-index: 2;
top:350px;
}
#background{
position: absolute;
z-index: 1;
width: 300px;
height:500px;
border: 1px solid green;
background-image: url(../images/background.jpg);
}
img{
position: absolute;
z-index: 2;
}
#enmey{
width: 50px;
height: 50px;
}
#score{
position: absolute;
margin-left: 50%;
left: 150px;
top:100px;
width: 160px;
font-size: 20px;
font-family: "微软雅黑";
font-weight: bold;
line-height: 70px;
text-align: center;
}
</style>
</head>
<body>
<div id = "main">
<canvas id = "background"></canvas>
<canvas id = "my"></canvas>
<div id = "score">当前得分:0</div>
</div>
</body>
</html>
JavaScript
var main = document.getElementById('main');
var my = document.getElementById('my');
var score = document.getElementById("score");
var context = my.getContext('2d');
var crashId;
var fallCount = 0; //记录没被打中的飞机数,如果超过10,游戏结束
var aligh = 0 ;
var count = 0; //记录打中的飞机数,即当前得分
var leftArr = [];
var arrPic = [];
var left;
var img = new Image();
img.src = "../images/self.png";
img.onload = function(){
context.drawImage(img,aligh,100);
}
//生成自己,且可以左右移动
function move(event){
event = EventUtil.getEvent(event);
context.clearRect(aligh,100,47,47);
if(event.keyCode == 39 && aligh < 260 ){
var img = new Image();
img.src = "../images/self.png";
img.onload = function(){
context.drawImage(img, aligh,100);
}
aligh += 10 ;
}
if (aligh == 260){
var img = new Image();
img.src = "../images/self.png";
img.onload = function(){
context.drawImage(img, 260,100);
}
}
}
document.onkeypress = move;
//随机生成敌机
(function(){
var createId = setInterval(function(){
var top = 0+'px';
var enemy = document.createElement("img");
enemy.src = "../images/enemy.png";
var randomleft = Math.floor(Math.random() * 300) ;
left = randomleft > 260 ? 260 + 'px': randomleft + 'px';
leftArr.push(left); //保存每个敌机的距左边的距离,方便碰撞检测的计算
arrPic.push(enemy); //将每个敌机的图片保存在数组中,方便碰撞检测后移除
main.appendChild(enemy);
enemy.style.paddingLeft = left ;
enemy.style.paddingTop = top;
var spandom = $("#main>img:last-child");//找到最后一个span
spandom.animate({"paddingTop":420},6000,function(){
//移除元素
this.remove();
arrPic.splice(0,1); //移除图片
leftArr.splice(0,1); //从数组中移除距离
fallCount ++;
});
//如果落下的飞机数超过十个没有被打中,则游戏结束
if(fallCount >= 10){
clearInterval(createId);
clearInterval(crashId);
alert("当前得分 :"+count+" , 很遗憾,游戏结束!")
}
},1000);
})();
//碰撞检测
function checkCrash(){
crashId = setInterval(function(){
for(var i = 0; i < leftArr.length; i++)
{
var tempL = parseInt(leftArr[i]);
var tempA = parseInt(aligh);
if(tempL <= (tempA + 20) && (tempA + 20) <= (tempL + 40)){
arrPic[i].remove(); //碰撞检测,移除敌机的图片
count++;
score.innerHTML = "当前得分 "+count;
continue;
}
}
console.log(count);
},2200);
}
checkCrash();
}
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏 玩不停
java经典小游戏汇总
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js微信打飞机游戏
# js微信打飞机
# js打飞机游戏
# JS面向对象实现飞机大战
# js实现飞机大战游戏
# JavaScript用200行代码制作打飞机小游戏实例
# three.js绘制地球、飞机与轨迹的效果示例
# JavaScript原生编写《飞机大战坦克》游戏完整实例
# 纯javascript模仿微信打飞机小游戏
# JavaScript制作简易的微信打飞机
# JavaScript 小型打飞机游戏实现原理说明
# js实现飞机大战小游戏
# 移除
# 组中
# 经典小游戏
# 右键
# 使其
# 每隔
# 很遗憾
# 自己的
# 的是
# 移出
# 打飞机
# 会有
# 不太
# 出现在
# 两种
# 就没
# 微软
# 可以通过
# 给大家
# 可以直接
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速搭建支持数据库操作的智能建站平台?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Python正则表达式进阶教程_复杂匹配与分组替换解析
电商网站制作价格怎么算,网上拍卖流程以及规则?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
大连 网站制作,大连天途有线官网?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
网站制作价目表怎么做,珍爱网婚介费用多少?
在线教育网站制作平台,山西立德教育官网?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
如何在新浪SAE免费搭建个人博客?
图册素材网站设计制作软件,图册的导出方式有几种?
javascript中的try catch异常捕获机制用法分析
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
开心动漫网站制作软件下载,十分开心动画为何停播?
如何用低价快速搭建高质量网站?
香港服务器租用每月最低只需15元?
QQ浏览器网页版登录入口 个人中心在线进入
在线制作视频的网站有哪些,电脑如何制作视频短片?
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
公司网站制作价格怎么算,公司办个官网需要多少钱?
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
原生JS获取元素集合的子元素宽度实例
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel如何实现数据库事务?(DB Facade示例)
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
如何挑选优质建站一级代理提升网站排名?
jQuery中的100个技巧汇总
如何用wdcp快速搭建高效网站?
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
JavaScript Ajax实现异步通信
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel怎么实现模型属性的自动加密
Python面向对象测试方法_mock解析【教程】
使用C语言编写圣诞表白程序
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Swift中switch语句区间和元组模式匹配
专业商城网站制作公司有哪些,pi商城官网是哪个?
微信小程序 wx.uploadFile无法上传解决办法

