javascript实现小游戏贪吃蛇

朱雀 2023-05-30 06:08 351阅读 0赞

贪吃蛇

style

  1. <style>
  2. .face{
  3. height: 400px;
  4. width: 600px;
  5. margin-left: auto;
  6. margin-right: auto;
  7. position: relative;
  8. background-color: pink;
  9. }
  10. #playground{
  11. height: 400px;
  12. width: 450px;
  13. float: left;
  14. position: relative;
  15. }
  16. .menu{
  17. height: 400px;
  18. width: 150px;
  19. float: left;
  20. background-color: skyblue;
  21. }
  22. #snack{
  23. height: 20px;
  24. width: 20px;
  25. background-color: red;
  26. position: absolute;
  27. left: 0px;
  28. top:0px;
  29. }
  30. #food{
  31. height: 20px;
  32. width: 20px;
  33. background: blue;
  34. position: absolute;
  35. }
  36. .body{
  37. height: 20px;
  38. width: 20px;
  39. background: green;
  40. position: absolute;
  41. left: 0px;
  42. top:0px;
  43. }
  44. #score{
  45. font-size: 30px;
  46. font-weight: bold;
  47. color: red;
  48. }
  49. .menu div{
  50. font-size: 20px;
  51. font-weight: bold;
  52. }
  53. </style>

html

  1. <body>
  2. <div class="face">
  3. <!-- 小蛇移动的操场 -->
  4. <div id="playground">
  5. <!-- 食物 界面中的蓝色小方块-->
  6. <div id="food"></div>
  7. <!-- 小蛇 界面中的红色小方块-->
  8. <div id="snack"></div>
  9. </div>
  10. <!-- 计算得分 -->
  11. <div class="menu">
  12. <div>得分<span id="score"></span></div>
  13. </div>
  14. </div>
  15. </body>

