经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » jQuery » 查看文章
jQuery实现弹弹球小游戏
来源:jb51  时间:2021/8/9 10:07:12  对本文有异议

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

效果展示:

CSS样式:

  1. #box {
  2. width: 600px;
  3. height: 650px;
  4. border: 5px solid rgb(245, 164, 96);
  5. position: relative;
  6. left: 500px;
  7. top: 50px;
  8. background: -webkit-gradient(linear, 0 0, 0 bottom, from(#ffffff),to(rgba(0, 0, 255, 0.5)));
  9. }
  10. /*小球的设置*/
  11. #ball {
  12. width: 20px;
  13. height: 20px;
  14. border-radius: 10px;
  15. background-color: white;
  16. position: absolute;
  17. top: 560px;
  18. box-shadow: 0px 0px 3px 3px aqua;
  19. }
  20. /*开始游戏按钮设置*/
  21. #btn {
  22. width: 150px;
  23. height: 90px;
  24. position: fixed;
  25. left: 730px;
  26. top: 400px;
  27. border-radius: 10px;
  28. box-shadow: #BBBBBB;
  29. font-size: 24px;
  30. cursor: pointer;
  31. }
  32. /*滑块的设置*/
  33. #slider {
  34. width: 120px;
  35. height: 20px;
  36. background-color: lightpink;
  37. position: absolute;
  38. top: 585px;
  39. border-radius: 10px;
  40. box-shadow: 0px 0px 2px 2px white;
  41. cursor: pointer;
  42. }
  43. /*每个方块的边框*/
  44. #brick div {
  45. width: 98px;
  46. height: 20px;
  47. float: left;
  48. border: 1px solid black;
  49. }
  50. /*游戏规则边框*/
  51. #tip {
  52. width: 280px;
  53. position: fixed;
  54. top: 200px;
  55. left: 100px;
  56. border: 1px solid black;
  57. text-indent: 2em;
  58. padding: 10px;
  59. border-radius: 20px;
  60. }
  61. /*难度得分边框*/
  62. #grade {
  63. width: 180px;
  64. position: fixed;
  65. top: 100px;
  66. left: 1150px;
  67. border: 1px solid black;
  68. text-indent: 2em;
  69. padding: 10px;
  70. border-radius: 20px;
  71. }
  72. /*h3字体设置*/
  73. #grade h3 {
  74. font-weight: 500;
  75. }
  76. #phb{
  77. width: 180px;
  78. position: fixed;
  79. top: 50px;
  80. left: 1150px;
  81. border: 1px solid black;
  82. text-indent: 2em;
  83. padding: 10px;
  84. border-radius: 10px;
  85. }

js代码:

