MiHuYou论坛

搜索
查看: 154|回复: 0

一个HTML小游戏

[复制链接]

10

主题

13

帖子

69

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
69
QQ
发表于 2023-12-30 18:57:12 | 显示全部楼层 |阅读模式
不说了直接上代码

  1. <!DOCTYPE html>
  2. <html>
  3.     <head><h4>左右键移动小球,掉出框即游戏结束!</h4></head>
  4.     <body>
  5.         <div></div>
  6.         <!-- 4个board -->
  7.         <div id="board1" style="position: absolute; width:80px; height:10px; left:420px;
  8.         top:555px; background-color: cadetblue;"></div>
  9.         <div id="board2" style="position: absolute; width:80px; height:10px; left:520px;
  10.         top:555px; background-color: cadetblue;"></div>
  11.         <div id="board3" style="position: absolute; width:80px; height:10px; left:620px;
  12.         top:555px; background-color: cadetblue;"></div>
  13.         <div id="board4" style="position: absolute; width:80px; height:10px; left:720px;
  14.         top:555px; background-color: cadetblue;"></div>
  15.         <!-- 小球 -->
  16.         <div id="ball" class="circle" style="width:20px;
  17.         height:20px; background-color:crimson; border-radius: 50%; position:absolute;
  18.         left:600px; top:100px"></div>
  19.         <!-- 框 -->
  20.         <div id="box" style="border: 5px solid #555555; width:400px; height:550px; display=hide"></div>
  21.         <!-- 分数 过的board越多,分数越高 -->
  22.         <div id="score" style="width:200px; height:10px; position:absolute; left:900px;
  23.             font-family:'隶书'; font-size: 30px;">score: 0</div>
  24.         <!-- 游戏结束 -->
  25.         <div id="gg" style="width:200px; height:10px; position:absolute; left:550px; top:200px;
  26.         font-family:'隶书'; font-size: 30px; display: none;">Game Over</div>
  27.         <script>
  28.             // 设置box的样式
  29.             var box = document.getElementById("box");
  30.             box.style.position = "absolute";
  31.             box.style.left = "400px";
  32.             // 设置board的样式
  33.             var board1 = document.getElementById("board1");
  34.             var board2 = document.getElementById("board2");
  35.             var board3 = document.getElementById("board3");
  36.             var board4 = document.getElementById("board4");
  37.             // 声音
  38.             var shengyin = new Audio();
  39.             shengyin.src = "声音2.mp3";
  40.             shengyinFlag = 0; // 用来表示小球在第几块board上
  41.             // 键盘事件函数
  42.             var ball = document.getElementById("ball");
  43.             document.onkeydown = f;
  44.             function f(e){
  45.                 var e = e || window.event;
  46.                 switch(e.keyCode){
  47.                     case 37:
  48.                         // 按下左键,小球左移,但不要超过左边框
  49.                         if(ball.offsetLeft>=box.offsetLeft + 10)
  50.                             ball.style.left = ball.offsetLeft - 8 + "px";
  51.                         break;
  52.                     case 39:
  53.                         // 按下右键,小球右移,但不要超过由边框
  54.                         if(ball.offsetLeft<=box.offsetLeft+box.offsetWidth-ball.offsetWidth-10)
  55.                             ball.style.left = ball.offsetLeft + 8 + "px";
  56.                         break;
  57.                     case 32:

  58.                 }
  59.             }
  60.             // 定义一个分数变量
  61.             var fenshu = 0;
  62.             // 定义一个函数,移动给定的一个board
  63.             function moveBoard(board)
  64.             {
  65.                 var t1 = board.offsetTop;
  66.                 if(t1<=0)
  67.                 {
  68.                     // 如果board移到最上面了,就随机换个水平位置,再移到最下面
  69.                     t2 = Math.floor(Math.random() * (720- 420) + 420);
  70.                     board.style.left = t2 + "px";
  71.                     board.style.top = "555px";
  72.                     fenshu += 1; //分数增加1
  73.                     document.getElementById("score").innerHTML = "score " + fenshu;
  74.                 }
  75.                     //
  76.                 else
  77.                     board.style.top = board.offsetTop - 1 + "px";
  78.             }
  79.             // 定义小球的速度变量
  80.             var startSpeed = 1;
  81.             var ballSpeed =startSpeed;
  82.             // step函数是游戏界面的单位变化函数
  83.             function step()
  84.             {
  85.                 // board直接上下隔得太近,就逐个移动,否则,同时移动
  86.                 var t1 = Math.abs(board1.offsetTop - board2.offsetTop);
  87.                 var t2 = Math.abs(board2.offsetTop - board3.offsetTop);
  88.                 var t3 = Math.abs(board3.offsetTop - board4.offsetTop);
  89.                 // 定义一个board之间的间隔距离
  90.                 var t4 = 140;
  91.                 if(t1<t4)
  92.                 {
  93.                     moveBoard(board1);
  94.                 }
  95.                 else if(t2<t4)
  96.                 {
  97.                     moveBoard(board1);
  98.                     moveBoard(board2);
  99.                 }
  100.                 else if(t3<t4)
  101.                 {
  102.                     moveBoard(board1);
  103.                     moveBoard(board2);
  104.                     moveBoard(board3);
  105.                 }
  106.                 else
  107.                 {
  108.                     moveBoard(board1);
  109.                     moveBoard(board2);
  110.                     moveBoard(board3);
  111.                     moveBoard(board4);
  112.                 }
  113.                 // 定义小球的垂直移动规则,1、向下匀加速运动,2、如果碰到board就被board持续抬上去,
  114.                 // 直到按左右键离开了该board

  115.                 // 如果小球的纵坐标等于某个board的纵坐标,就被抬起
  116.                 var t5 = Math.abs(ball.offsetTop - board1.offsetTop);
  117.                 var t6 = Math.abs(ball.offsetTop - board2.offsetTop);
  118.                 var t7 = Math.abs(ball.offsetTop - board3.offsetTop);
  119.                 var t8 = Math.abs(ball.offsetTop - board4.offsetTop);
  120.                 if(t5<=ball.offsetHeight && t5>0 && ball.offsetLeft>=board1.offsetLeft-ball.offsetWidth && ball.offsetLeft<=board1.offsetLeft+board1.offsetWidth)
  121.                 {
  122.                     ball.style.top = board1.offsetTop - ball.offsetHeight + "px";
  123.                     ballSpeed = startSpeed;
  124.                     if(shengyinFlag != 1)
  125.                     {
  126.                         shengyin.play();
  127.                         shengyinFlag = 1;
  128.                     }
  129.                 }
  130.                 else if(t6<=ball.offsetHeight && t6>0 && ball.offsetLeft>=board2.offsetLeft-ball.offsetWidth && ball.offsetLeft<=board2.offsetLeft+board2.offsetWidth)
  131.                 {
  132.                     ball.style.top = board2.offsetTop - ball.offsetHeight + "px";
  133.                     ballSpeed = startSpeed;
  134.                     if(shengyinFlag != 2)
  135.                     {
  136.                         shengyin.play();
  137.                         shengyinFlag = 2;
  138.                     }
  139.                 }
  140.                 else if(t7<=ball.offsetHeight && t7>0 && ball.offsetLeft>=board3.offsetLeft-ball.offsetWidth && ball.offsetLeft<=board3.offsetLeft+board3.offsetWidth)
  141.                 {
  142.                     ball.style.top = board3.offsetTop - ball.offsetHeight + "px";
  143.                     ballSpeed = startSpeed;
  144.                     if(shengyinFlag != 3)
  145.                     {
  146.                         shengyin.play();
  147.                         shengyinFlag = 3;
  148.                     }
  149.                 }
  150.                 else if(t8<=ball.offsetHeight && t8>0 && ball.offsetLeft>=board4.offsetLeft-ball.offsetWidth && ball.offsetLeft<=board4.offsetLeft+board4.offsetWidth)
  151.                 {
  152.                     ball.style.top = board4.offsetTop - ball.offsetHeight + "px";
  153.                     ballSpeed = startSpeed;
  154.                     if(shengyinFlag != 4)
  155.                     {   
  156.                         shengyin.play();
  157.                         shengyinFlag = 4;
  158.                     }
  159.                 }
  160.                 else
  161.                 {
  162.                     ballSpeed = ballSpeed + 0.01; // 数字相当于加速度
  163.                     ball.style.top = ball.offsetTop + ballSpeed + "px";
  164.                 }
  165.                 // ballSpeed = ballSpeed + 0.01; // 数字相当于加速度
  166.                 // ball.style.top = ball.offsetTop + ballSpeed + "px";

  167.                 // 如果小球跑出来box,就结束游戏
  168.                 if(ball.offsetTop==0 || ball.offsetTop>=box.offsetTop+box.offsetHeight)
  169.                 {
  170.                     clearInterval(gameover);
  171.                     ball.style.display = 'none';
  172.                     board1.style.display = 'none';
  173.                     board2.style.display = 'none';
  174.                     board3.style.display = 'none';
  175.                     board4.style.display = 'none';
  176.                     var gg = document.getElementById("gg"); //显示游戏结束
  177.                     gg.style.display = 'block';
  178.                 }
  179.             }

  180.             var gameover = setInterval("step();", 8);
  181.         </script>
  182.     </body>
  183. </html>
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2013 Discuz Team.Powered by Discuz!X3.4
快速回复 返回顶部 返回列表