今天来写个游戏,飞机大战

1,布局

2,思路

1,动态创建自己的飞机 让它在规定的区域,跟着鼠标运动。

2,在自己飞机的上方,间隔1s生成子弹。子弹往上移动 当top:0 子弹消失

3,每隔1s 产生敌机  top 0,left 随机,敌机向下移动,敌机超过边距时。敌机消失。

4,子弹和敌机相遇时。子弹和敌机同时消失

3,代码

1,动态创建自己的飞机 让它在规定的区域,跟着鼠标运动。

  let view = document.getElementById('view');
// 创建自己的飞机
let air = document.createElement('div');
air.id = 'air'
document.body.appendChild(air)
document.onmousemove = function (e) {
e = e || window.event
// 边距
let aX = view.offsetLeft < e.clientX - air.offsetWidth / 2 && e.clientX + air.offsetWidth / 2 < view.offsetLeft + view.offsetWidth
let aY = view.offsetTop < e.clientY - air.offsetHeight / 2 && e.clientY + air.offsetHeight / 2 < view.offsetTop + view.offsetHeight
if (aX&&aY) {
air.style.left = e.clientX - air.offsetWidth / 2 + 'px';
air.style.top = e.clientY - air.offsetHeight / 2 + 'px'
}
}

 

2,在自己飞机的上方,间隔1s生成子弹。子弹往上移动 当top:0 子弹消失

  //获取区域
let view = document.getElementById('view');
// 创建自己的飞机
let air = document.createElement('div');
air.id = 'air'
document.body.appendChild(air)
document.onmousemove = function (e) {
e = e || window.event
// 边距
let aX = view.offsetLeft < e.clientX - air.offsetWidth / 2 && e.clientX + air.offsetWidth / 2 < view.offsetLeft + view.offsetWidth
let aY = view.offsetTop < e.clientY - air.offsetHeight / 2 && e.clientY + air.offsetHeight / 2 < view.offsetTop + view.offsetHeight
if (aX && aY) {
air.style.left = e.clientX - air.offsetWidth / 2 + 'px';
air.style.top = e.clientY - air.offsetHeight / 2 + 'px'
ObJ_billet.bif=true
}
}
let caerBl_time=setInterval(
function () {
if (ObJ_billet.bif){
//在自己飞机的上方
caeationBillet() }
},1000 ) //用来保存子弹数据
let ObJ_billet = {
name: 'billet_',
num: 0,
//是否在区域
bif:false,
arr: []//保存id,xy坐标
} function run_Billet(bl,i) {
let runBl_time=setInterval(function () {
bl.style.top=bl.offsetTop-1+'px'
ObJ_billet.arr[i] = bl.id + '|' +bl.offsetLeft + '|' +bl.offsetTop
if (bl.offsetTop<0){
bl.parentNode.removeChild(bl); clearInterval(runBl_time)
}
},30)
} //xy 坐标
function caeationBillet() {
let billet = document.createElement('div')
billet.className = 'bullet'
billet.id = ObJ_billet.name + ObJ_billet.num;
document.body.appendChild(billet)
//子弹在飞机上方
billet.style.left = air.offsetLeft+air.offsetWidth/2+ 'px'
billet.style.top =air.offsetTop-billet.offsetHeight-1+ 'px'
//保存数据
ObJ_billet.arr[ObJ_billet.num] = billet.id + '|' +billet.offsetLeft + '|' +billet.offsetTop
//子弹运动
run_Billet(billet,ObJ_billet.num)
// 自增1
ObJ_billet.num+=1
//挡子弹有最多100个
if (ObJ_billet.num>=100){
ObJ_billet.num=0;
} }  

3,每隔1s 产生敌机  top 0,left 随机,敌机向下移动,敌机超过边距时。敌机消失。

