JavaScript仿微信打飞机游戏


Posted in Javascript onJuly 05, 2020

本文实例为大家分享了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、效果图如下:

JavaScript仿微信打飞机游戏

JavaScript仿微信打飞机游戏

最后附上源代码:

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();

}

更多有趣的经典小游戏实现专题,分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery LigerUI 使用教程表格篇(1)
Jan 18 Javascript
JS动态添加option和删除option(附实例代码)
Apr 01 Javascript
JQuery中SetTimeOut传参问题探讨
May 10 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
文本框水印提示效果的简单实现代码
Feb 22 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
May 11 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
Mar 03 Javascript
JSON遍历方式实例总结
Dec 07 Javascript
JQuery的Pager分页器实现代码
May 03 Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
Nov 23 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
Dec 09 Javascript
fullPage.js和CSS3实现全屏滚动效果
May 05 #Javascript
jquery dataTable 获取某行数据
May 05 #jQuery
js实现数字递增特效【仿支付宝我的财富】
May 05 #Javascript
js和jquery中获取非行间样式
May 05 #jQuery
值得分享和收藏的xmlplus组件学习教程
May 05 #Javascript
微信小程序中多个页面传参通信的学习与实践
May 05 #Javascript
微信小程序 开发之全局配置
May 05 #Javascript
You might like
实现树状结构的两种方法
2006/10/09 PHP
php中批量替换文件名的实现代码
2011/07/20 PHP
url decode problem 解决方法
2011/12/26 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
php中生成随机密码的自定义函数代码
2013/10/21 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
php数组键名技巧小结
2015/02/17 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
Javascript 复制数组实现代码
2009/11/26 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
python 通过exifread读取照片信息
2020/12/24 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
学习雷锋月活动总结
2014/07/03 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
公司领导班子对照材料
2014/08/18 职场文书
科学发展观标语
2014/10/08 职场文书
一文弄懂MySQL索引创建原则
2022/02/28 MySQL