js实现带积分弹球小游戏


Posted in Javascript onJuly 21, 2020

本文实例为大家分享了js实现带积分的弹球小游戏的具体代码,供大家参考,具体内容如下

注:如果小球与底部方块的角碰撞,积分可能有些许bug

<style>
  #box {
   width: 400px;
   height: 400px;
   border: 1px solid #000000;
   margin: 50px auto;
   position: relative;
  }

  #ball {
   height: 60px;
   width: 60px;
   border-radius: 50%;
   background-color: red;
   position: absolute;
   left: 0;
   top: 0;
  }

  #block {
   width: 100px;
   height: 20px;
   position: absolute;
   left: 150px;
   bottom: 0;
   background-color: black;
  }

  #count {
   color: #ff0000;
   font-size: 18px;
   position: absolute;
   width: 20px;
   height: 20px;
   left: -20px;
   top: 0;
  }
</style>
<body>
 <div id="box">
  <div id="count">0</div>
  <div id="ball"></div>
  <div id="block"></div>
 </div>
</body>
<script>
 var oBox = document.querySelector('#box');
 var oBall = document.querySelector('#ball');
 var oBlock = document.querySelector('#block');
 var oCount = document.querySelector('#count');

 var speedBlock = 5;
 var speedX = 5;
 var speedY = 4;

 var maxLeft = oBox.clientWidth - oBall.offsetWidth;
 var maxTop = oBox.clientHeight - oBall.offsetHeight;
 var max = oBox.clientWidth - oBlock.offsetWidth;

 setInterval(function () {
  var left = oBall.offsetLeft;
  var top = oBall.offsetTop;

  left += speedX;
  top += speedY;

  if (left < 0 || left > maxLeft) {
   speedX = -speedX;
  }

  if (top < 0) {
   speedY *= -1;
  }

  var r = oBall.offsetWidth / 2;

  if (left >= oBlock.offsetLeft - r && // 左边线碰撞条件
   left <= oBlock.offsetLeft - r + oBlock.offsetWidth && // 右边线碰撞条件
   top >= maxTop - oBlock.offsetHeight   // 下边线碰撞条件
  ) {
   // console.log('撞上了');
   speedY = -Math.abs(speedY);
   // speedY *= -1;
   oCount.innerHTML = oCount.innerHTML * 1 + 1;
  }

  if (top > maxTop) {
   left = 0;
   top = 0;
  }

  oBall.style.left = left + 'px';
  oBall.style.top = top + 'px';

 }, 50);

 document.onkeydown = function (e) {
  var ev = event || e;
  var keyCode = ev.keyCode || ev.which;

  var left = oBlock.offsetLeft;

  if (keyCode === 37) {
   left -= speedBlock;
  }
  if (keyCode === 39) {
   left += speedBlock;
  }

  if (left <= 0) {
   left = 0
  }

  if (left >= max) {
   left = max;
  }

  oBlock.style.left = left + 'px';
 }
</script>

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

Javascript 相关文章推荐
jquery创建表格(自动增加表格)代码分享
Dec 25 Javascript
JavaScript实现存储HTML字符串示例
Apr 21 Javascript
jquery验证邮箱格式并显示提交按钮
Nov 07 Javascript
javascript replace()第二个参数为函数时的参数用法
Dec 26 Javascript
jQuery中DOM节点删除之empty与remove
Jan 20 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
Apr 10 Javascript
JavaScript中click和onclick本质区别与用法分析
Jun 07 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
Aug 20 Javascript
JS实现秒杀倒计时特效
Jan 02 Javascript
Vue实现背景更换颜色操作
Jul 17 Javascript
浅谈JavaScript中this的指向问题
Jul 28 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
Nov 04 Javascript
在vue中created、mounted等方法使用小结
Jul 21 #Javascript
解决vue的touchStart事件及click事件冲突问题
Jul 21 #Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 #Javascript
解决Vue中的生命周期beforeDestory不触发的问题
Jul 21 #Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 #Javascript
vue 清空input标签 中file的值操作
Jul 21 #Javascript
Vue-resource安装过程及使用方法解析
Jul 21 #Javascript
You might like
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
PHP中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
表格 隔行换色升级版
2009/11/07 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
python实现密码强度校验
2020/03/18 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
一些Solaris面试题
2013/03/22 面试题
怎样有效的进行自我评价
2013/10/06 职场文书
义和团口号
2014/06/17 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
告诉你创业计划书的8个实用技巧
2019/07/12 职场文书