js完整代码:

  1. <script type="text/javascript">
  2. var box = document.getElementById("box");
  3. var ball = document.getElementById("ball");
  4. var btn = document.getElementById("btn");
  5. var slider = document.getElementById("slider");
  6. var obrick = document.getElementById("brick");
  7. var brickArr = obrick.getElementsByTagName("div");
  8. var grade = document.getElementById("grade");
  9. var rank = grade.children[1]
  10. var score = grade.children[3]
  11. var sco = 0; //分数
  12. var timer; //小球运行
  13. var isRunning = false;
  14. var speedX = rand(3, 12);
  15. var speedY = -rand(3, 12);
  16. var num = speedX - speedY;
  17. //随机选择难度
  18. var num = Math.ceil((Math.random() * 9));
  19. console.log("num为:" + num);
  20. switch (num) {
  21. case 1:
  22. case 2:
  23. case 3:
  24. rank.innerHTML = "简单";
  25. break;
  26. case 4:
  27. case 5:
  28. case 6:
  29. rank.innerHTML = "中等";
  30. slider.style.width = 80 + "px";
  31. break;
  32. case 7:
  33. case 8:
  34. case 9:
  35. rank.innerHTML = "困难";
  36. slider.style.width = 60 + "px";
  37. break;
  38. }
  39. //随机生成小球与滑块的初始位置
  40. var beginGo = rand(100, 500);
  41. ball.style.left = beginGo + 40 + "px";
  42. slider.style.left = beginGo + "px";
  43. //开始按钮点击事件
  44. btn.onclick = function() {
  45. btn.style.display = "none"; //隐藏按钮
  46. isRunning = true;
  47. clearInterval(timer);
  48. timer = setInterval(function() {
  49. //获取小球初始位置
  50. var ballLeft = ball.offsetLeft;
  51. var ballTop = ball.offsetTop;
  52. //获取小球运动之后位置
  53. var nextleft = ballLeft + speedX;
  54. var nexttop = ballTop + speedY;
  55. //水平边界判断,当小球的left值小于容器左边界或者大于容器右边界时,将水平方向速度取反
  56. if (nextleft <= 0 || nextleft >= box.offsetWidth - ball.offsetWidth - 10) {
  57. speedX = -speedX;
  58. }
  59. //垂直边界判断,当小球的top值小于容器上边界时,将垂直方向速度取反
  60. if (nexttop <= 0) {
  61. speedY = -speedY;
  62. }
  63. //当小球触碰到下边界时,提示“游戏失败”,重新刷新页面
  64. if (nexttop > box.offsetHeight - ball.offsetHeight) {
  65. location.reload();
  66. alert("Game Over!");
  67. }
  68. //将运动后的位置重新赋值给小球
  69. ball.style.left = nextleft + "px";
  70. ball.style.top = nexttop + "px";
  71. //小球与滑块的碰撞
  72. if (knock(ball, slider)) {
  73. speedY = -speedY;
  74. }
  75. //小球与方块的碰撞
  76. for (var j = 0; j < brickArr.length; j++) {
  77. if (knock(brickArr[j], ball)) {
  78. speedY = -speedY
  79. obrick.removeChild(brickArr[j]);
  80. sco++;
  81. score.innerHTML = sco;
  82. break;
  83. }
  84. }
  85. //当容器中方块数量为0时,宣布“游戏胜利”,刷新页面
  86. if (brickArr.length <= 0) {
  87. location.reload();
  88. alert("You win!");
  89. }
  90. }, 20)
  91. }
  92. //鼠标控制滑块
  93. slider.onmousedown = function(e) {
  94. var e = e || window.event;
  95. //获取滑块初始位置
  96. var offsetX = e.clientX - slider.offsetLeft;
  97. if (isRunning) {
  98. document.onmousemove = function(e) {
  99. var e = e || window.event;
  100. var l = e.clientX - offsetX;
  101. if (l <= 0) {
  102. l = 0;
  103. }
  104. if (l >= box.offsetWidth - slider.offsetWidth - 10) {
  105. l = box.offsetWidth - slider.offsetWidth - 10;
  106. }
  107. slider.style.left = l + "px";
  108. }
  109. }
  110. }
  111. document.onmouseup = function() {
  112. document.onmousemove = null; //鼠标移动时
  113. }
  114. //按键控制滑块
  115. document.onkeydown = function(e) {
  116. var e = e || window.event;
  117. var code = e.keyCode || e.which;
  118. var offsetX = slider.offsetLeft;
  119. if (isRunning) {
  120. switch (code) {
  121. case 37: //左
  122. if (offsetX <= 0) {
  123. slider.style.left = 0
  124. break;
  125. }
  126. slider.style.left = offsetX * 4 / 5 + "px";
  127. break;
  128. case 39: //右
  129. if (offsetX >= box.offsetWidth - slider.offsetWidth - 10) {
  130. slider.style.left = box.offsetWidth - slider.offsetWidth;
  131. break;
  132. }
  133. slider.style.left = (box.offsetWidth - slider.offsetWidth - offsetX) / 5 + offsetX + "px";
  134. break;
  135. }
  136. }
  137. }
  138. //一共有66块方块
  139. createBrick(66);
  140. //容器内创建方块
  141. function createBrick(n) {
  142. var oBrick = document.getElementById("brick");
  143. //在大盒子brick中插入n个div方块,并给予随机颜色
  144. for (var i = 0; i < n; i++) {
  145. var node = document.createElement("div");
  146. node.style.backgroundColor = color();
  147. oBrick.appendChild(node);
  148. }
  149. //获取所有的方块
  150. var brickArr = obrick.getElementsByTagName("div")
  151. //根据每个方块当前所在位置,将left与top值赋给方块
  152. for (var i = 0; i < brickArr.length; i++) {
  153. brickArr[i].style.left = brickArr[i].offsetLeft + "px";
  154. brickArr[i].style.top = brickArr[i].offsetTop + "px";
  155. }
  156. //将所有方块设置成绝对定位,注意这一步与上一步顺序不能调换
  157. for (var i = 0; i < brickArr.length; i++) {
  158. brickArr[i].style.position = "absolute";
  159. }
  160. }
  161. //随机生成颜色
  162. function color() {
  163. var result = "#";
  164. for (var i = 0; i < 6; i++) {
  165. result += rand(0, 15).toString(16)
  166. }
  167. return result;
  168. }
  169. //随机数生成
  170. function rand(n, m) {
  171. return n + parseInt(Math.random() * (m - n + 1));
  172. }
  173. //碰撞检测函数
  174. function knock(node1, node2) {
  175. var l1 = node1.offsetLeft;
  176. var r1 = node1.offsetLeft + node1.offsetWidth;
  177. var t1 = node1.offsetTop;
  178. var b1 = node1.offsetTop + node1.offsetHeight;
  179. var l2 = node2.offsetLeft;
  180. var r2 = node2.offsetLeft + node2.offsetWidth;
  181. var t2 = node2.offsetTop;
  182. var b2 = node2.offsetTop + node2.offsetHeight;
  183. if (l2 > r1 || r2 < l1 || t2 > b1 || b2 < t1) {
  184. return false;
  185. } else {
  186. return true;
  187. }
  188. }
  189. </script>

以上代码不是很完美,有需要的还可以进一步的改进

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号