<script>
//获取区域
let view = document.getElementById('view');
// 创建自己的飞机
let air = document.createElement('div');
air.id = 'air'
document.body.appendChild(air)
document.onmousemove = function (e) {
e = e || window.event
// 边距
let aX = view.offsetLeft < e.clientX - air.offsetWidth / 2 && e.clientX + air.offsetWidth / 2 < view.offsetLeft + view.offsetWidth
let aY = view.offsetTop < e.clientY - air.offsetHeight / 2 && e.clientY + air.offsetHeight / 2 < view.offsetTop + view.offsetHeight
if (aX && aY) {
air.style.left = e.clientX - air.offsetWidth / 2 + 'px';
air.style.top = e.clientY - air.offsetHeight / 2 + 'px'
ObJ_billet.bif=true
}
}
let caerBl_time=setInterval(
function () {
if (ObJ_billet.bif){
//在自己飞机的上方
caeationBillet()
caeationHair() }
},1000 ) //用来保存子弹数据
let ObJ_billet = {
name: 'billet_',
num: 0,
//是否在区域
bif:false,
arr: []//保存id,xy坐标
}
let ObJ_Hair = {
name: 'hair_',
num: 0,
arr: []//保存id,xy坐标
}
// 子弹运动
function run_Billet(element,i) {
let runBl_time=setInterval(function () {
element.style.top=element.offsetTop-1+'px'
ObJ_billet.arr[i] = element.id + '|' +element.offsetLeft + '|' +element.offsetTop
// 超出边界消失
if (element.offsetTop<0){
element.parentNode.removeChild(element);
clearInterval(runBl_time)
}
},30)
} // 敌机运动
function run_Hair(element,i) {
let runHair_time=setInterval(function () {
element.style.top=element.offsetTop+1+'px'
ObJ_Hair.arr[i] = element.id + '|' +element.offsetLeft + '|' +element.offsetTop
// 超出边界消失
if (element.offsetTop>view.offsetHeight-element.offsetHeight){
element.parentNode.removeChild(element);
clearInterval(runHair_time)
}
},30)
} //创建子弹
function caeationBillet() {
let billet = document.createElement('div')
billet.className = 'bullet'
billet.id = ObJ_billet.name + ObJ_billet.num;
document.body.appendChild(billet)
//子弹在飞机上方
billet.style.left = air.offsetLeft+air.offsetWidth/2+ 'px'
billet.style.top =air.offsetTop-billet.offsetHeight-1+ 'px'
//保存数据
ObJ_billet.arr[ObJ_billet.num] = billet.id + '|' +billet.offsetLeft + '|' +billet.offsetTop
//子弹运动
run_Billet(billet,ObJ_billet.num)
// 自增1
ObJ_billet.num+=1
//挡子弹有最多100个
if (ObJ_billet.num>=100){
ObJ_billet.num=0;
}
}
// 创建敌机
function caeationHair() {
let hair = document.createElement('div')
hair.className = 'hair'
hair.id = ObJ_Hair.name + ObJ_Hair.num;
view.appendChild(hair)
//飞机由上往下 left随机大小0到view宽度
let random_L=randomNum(0,view.offsetWidth-hair.offsetWidth)
hair.style.left = random_L+ 'px'
hair.style.top =0+ 'px'
ObJ_Hair.arr[ObJ_Hair.num] = hair.id + '|' +hair.offsetLeft + '|' +hair.offsetTop run_Hair(hair,ObJ_Hair.num)
// 自增1
ObJ_Hair.num+=1
//飞机有最多100个
if (ObJ_Hair.num>=100){
ObJ_Hair.num=0;
}
} //生成从minNum到maxNum的随机数
function randomNum(minNum,maxNum){
return parseInt(Math.random()*(maxNum-minNum+1)+minNum) } </script>

  

4,子弹和敌机相遇时。子弹和敌机同时消失

