H5汉诺塔小游戏

简介: H5汉诺塔小游戏

汉诺塔小游戏

汉诺塔

<!DOCTYPE html>
<html>
<head>
  <title>汉诺塔游戏</title>
  <style>
    .tower {
    
    
      position: relative;
      display: inline-block;
      width: 200px;
      height: 300px;
      border: 1px solid #000;
      margin: 20px;
    }
    .disk {
    
    
      position: absolute;
      width: 100%;
      height: 20px;
      background-color: #00f;
      transition: left 0.5s, bottom 0.5s; /* 添加 bottom 过渡效果 */
    }
  </style>
</head>
<body>
  <div class="tower" id="tower1"></div>
  <div class="tower" id="tower2"></div>
  <div class="tower" id="tower3"></div>

  <script src="../js/jquery-3.7.0.min.js"></script>
  <script>
    $(document).ready(function() {
    
    
      var numDisks = 3;
      var diskHeight = 20;
      var towerHeight = 300;
      var towerWidth = 200;
      var towerPadding = 20;
      var selectedDisk = null;

      $('.tower').on('click', function() {
    
    
        var currentTower = $(this);

        if (selectedDisk === null) {
    
    
          var topDisk = currentTower.children('.disk').first();
          if (topDisk.length === 0) {
    
    
            return; // 当前柱子上没有盘子可选
          }
          selectedDisk = topDisk.detach();
          selectedDisk.addClass('selected');
        } else {
    
    
          var targetTower = currentTower;
          var targetDisk = currentTower.children('.disk').first();
          if (targetDisk.length === 0 || targetDisk.width() > selectedDisk.width()) {
    
    
            selectedDisk.prependTo(targetTower);
            selectedDisk.removeClass('selected');
            selectedDisk = null;
          } else {
    
    
            return; // 无效移动,目标柱子上有更小的盘子
          }
        }

        // 设置盘子位置
        $('.tower').each(function() {
    
    
          var tower = $(this);
          var disks = tower.children('.disk');
          var numDisks = disks.length;
          disks.each(function(index) {
    
    
            var disk = $(this);
            var bottom = (numDisks - 1 - index) * diskHeight;
            disk.css('bottom', bottom + 'px');
          });
        });

        // 判断是否完成游戏
        if ($('#tower3 .disk').length === numDisks) {
    
    
          console.log('游戏完成!');
          setTimeout(() => {
    
    
            alert("游戏完成!")
          }, 500);
        }
      });

      // 初始化游戏
      function init() {
    
    
        var tower1 = $('#tower1');
        var towerWidthOffset = (towerWidth - towerPadding) / 2;

        for (var i = numDisks; i > 0; i--) {
    
    
          var diskWidth = i * 40;
          var diskLeft = (towerWidth - diskWidth) / 2;
          var disk = $('<div class="disk"></div>').css({
    
    
            width: diskWidth + 'px',
            left: diskLeft + 'px'
          });
          tower1.prepend(disk);
        }

        // 设置初始盘子位置
        $('.tower').each(function() {
    
    
          var tower = $(this);
          var disks = tower.children('.disk');
          var numDisks = disks.length;
          disks.each(function(index) {
    
    
            var disk = $(this);
            var bottom = (numDisks - 1 - index) * diskHeight;
            disk.css('bottom', bottom + 'px');
          });
        });
      }

      init();
    });
  </script>
</body>
</html>
相关文章
|
6月前
|
安全 C++ Python
小游戏实战-Python实现石头剪刀布+扫雷小游戏
小游戏实战-Python实现石头剪刀布+扫雷小游戏
96 0
|
6月前
LeetCode题:174. 地下城游戏
LeetCode题:174. 地下城游戏
64 0
LeetCode题:174. 地下城游戏
三子棋小游戏思路及代码实现的详解
三子棋小游戏思路及代码实现的详解
62 0
【动态规划刷题 5】 最小路径和&&地下城游戏
【动态规划刷题 5】 最小路径和&&地下城游戏
|
10天前
|
人工智能 BI C++
约瑟夫生者死者小游戏
约瑟夫生者死者小游戏。
94 59
|
5月前
小游戏:三子棋的代码实现
小游戏:三子棋的代码实现
33 3
|
6月前
|
算法 C语言
每日一题——迷宫问题(I)
每日一题——迷宫问题(I)
|
Linux 开发者 iOS开发
不来看看?通过Python实现贪吃蛇小游戏
不来看看?通过Python实现贪吃蛇小游戏
112 0
|
算法
【学会动态规划】地下城游戏(10)
【学会动态规划】地下城游戏(10)
60 0

相关实验场景

更多