javascript

  1. <script>
  2. var jsDiv = document.getElementById("playground");
  3. var jsSnack = document.getElementById("snack");
  4. var jsFood = document.getElementById("food");
  5. var jsBody = document.getElementById("playground");
  6. var jsScore = document.getElementById("score");
  7. //设置全局变量
  8. var timer;//创建定时器为全局变量
  9. var timer1 = setInterval(eat,10);//检测位置碰撞,并且吃掉食物;
  10. var srr = [];//记录蛇行动的位置
  11. var num = 0 ;//记录数组的长度
  12. var jsSnackBody ;//么米吃掉一个食物,蛇的身体
  13. //开始游戏
  14. document.onkeydown = function(e){
  15. var evt = e || window.event;
  16. switch(evt.keyCode) {
  17. //向左移动
  18. case 37:
  19. clearInterval(timer);
  20. timer=window.setInterval(runLeft,10)
  21. function runLeft(){
  22. if (jsSnack.offsetLeft > 0) {
  23. jsSnack.style.left = jsSnack.offsetLeft - 1+ "px";
  24. jsSnack.style.top = jsSnack.offsetTop + "px";
  25. //记录小蛇的位置
  26. srr.push([jsSnack.offsetLeft, jsSnack.offsetTop]);
  27. num++;//记录数组的长度
  28. }
  29. }
  30. break;
  31. //向上移动
  32. case 38:
  33. clearInterval(timer);
  34. timer=window.setInterval(runTop,10);
  35. function runTop(){
  36. if (jsSnack.offsetTop > 0) {
  37. jsSnack.style.top = jsSnack.offsetTop - 1 + "px";
  38. jsSnack.style.left = jsSnack.offsetLeft + "px";
  39. //记录小蛇的位置
  40. srr.push([jsSnack.offsetLeft, jsSnack.offsetTop]);
  41. num++;//记录数组的长度
  42. }
  43. }
  44. break;
  45. //向右移动
  46. case 39:
  47. clearInterval(timer);
  48. timer=window.setInterval(runRight,10);
  49. function runRight(){
  50. if (jsSnack.offsetLeft + jsSnack.offsetWidth <= 450) {
  51. jsSnack.style.left = jsSnack.offsetLeft + 1 + "px";
  52. jsSnack.style.top = jsSnack.offsetTop + "px";
  53. //记录小蛇的位置
  54. srr.push([jsSnack.offsetLeft, jsSnack.offsetTop]);
  55. num++;//记录数组的长度
  56. }
  57. }
  58. break;
  59. //向下移动
  60. case 40:
  61. clearInterval(timer);
  62. timer=window.setInterval(runBottom,10);
  63. function runBottom(){
  64. if (jsSnack.offsetTop + jsSnack.offsetHeight <= 400) {
  65. jsSnack.style.top = jsSnack.offsetTop + 1 + "px";
  66. jsSnack.style.left = jsSnack.offsetLeft + "px";
  67. //记录小蛇的位置
  68. srr.push([jsSnack.offsetLeft, jsSnack.offsetTop]);
  69. num++;//记录数组的长度
  70. }
  71. }
  72. break;
  73. }
  74. }
  75. function Pos(){
  76. jsFood.style.left=parseInt(Math.random() * (430 - 20 + 1) + 20) + "px";
  77. jsFood.style.top=parseInt(Math.random() * (380 - 20 + 1) + 20) + "px";
  78. }
  79. Pos();
  80. function eat(){
  81. rectangleCrashExamine(jsSnack,jsFood);
  82. function rectangleCrashExamine(obj1, obj2) {
  83. var obj1Left = obj1.offsetLeft;
  84. var obj1Width = obj1.offsetLeft + obj1.offsetWidth;
  85. var obj1Top = obj1.offsetTop;
  86. var obj1Height = obj1.offsetTop + obj1.offsetHeight;
  87. var obj2Left = obj2.offsetLeft;
  88. var obj2Width = obj2.offsetLeft + obj2.offsetWidth;
  89. var obj2Top = obj2.offsetTop;
  90. var obj2Height = obj2.offsetTop + obj2.offsetHeight;
  91. //检测碰撞
  92. //碰撞检测原理:
  93. //蛇在实物的左边、右边、上边、下边的时候,说明没有发生碰撞,那么我们取反,就说明发生碰撞
  94. if ( !(obj1Left > obj2Width || obj1Width < obj2Left || obj1Top > obj2Height || obj1Height < obj2Top) ) {
  95. //碰撞后身体
  96. jsSnackBody = document.createElement("div");
  97. jsSnackBody.setAttribute("class","body");
  98. jsBody.appendChild(jsSnackBody);
  99. Pos();//怪物的位置随机变换
  100. setInterval(follow,10);//身体跟随的定时器
  101. }
  102. }
  103. }
  104. function follow(){
  105. //检查一共添加了多少身体
  106. var bodyNum = document.getElementsByClassName("body");
  107. //记录得分
  108. jsScore.innerHTML = bodyNum.length;
  109. //蛇每次移动1个像素,那么新的身体应该跟随在当前数组的倒数第20个数组的位置;依次加等;
  110. var place = 0 ;
  111. for( var i = 0 ; i<bodyNum.length ; i++){
  112. place += 20;
  113. bodyNum[i].style.left=srr[num-place][0] + 'px';
  114. bodyNum[i].style.top=srr[num-place][1] + 'px';
  115. }
  116. }
  117. </script>

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,351人围观)

还没有评论,来说两句吧...

相关阅读

    相关 贪吃游戏

    贪吃蛇游戏是一款比较经典的休闲游戏,文章包括项目的部分源码以及运行界面的一些图片,项目也参考学习了许多大佬的文章,会在文章最后面贴出参考文章,有什么问题也请大家指正。 一、

    相关 js游戏贪吃

    介绍一个由本人制作的贪吃蛇小游戏。这个游戏采用了前端BootStrap框架和jQuery框架,因此移动端和电脑端都能兼容。虽然界面比较简陋,但是基本功能比较齐全,如果有bug欢

    相关 贪吃游戏总论

    引言:一个月前完成了贪吃蛇小游戏,作为一个用来练手的项目,自己的确成长了不少,打算就这个项目写点东西,后来工作太忙,再加上一些原因,一直到现在才有空写下来,贪吃蛇小游戏分为总论