//搜索所有的子弹,相遇 就被击毙。相遇条件 飞机左<=left 子弹<=you     top 子弹<=飞机
ript>
//获取区域
let view = document.getElementById('view');
// 创建自己的飞机
let air = document.createElement('div');
air.id = 'air'
document.body.appendChild(air)
document.onmousemove = function (e) {
e = e || window.event
// 边距
let aX = view.offsetLeft < e.clientX - air.offsetWidth / 2 && e.clientX + air.offsetWidth / 2 < view.offsetLeft + view.offsetWidth
let aY = view.offsetTop < e.clientY - air.offsetHeight / 2 && e.clientY + air.offsetHeight / 2 < view.offsetTop + view.offsetHeight
if (aX && aY) {
air.style.left = e.clientX - air.offsetWidth / 2 + 'px';
air.style.top = e.clientY - air.offsetHeight / 2 + 'px'
ObJ_billet.bif = true
}
}
let caerBl_time = setInterval(
function () {
if (ObJ_billet.bif) {
//在自己飞机的上方
caeationBillet()
caeationHair()
//搜索所有的子弹,相遇 就被击毙。相遇条件 飞机左<=left 子弹<=you top 子弹<=飞机
for (let i = 0; i < ObJ_billet.arr.length; i++) {
let barr=ObJ_billet.arr[i].split('|')
for (let j=0;j<ObJ_Hair.arr.length;j++){
let harr=ObJ_Hair.arr[j].split('|')//id x y
if (document.getElementById(barr[0])&&document.getElementById(harr[0])){
let yif=parseInt(barr[2])<=parseInt(harr[2]) //Y相遇
let xif=parseInt(barr[1])>=parseInt(harr[1])&&parseInt(barr[1])<=parseInt(harr[1])+34
if (yif&&xif){
//消失元素 关闭记时器
let billet_a=document.getElementById(barr[0])
let hair_a=document.getElementById(harr[0])//获取敌机 billet_a.parentNode.removeChild(billet_a)//删除子弹
hair_a.parentNode.removeChild(hair_a)//删除敌机
clearInterval(runBl_time)
clearInterval(runHair_time)
}}
}
}
}
}, 1000) //用来保存子弹数据
let ObJ_billet = {
name: 'billet_',
num: 0,
bif: false,
//是否在区域
arr: []//保存id,xy坐标
}
let ObJ_Hair = {
name: 'hair_',
num: 0,
arr: []//保存id,xy坐标
}
let runBl_time=null;//子弹定时器
let runHair_time=null;//飞机定时器
// 子弹运动
function run_Billet(element, i) {
runBl_time = setInterval(function () {
element.style.top = element.offsetTop - 1 + 'px'
ObJ_billet.arr[i] = element.id + '|' + element.offsetLeft + '|' + element.offsetTop
// 超出边界消失
if (element.offsetTop < 0) {
element.parentNode.removeChild(element);
clearInterval(runBl_time)
}
}, 30)
} // 敌机运动
function run_Hair(element, i) {
runHair_time = setInterval(function () {
element.style.top = element.offsetTop + 1 + 'px' ObJ_Hair.arr[i] = element.id + '|' + element.offsetLeft + '|' + element.offsetTop + '|' + ''
// 超出边界消失
if (element.offsetTop > view.offsetHeight - element.offsetHeight) {
element.parentNode.removeChild(element);
clearInterval(runHair_time)
}
}, 30)
} //创建子弹
function caeationBillet() {
let billet = document.createElement('div')
billet.className = 'bullet'
billet.id = ObJ_billet.name + ObJ_billet.num;
document.body.appendChild(billet)
//子弹在飞机上方
billet.style.left = air.offsetLeft + air.offsetWidth / 2 + 'px'
billet.style.top = air.offsetTop - billet.offsetHeight - 1 + 'px'
//保存数据
ObJ_billet.arr[ObJ_billet.num] = billet.id + '|' + billet.offsetLeft + '|' + billet.offsetTop + '|' + '1'
//子弹运动
run_Billet(billet, ObJ_billet.num)
// 自增1
ObJ_billet.num += 1
//挡子弹有最多100个
if (ObJ_billet.num >= 100) {
ObJ_billet.num = 0;
}
} // 创建敌机
function caeationHair() {
let hair = document.createElement('div')
hair.className = 'hair'
hair.id = ObJ_Hair.name + ObJ_Hair.num;
document.body.appendChild(hair)
//飞机由上往下 left随机大小0到view宽度
let random_L = randomNum(view.offsetLeft, view.offsetLeft + view.offsetWidth - hair.offsetWidth)
hair.style.left = random_L + 'px'
hair.style.top = 0 + 'px'
ObJ_Hair.arr[ObJ_Hair.num] = hair.id + '|' + hair.offsetLeft + '|' + hair.offsetTop run_Hair(hair, ObJ_Hair.num)
// 自增1
ObJ_Hair.num += 1
//飞机有最多100个
if (ObJ_Hair.num >= 100) {
ObJ_Hair.num = 0;
}
} //生成从minNum到maxNum的随机数
function randomNum(minNum, maxNum) {
return parseInt(Math.random() * (maxNum - minNum + 1) + minNum) }

总结

BUG 有点多 效果可以实现 有点卡顿  等我调试 调试  大战BUG

最新文章

  1. 刀锋上前行!绕过Ramint蠕虫病毒直接脱壳
  2. 移位运算符(JAVA)
  3. 【OpenStack】OpenStack系列14之Dashboard定制开发
  4. Git and GitHub
  5. 第三十八篇、给UITabBar按钮的动画效果
  6. ExtJs Tree加载选项卡,选项卡加载页面不用iframe
  7. 【HDOJ】1686 Oulipo
  8. 通过js来修改div的style(background,border,。。。。。。。)
  9. 在PostgreSQL自定义一个“优雅”的type
  10. Linux 文本编辑器vi命令
  11. Webpack模块的导出以及之间的依赖引用
  12. tp5 自定义排序
  13. ASP.NET Core SignalR中的流式传输
  14. python编程从入门到实践 alien invasion 项目源码
  15. 使用IntelliJ Idea新建SpringBoot项目
  16. pandas使用
  17. (转)游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
  18. 170322、Spring Boot 性能优化之将Servlet容器变成Undertow
  19. 一条SQL引起的雪崩
  20. JavaWeb--------JSP语法基础学习(特别适合入门)

热门文章

  1. JavaScript动态实现div窗口弹出&amp;消失功能
  2. 六十三、SAP中的逻辑运算符
  3. Vue.js(25)之 vue全局配置api介绍
  4. 安装完CUDA Toolkit,VS2010调试项目控制台一闪而过
  5. Java中的static关键字和new关键字作用介绍
  6. JavaScript(第十一天 9.24)
  7. 【Android】家庭记账本手机版开发报告五
  8. Spring入门之二-------SpringIoC之实例化Bean以及注入Bean
  9. Egret Engine 2D - 遮罩
  10. PHP四种输出语句