如何修复点击游戏,使其在按下“我感觉很幸运”游戏后恢复代码

问题描述 投票:0回答:1

因此,每次我尝试单击“我感觉很幸运”按钮时,它都会工作一秒钟,然后决定返回到原始数字,但会从代码的自动点击器部分添加单击。这是代码(也忽略冷却时间仅用于测试以确保其有效):

gambling.js:

function initClickerGame() {
  // Obtain references to counter, button, and message elements
  const counterEl = document.getElementById('counter');
  const luckyBtn = document.getElementById('luckyBtn');
  const messageEl = document.getElementById('message');
  let isCooldown = false;

  luckyBtn.addEventListener('click', () => {
    if (isCooldown) {
      messageEl.textContent = 'Cooldown in effect. Please wait 30 seconds.';
      messageEl.style.display = 'block';
      return;
    }

    const gamble = Math.random();
    let points = parseInt(counterEl.textContent) || 0; // Retrieve current points and convert to integer

    if (points < 100) {
      messageEl.textContent = 'You need at least 100 points to gamble.';
    } else {
      if (gamble < 0.4) {
        const pointsWon = Math.floor(points / 2);
        points += pointsWon;
        counterEl.textContent = points;
        messageEl.textContent = `You won ${pointsWon} points!`;
      } else if (gamble >= 0.4 && gamble < 0.7) {
        const pointsLost = Math.floor(points / 3);
        if (pointsLost >= points) {
          points = 0;
          counterEl.textContent = points;
          messageEl.textContent = 'You lost all your points!';
        } else {
          points -= pointsLost;
          counterEl.textContent = points;
          messageEl.textContent = `You lost ${pointsLost} points!`;
        }
      } else if (gamble >= 0.7 && gamble < 0.9) {
        points *= 2;
        counterEl.textContent = points;
        messageEl.textContent = `Congratulations! Your points have been doubled!`;
      } else {
        points = 0;
        counterEl.textContent = points;
        messageEl.textContent = 'Bad luck! You lost all points!';
      }
    }

    messageEl.style.display = 'block';
    isCooldown = true;

    setTimeout(() => {
      isCooldown = false;
      messageEl.style.display = 'none';
    }, 3); // 30 seconds cooldown
  });
}

window.onload = initClickerGame;

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Clicker Game</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <link rel="icon" type="image/x-icon" href="favicon.ico">
    <div class="container">
        <h1 id="counter" class="counter">0</h1>
        <br>
        <button class="clicker" id="clickerBtn">Click Me!</button><br><br>
        <button class="clicker" id="upgradeBtn">Buy Upgrader (Cost: 10)</button><br><br>
        <button class="clicker" id="luckyBtn">I'm Feeling Lucky</button><br><br>
        <button class="clicker" id="saveBtn" onclick="saveProgress()">Save Game</button><br><br>
        <button class="clicker" id="loadBtn" onclick="loadProgress()">Load Game</button><br><br>
        <button class="clicker" id="resetBtn" onclick="confirmReset()">Reset Game</button><br>
    </div>

    <div class="message" id="message"></div>

    <script src="anticheat.js"></script>
    <script src="gambling.js"></script>
    <script src="save.js"></script>

    <script>
        const counterEl = document.querySelector('.counter');
        let count = 0;
        let clickValue = 1;
        let upgradeCost = 10;
        let upgradeMultiplier = 2;
        let upgradeLevel = 1;
        let isCooldown = false;

        const clickerBtn = document.getElementById('clickerBtn');
        const upgradeBtn = document.getElementById('upgradeBtn');
        const luckyBtn = document.getElementById('luckyBtn');
        const messageEl = document.getElementById('message');

        clickerBtn.addEventListener('click', () => {
            count += clickValue;
            counterEl.textContent = count;
        });

        upgradeBtn.addEventListener('click', () => {
            if (count >= upgradeCost) {
                count -= upgradeCost;
                counterEl.textContent = count;
                clickValue *= upgradeMultiplier;
                upgradeLevel++;
                upgradeCost = upgradeCost * upgradeMultiplier;

                upgradeBtn.textContent = `Buy Upgrader (Cost: ${upgradeCost})`;

                if (upgradeLevel === 500) {
                    upgradeBtn.disabled = true;
                    upgradeBtn.textContent = `Upgrader Maxed!`;
                }
            } else {
                showMessage("Insufficient funds!");
            }
        });

        function updateCounter() {
            count += clickValue;
            counterEl.textContent = count;
        }

        function showMessage(text) {
            messageEl.textContent = text;
            messageEl.style.display = 'block';
            setTimeout(() => {
                messageEl.style.display = 'none';
            }, 5000);
        }

        function confirmReset() {
            const answer = prompt("WARNING: THIS WILL DELETE YOUR SAVE FILE AND START OVER!! To confirm the reset, what is the result of 100 + 5?");
            if (answer === "105") {
                resetGame();
            } else {
                showMessage("Incorrect answer. Reset not confirmed.");
            }
        }

        function resetGame() {
            count = 0;
            upgradeCost = 10;
            upgradeLevel = 1;
            clickValue = 1;

            counterEl.textContent = count;
            upgradeBtn.textContent = `Buy Upgrader (Cost: ${upgradeCost})`;

            showMessage("Game reset successfully!");
        }

        setInterval(updateCounter, 1000);
    </script>
</body>
</html>


我尝试用新的结构重写代码,但它破坏了更多,所以我只是恢复了代码。

javascript html
1个回答
0
投票

它返回到原始数字的原因是因为您直接更新

counterEl
元素而不更新变量
count
,而
updateCounter
使用
count
继续更新显示的值。

您可以尝试通过将

count = points;
添加到函数中来更新
count
来修复。

  luckyBtn.addEventListener('click', () => {
    if (isCooldown) {
      messageEl.textContent = 'Cooldown in effect. Please wait 30 seconds.';
      messageEl.style.display = 'block';
      return;
    }

    const gamble = Math.random();
    let points = parseInt(counterEl.textContent) || 0; // Retrieve current points and convert to integer

    if (points < 10) {
      messageEl.textContent = 'You need at least 100 points to gamble.';
    } else {
      if (gamble < 0.4) {
        const pointsWon = Math.floor(points / 2);
        points += pointsWon;
        counterEl.textContent = points;
        messageEl.textContent = `You won ${pointsWon} points!`;
      } else if (gamble >= 0.4 && gamble < 0.7) {
        const pointsLost = Math.floor(points / 3);
        if (pointsLost >= points) {
          points = 0;
          counterEl.textContent = points;
          messageEl.textContent = 'You lost all your points!';
        } else {
          points -= pointsLost;
          counterEl.textContent = points;
          messageEl.textContent = `You lost ${pointsLost} points!`;
        }
      } else if (gamble >= 0.7 && gamble < 0.9) {
        points *= 2;
        counterEl.textContent = points;
        messageEl.textContent = `Congratulations! Your points have been doubled!`;
      } else {
        points = 0;
        counterEl.textContent = points;
        messageEl.textContent = 'Bad luck! You lost all points!';
      }

      // Update count with points
      count = points;
    }

    messageEl.style.display = 'block';
    isCooldown = true;

    setTimeout(() => {
      isCooldown = false;
      messageEl.style.display = 'none';
    }, 30000); // 30 seconds cooldown
  });
© www.soinside.com 2019 - 2024. All rights reserved.