坚持30s小游戏


用到:

  1. 弹性运动
  2. 拖拽事件
  3. 碰撞检测
  4. 定时器清除
  5. 单对象编程
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="./css/consist30s.css">
</head>
<body><span>游戏马上开始</span><div class="outer"><!-- <div class="green"></div> --><div class="red"></div></div><p>游戏规则:坚持30s不死</p><script src="./js/consist30s.js"></script>
</body>
</html>
*{padding: 0;margin: 0;list-style: none;
}
body{padding: 30px;background: #326b86;color: #fff;font-size: 16px;font-weight: 600;text-align: center;
}
.outer{position: relative;width: 450px;height: 450px;background: #222;margin: 20px auto;
}
.red{position: absolute;top: 195px;left: 195px;width: 60px;height: 60px;background: red;opacity: .5;border-radius: 50%;
}
.green{position: absolute;width: 50px;height: 50px;background: green;border-radius: 50%;opacity: .5;
}
/*** 1.随机生成绿色小球在顶部* * 2.绿球会产生运动* * 3.弹性运动* * 4.生成多个小绿球* * 5.红球拖拽* * 6.红球和绿球之间的碰撞检测* * 7.定时器清除* * 8.单对象编程*/var game = {//获得红球redBall:document.getElementsByClassName('red')[0],greenArr:[],flag: true,num:0,numRun: document.getElementsByTagName('span')[0],movePlus:{outer:document.getElementsByClassName('outer')[0],//舞台iWidth:document.getElementsByClassName('outer')[0].offsetWidth,//舞台宽iHeight:document.getElementsByClassName('outer')[0].offsetHeight,//舞台高ispeedX:10,//绿球速度xispeedY:10,//绿球速度y},init:function() {console.log('游戏开始');this.createBall(this.movePlus) //创建小绿球this.dragRedBall(this.movePlus);//红球拖拽this.timeRun();//开始计时},timeRun:function () {var self = this;this.timer = setInterval(function () {if(self.num >= 30){alert('真男人')self.clearTimer()}self.num++;self.numRun.innerHTML = '坚持了' + self.num + '秒';},1000)},createBall:function(obj) {var plus = obj;var self = this;function Green(plus) { //构造函数this.ball = document.createElement('div');//创建绿球this.ball.className = 'green';plus.outer.appendChild(this.ball);//添加进舞台this.subWidth = Math.floor(Math.random()*(plus.iWidth - this.ball.offsetWidth));console.log(this.subWidth)this.ball.style.left = this.subWidth + 'px';this.speedX = Math.floor(Math.random()*plus.ispeedX) + 1;this.speedY = Math.floor(Math.random()*plus.ispeedY) + 1;this.iWidth = plus.iWidth;this.iHeight = plus.iHeight;}var green = new Green(plus);this.greenArr.push(green);this.createTimer = setInterval(function () {var green = new Green(plus);self.greenArr.push(green)},2000)this.moveBall();},moveBall:function() {var self = this;this.goTimer = setInterval(function() {for(var i = 0; i < self.greenArr.length; i++){self.crashCheck(self.greenArr[i])//碰撞检测var newLeft = self.greenArr[i].ball.offsetLeft +  self.greenArr[i].speedX;var newTop =  self.greenArr[i].ball.offsetTop +  self.greenArr[i].speedY;//弹性运动self.greenArr[i].ball.style.left = newLeft + 'px';self.greenArr[i].ball.style.top = newTop + 'px';if(newLeft < 0) {self.greenArr[i].speedX *=-1;}else if (newLeft > self.greenArr[i].iWidth - self.greenArr[i].ball.offsetWidth){self.greenArr[i].speedX *=-1;}else if (newTop < 0){self.greenArr[i].speedY *=-1;}else if (newTop > self.greenArr[i].iHeight - self.greenArr[i].ball.offsetHeight){self.greenArr[i].speedY *=-1;}}}, 50)},dragRedBall:function(obj) {var self = this;this.redBall.onmousedown = function(e) {var e_x = e.pageX;var e_y = e.pageY;document.onmousemove = function(e) {var chax = e.pageX - e_x;var chay = e.pageY - e_y;self.redBall.style.left = chax + self.redBall.offsetLeft + 'px';self.redBall.style.top = chay + self.redBall.offsetTop + 'px';//更新上一个点,产生差值e_x = e.pageX;e_y = e.pageY;//判断边界if(self.redBall.offsetLeft < 0  && self.flag){alert('Game Over!!');self.flag = false;self.clearTimer();window.location.reload();}else if (self.redBall.offsetLeft > (obj.iWidth - self.redBall.offsetWidth) && self.flag){alert('Game Over!!');self.flag = false;self.clearTimer();window.location.reload();}else if (self.redBall.offsetTop < 0 && self.flag) {alert('Game Over!!');self.flag = false;self.clearTimer();window.location.reload();}else if(self.redBall.offsetTop > (obj.iHeight - self.redBall.offsetHeight) && self.flag){console.log(self.redBall.offsetTop);console.log(obj.iHeight,self.redBall.offsetTop)alert('Game Over!!');self.flag = false;self.clearTimer();window.location.reload();}}this.onmouseup = function(e) {document.onmousemove = null;}}},crashCheck:function (green) {this.redBall;//绿球圆心点var greenX1 = green.ball.offsetLeft + Math.floor(green.ball.offsetWidth/2);var greenY1 = green.ball.offsetTop + Math.floor(green.ball.offsetHeight/2);//红球圆心var redX2 = this.redBall.offsetLeft + Math.floor(this.redBall.offsetWidth/2);var redY2 = this.redBall.offsetTop + Math.floor(this.redBall.offsetHeight/2);// x1-x2var dx = Math.abs(greenX1 - redX2);var dy = Math.abs(greenY1 - redY2);//两点距离var distance = Math.floor(Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)));console.log(distance)var R = this.redBall.offsetWidth/2 + green.ball.offsetWidth/2;if(distance < R && this.flag){alert('Game Over!!');this.flag = false;this.clearTimer();window.location.reload();}},clearTimer:function () {clearInterval(this.timer);clearInterval(this.createTimer);clearInterval(this.goTimer);}}
game.init();

弹性运动:
在绿色小球碰到四个壁时要方向要发生改变,运动方向变成原来的-1
拖拽事件:鼠标点下去时的点,和移动过程中产生的新点之间的差值就是移动的距离,移动过程中要不断更新上一个点的值,保证持续产生差值;
碰撞检测:
当两个点的中心距离小于两个球的半径之和即为碰撞
最后游戏结束后要把所有的定时器给清除

html+css+js:坚持30s小游戏相关推荐

  1. HTML+CSS+JS实现的小游戏-剪刀石头布

    效果 代码 .t1.html <!DOCTYPE html> <html lang="en"> <head><meta charset=& ...

  2. JS贪吃蛇小游戏(DOM (html+css+js))

    游戏截图: html部分: <!DOCTYPE html> <html lang="en"> <head><meta charset=&q ...

  3. 使用JS实现2048小游戏

    JS实现2048小游戏源码 效果图: 代码如下,复制即可使用: (适用浏览器:360.FireFox.Chrome.Opera.傲游.搜狗.世界之窗. 不支持Safari.IE8及以下浏览器.) &l ...

  4. html+css+js实现网页拼图游戏

    代码地址如下: http://www.demodashi.com/demo/14449.html 项目描述 使用 html+js+css 实现一个网页拼图游戏,可支持简单,中等,困难三种难度. 演示效 ...

  5. 利用html css javascript写翻翻乐小游戏

    利用html css javascript写翻翻乐小游戏 废话不多说,先看效果 代码放到文章末尾,不想看代码解释的可以直接跳过到后面直接下载 我写这个小游戏的过程 1.准备图片    我在觅元素上找了 ...

  6. 用Three.js写h5小游戏-3d飞机大战

    用Three.js写h5小游戏-飞机大战 博主的话 运行图片 目录路径![在这里插入图片描述](https://img-blog.csdnimg.cn/20190829103702978.jpg?x- ...

  7. 台式小风扇(HTML+CSS+JS练手小项目)

    台式小风扇(HTML+CSS+JS练手小项目) 功能介绍 外观展示 HTML代码 CSS代码 JS代码 总结 功能介绍 前段时间看到这样的风扇特效,感觉还挺好玩,就自己也写一个练练手. 风扇有四个档位 ...

  8. html5猜数字游戏代码,js猜数字小游戏的简单实现代码

    复制代码 代码如下: 简易计算机 //获取随机数 function GetRandomNum(Min,Max) { var Range = Max - Min; var Rand = Math.ran ...

  9. pixi.js v5 微信小游戏版本

    pixi.js v5 微信小游戏群 881784250 历尽千辛万苦, pixi.js v5版本出了. pixi.js是相当完美的 性能是webgl 2d中最强的之一,也许可以把之一去掉 免费不收费 ...

最新文章

  1. GAN版马里奥创作家来了:一个样本即可训练,生成关卡要素丰富 | 开源
  2. EZ430 Chronos 自带程序源码:test 示范程序
  3. 产品经理经验谈:从产品经理、用户、产品的角度重新认知产品运营
  4. c语言中二维数组怎么,c语言中什么是二维数组
  5. JVM系列之内存泄漏
  6. hadoop HA 之 QJM
  7. urllib2.URLError: urlopen error [Errno 111] Connection refused
  8. php mysql实现下拉列表查询_php mysql如何实现通过下拉框查询显示数据库中的数据...
  9. mybatisplus 操作另一个数据库的数据_实例分析:python操作数据库项目
  10. C#中new的用法,及与override的区别
  11. 2022年电工杯数学建模A题思路
  12. dwg格式的计算机图,看图纸(DWG文件浏览器)
  13. 检测UDP端口是否畅通方法
  14. 读取xlsx,根据模板图片批量添加文字生成相关图片,如证书,奖状,名片等
  15. MacBook M1 虚拟机安装Windows7 Xp
  16. Linux make 报错 pkg-config:not found
  17. 网站换服务器步骤,【大拿分享】六个步骤搞定更换网站服务器
  18. Tableau学习笔记⑦(数据分层、数据组、数据集)
  19. 使用XMind打开.mmap文件不显示问题
  20. 学大伟业 Day 6 培训总结

热门文章

  1. 计算机的硬盘 内存在哪查到,dos下通过wmic命令查看硬盘和内存/CPU信息(windows自带命令查看硬件信息)...
  2. BZOJ 1502 月下柠檬树(simpson积分)
  3. Python爬虫自学笔记(五)Scrapy框架
  4. mysql对分组的数据合计_MySQL汇总数和分组数据
  5. Schlumberger.ECLIPSE.2014.1安装提示password failed check flexlm..报错解决方法
  6. 傅立叶变换- 阐释与--理解
  7. 单片机 ADC0809模数转换实验
  8. 青春日志html,伤感青春日志语录
  9. vue 、 在element-ui的el-table组件中 使用 el-select绑定对象时value-key的注意事项
  10. 【Vue2 组件间数据的双向绑定】