### 最近学习了一个原生js的小游戏,现在总结一下,巩固和复习学到的知识。 首先,要知道一个项目的基本结构和原理,别猜白块是一个简单的小游戏,它的结构和原理也很简单,先要有一个主体盒子给它加一个class叫wrapper,所有的元素都应该包含在这个盒子里,游戏的主体思想是有两个盒子,一个是用户看到的界面,我们给它一个class叫go,另一个是产生方块并带着方块向下运动的盒子,我们给他一个class叫main,我们在go里加一个按钮用来启动游戏

游戏开始

基本的css样式就不具体的讲了,主要就是为wrapper、go和main设置css,特别的是main的top要比go的top小上一个白块的距离,为了保证白块下移到go界面时已经创建好了。

{ margin: 0; padding: 0;} .wrapper { width: 400px; height: 600px; margin: 150px auto; border: 1px solid #000000; position: relative; overflow: hidden; } __#go { width: 100%; position: absolute; top: 0; text-align: center; z-index: 99; } __#go a { display: block; width: 400px; height: 100px; border-bottom: 3px dashed #bbb; text-decoration: none; font-size: 32px; font-weight: 300; color: lightskyblue; line-height: 100px; }

.main { width: 400px; height: 600px; position: relative; top: -150px; /* border: 1px solid blue */ }

然后,就开始js部分了,我们要清楚用户的操作,用户要玩这个游戏第一步肯定是点击开始按钮让游戏开始,所以我们先给go里的开始按钮添加点击事件,

function clickStart() { go.addEventListener('click', function() { go.style.display = 'none'; move(); }) }

用户点击完之后,按钮消失,白块开始下移,move()方法就是白块运动的方法,我们知道方块运动是一个连续的过程,所以我们需要一个定时器来让它在游戏未结束之前一直向下运动。要清楚的是,我们看到的是白块在向下运动,其实不是,真正运动的应该是装着白块的盒子,白块只是被装在盒子里被带着向下,而向下运动也不过是改变main盒子的top值,如果想要加速效果可以添加一个速度speed,达到条件一个让speed+=某个数值就行。main的高度不可能是无限长的能一直向下运动,所以肯定是运动到某个地方它又回去了

var step = parseInt(main.offsetTop) + speed; main.style.top = step + 'px'; if (parseInt(main.offsetTop) >= 0) { cDiv(); main.style.top = '-150px'; }

main开始运动之后,白快也要开始产生了,因为白块是不断产生的,所以我们只能在定时器里动态添加,这里还要清楚一个点,到底什么时候开始生成白块,是一点击开始按钮就开始产生,还是等main运动到go的位置才开始产生,应该是运动到go的位置时,不然白块在go页面之上就开始显示了。先将方块添加到一行中,再将一行添加到盒子中,利用随机数产生黑块的位置,并给它加上class=‘i’用来标记,同时给每一行的方块加上样式

.row { width: 400px; height: 150px; } .row div { width: 99px; height: 149px; float: left; border-left: 1px solid #222; border-bottom: 1px solid #222; }

将一行添加到盒子中应该先看一下盒子中是否已经存在方块了,因为我们要保证新产生的一行是在最上面一行

function cDiv() { var oDiv = document.createElement('div'); var index = Math.floor(Math.random() * 4); oDiv.setAttribute('class', 'row'); for (var j = 0; j < 4; j++) { var iDiv = document.createElement('div'); if (j == index) { iDiv.style.backgroundColor = "#000"; iDiv.setAttribute('class', 'i'); } oDiv.appendChild(iDiv); } if (main.childNodes.length == 0) { main.appendChild(oDiv); } else { main.insertBefore(oDiv, main.childNodes[0]); } }

产生方块后就要为方块绑定点击事件,但方块是不断产生的,所以我们用事件委托将事件绑定到main上,只在main区域里点击才有效,当点击到class为i的方块时说明点击的时黑色方块,这时就加一分,让被点击的方块背景颜色改变,除此之外就是点击到白色方块了,游戏结束,清空定时器,方块停止运动,弹出得分

function bindEvent() { main.addEventListener('click', function(e) { if (flag) { var tar = e.target; if (tar.className == 'i') { num++; tar.style.backgroundColor = '#bbb'; tar.classList.remove('i'); } else { alert("游戏结束,得分:" + num); clearInterval(timer); flag = false; } } }) }

还有一种情况是未点击或者漏点,这时就要判断运动到main盒子下面的方块里是否有黑色的方块,如果有就游戏结束,没有说明全部点到了,游戏继续运行。怎么判断方块是否运动到main下面了呢?可以设置main的高度刚好为页面显示的方块数加上go比main高的哪一行加上运动到main下面一行的数值,我这里设置的6行,页面显示4行,当main的子节点长度为6时就判断最后一行里是否有class为i的子元素,如果有说明没点或漏点,这也游戏结束。运行到main下方的行除了要判断的那一行其他的就移除,这样不会发生方块一直存在不断被往下挤的情况。

var len = main.childNodes.length; if (len == 6) { for (var i = 0; i < 4; i++) { if (main.childNodes[len - 1].children[i].classList.contains('i')) { alert("游戏结束,得分:" + num); clearInterval(timer); flag = false; } } main.removeChild(main.childNodes[len - 1]);

到此所有要实现的功能就完成了,最后还可以加一个锁,当游戏结束后方块不能被点击。 运行结果:

别踩白块游戏java项目总结_学习小游戏别踩白块总结相关推荐

  1. java项目---全民飞机大战小游戏

    项目素材下载地址:https://download.csdn.net/download/m0_51152186/83604685 源码地址:https://download.csdn.net/down ...

  2. 小游戏策划案例精选_趣味小游戏活动方案_趣味游戏活动策划书

    举办活动的时候通常会有一些趣味小活动来活跃气氛,你有玩过哪些趣味小游戏呢,下面学习啦小编给大家整理了一些趣味小游戏活动方案,希望对您有所帮助. 趣味游戏活动方案 活动主旨: 每年农历的正月十五,春节刚 ...

  3. python小游戏开题报告范文_独立小游戏制作论文开题报告

    研究内容.研究方法与思路: 一.研究内容: 基于Unity制作的<绿野仙踪>冒险类游戏,游戏的视觉方面采用3D的游戏视角,剧情是在奥芝国的基础上新改编的童话故事剧情,画风为独特的低多边形画 ...

  4. 弹球小游戏java代码_android 发射弹球小游戏 附完整源码下载

    [实例简介]android 弹球游戏制作 [实例截图]  [核心代码] package wyf.ytl; //声明包语句 public class BallGoThread extends Threa ...

  5. java 五子棋项目_Java项目如何实现五子棋小游戏

    Java项目如何实现五子棋小游戏 发布时间:2020-07-21 14:53:06 来源:亿速云 阅读:77 作者:小猪 小编这次要给大家分享的是Java项目如何实现五子棋小游戏,文章内容丰富,感兴趣 ...

  6. Java项目——TomJerry Jump Game跑酷游戏

    猫和老鼠跑酷游戏 开发背景 模块设计 人物类 背景图片 障碍类 关键模块 碰撞测试 键盘监听 计分器成绩框 音效设计 实现效果 缺点和问题 附录源代码 开发背景 模拟Google浏览器中离线小恐龙跑酷 ...

  7. 面向对象程序设计(Java)课程设计——五子棋小游戏

    目录 一.团队成员及任务 二.项目简介 三.功能设计图 四.运行结果截图 五.核心源码 六.课程设计感想与展望 一.团队成员及任务 队长:管俊杰  计科(智能)22-1 202203200037 负责 ...

  8. 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...

  9. Java控制台游戏~600行代码实现打怪小游戏

    Java控制台游戏~600行代码实现打怪小游戏(多图预警) 一,先放个启动界面(一些英雄,怪物技能介绍跟装备属性都写在里边): 二,在这个简单的小游戏里,你可以体验到: 1.打怪: 2.随机玩法寻宝: ...

  10. java项目第17期-小程序团购+商城源码【毕业设计】

    java项目第17期-小程序团购+代理商城源码 1.产品介绍 java小程序+大后台web商城源码 基于ssm的一款电子商城,系统采用maven的父子结构, 1.后台web商城包含的模块有: 会员管理 ...

最新文章

  1. Python,OpenCV中的霍夫圆变换——cv2.HoughCircles()
  2. javascript_JavaScript疲劳疲劳
  3. vue全家桶+Koa2开发笔记(5)--nuxt
  4. python处理csv数据-python 数据处理 对csv文件进行数据处理
  5. jquery在ie浏览器下中文乱码的问题
  6. 机器学习:决策树及ID3,C4.5,CART算法描述
  7. excel中定义VBA
  8. IIS中“使用 XSL 样式表无法查看 XML 输入”问题的解决
  9. 【JAVASCRIPT】处理表单事件
  10. django 如何写model
  11. 面试准备——Java回顾:高级编程(多线程、常用类、集合、泛型、IO流、反射、动态代理、新特性)
  12. Apache Tomcat 再爆严重安全漏洞
  13. MSC.MD.NASTRAN.V2010\
  14. 大数据平台层级架构图
  15. 佳能Canon PIXMA MP236 打印机驱动
  16. html页面设计扁平化,35个扁平化网站设计灵感
  17. VS导入easyx图形库
  18. UTC时间(世界协调时间)和北京时间转换
  19. Apollo Planning决策规划算法代码详细解析 (13): RuleBasedStopDecider
  20. 干货精选 | 迅雷链再度亮相“魔都”上海,性能与安全兼得的区块链为何备受关注?...

热门文章

  1. Java使用Spring Boot、Maven、Spring RestTemplate集成腾讯云通信
  2. GIS系列专题(3):缓冲区算法对比研究(Buffer Algorithm),类似刀具补偿
  3. 微信 支付 h5 开发 使用 best-pay-sdk
  4. Foxmail:修改签名和模板(邮箱、邮件)
  5. 【历史上的今天】3 月 2 日:雅虎正式成立;PC 设计先驱诞生;Excite@Home 破产
  6. c语言库用不用下载杀毒软件,开源杀毒软件ClamAV需要你的支持和帮助
  7. Compiling for iOS 10.0, but module ‘xxx‘ has a minimum deployment target of iOS 12.0
  8. php观察者模式,组合ArmyVisitor抽象类,用accept()方法将访问者对象传递给当前对象的所有的子元素,当前组件是一个组合体
  9. matlab中Folder是什么意思,matlab – @folder和文件夹
  10. 大数据可视化设计师丹尼斯_自助数据可视化设计师如何谋生