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>
相关文章
|
2月前
|
安全 C++ Python
小游戏实战-Python实现石头剪刀布+扫雷小游戏
小游戏实战-Python实现石头剪刀布+扫雷小游戏
52 0
|
9月前
三子棋小游戏思路及代码实现的详解
三子棋小游戏思路及代码实现的详解
25 0
|
9天前
小游戏:三子棋的代码实现
小游戏:三子棋的代码实现
10 3
|
2月前
leetcode-529:扫雷游戏
leetcode-529:扫雷游戏
26 0
|
程序员 C语言
趣味益智小游戏 三子棋+五子棋 优化版(可任意选择棋盘大小)
趣味益智小游戏 三子棋+五子棋 优化版(可任意选择棋盘大小)
84 0
推箱子小游戏(c++实现)
推箱子小游戏(c++实现)
|
算法 定位技术 C++
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。
507 6
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
|
索引
Leetcode 529 扫雷游戏
Leetcode 529 扫雷游戏
65 0
|
人工智能 C语言
C语言程序设计——三子棋游戏
C语言程序设计——三子棋游戏
95 0
C语言程序设计——三子棋游戏
|
C语言 开发者
汉诺塔|学习笔记
快速学习汉诺塔
71 0
汉诺塔|学习笔记