【问题标题】:trying to understand "Simon" game试图理解“西蒙”游戏
【发布时间】:2023-03-28 07:00:01
【问题描述】:

我正在开发 Simon 游戏。我需要帮助来了解如何引用 id 和创建操作而无需单击但要说页面刷新。

1) 在屏幕刷新(游戏开始)时,我可以随机化选择的颜色 id...并将其保存在一个名为 randomColorChosen 的变量中...但我不知道如何制作该变量 randomColorChosen,做出与点击按钮一样的操作,就像我在底部的代码一样。

2) 我的 btn 点击和动画颜色和播放声音...工作正常,

我已经尝试了很多次我的新手编码迭代...... 现在我只是猜测,这是它的最后一个状态......

...随机颜色选择有效...接下来我需要帮助(解释)

...$(document).keydown(function(event) {} 使用 alert() 工作和测试

...但其余的,直到我点击,我已经改变了很多次,我的头在旋转。帮助我了解我在哪里愚蠢的AF!哈哈

...用户 btn 点击事件动作和声音...工作正常!

到目前为止,这是我的代码:

buttonColors=["btn green","btn red", "btn yellow", "btn blue"];
randomColorChosen=buttonColors[Math.floor(Math.random() * (buttonColors.length))];
$(document).keydown(function(event) { 
setTimeout(2000);  
    $("#id").attr(function(randomColorChosen){
        $(this).fadeOut(100).fadeIn(100);
          var myPadColor = $(this).attr("#id");
        });
      });
$(document).ready(function() {
    $(".btn").click(function(event) {
      $(this).fadeOut(100).fadeIn(100);//when a "this" button is clicked .fadeOut(100).fadeIn(100);
      var myPadColor = $(this).attr("class");
       ;
      switch (myPadColor) {
        case "btn green":
          var greenPad = new Audio('sounds/green.mp3');
          greenPad.play();
          break;
        case "btn red":
          var redPad = new Audio('sounds/red.mp3');
          redPad.play();
          break;
        case "btn yellow":
          var yellowPad = new Audio('sounds/yellow.mp3');
          yellowPad.play();
          break;
        case "btn blue":
          var bluePad = new Audio('sounds/blue.mp3');
          bluePad.play();
          break;
        default:
          console.log(myPadColor);
      }
    });
  });

【问题讨论】:

  • 欢迎来到 Stack Overflow。请提供一个最小的、可重现的示例:stackoverflow.com/help/minimal-reproducible-example您当前的示例充满了问题,不清楚您尝试了什么或什么不起作用。
  • 您可能想要测试 localStorage 属性 onload,在某些事件上设置属性,例如 addEventListener('load', function(){ if(someElement.color){ /* do something with color */ } someElement.onclick = function(){ localStorage.color = 'yellow'; } });
  • 我的代码不起作用的部分是... $("#id").attr(function(randomColorChosen){ $(this).fadeOut(100).fadeIn(100) ; var myPadColor = $(this).attr("#id"); }); });我的代码开始,在 .keydown 我想要的是 randomColorChosen 变量,也能够随机选择一个 myPadColor,动画它,以及播放它的声音。这一切都是为了成为游戏的“第一招”。
  • @Bryant 你已经展示了你的代码,你还没有展示相应的 HTML。请提供一个更好的例子。
  • 按A键开始

    G

    R

    Y

    B

    身体的其余部分是一样的,但有各自的颜色

标签: javascript jquery html


【解决方案1】:

有点不清楚您要完成什么。我用一些可能的改进代码创建了一个示例。

$(function() {
  var seq = [];
  var player = [];
  var c;
  var round = 0;
  var sounds = [
    new Audio('sounds/green.mp3'),
    new Audio('sounds/red.mp3'),
    new Audio('sounds/yellow.mp3'),
    new Audio('sounds/blue.mp3')
  ];

  function getRandom() {
    return Math.floor(Math.random() * 4);
  }

  function initSeq(n) {
    for (var i = 0; i < n; i++) {
      seq.push(getRandom());
    }
  }

  function flash(b) {
    //console.log("Flashing Button " + b);
    var btn = $("#game-board .btn").eq(b);
    btn.fadeTo(300, 1.0, function() {
      btn.fadeTo(300, 0.35);
    });
    sounds[b].play();
  }

  function endGame() {
    $("#game-board").hide();
    $("h1").show();
    $("h1").after("<h2>Gome Over. Score: " + player.length + "</h2>");
  }

  function waitUserInput() {
    c = setInterval(endGame, 10 * 1000);
  }

  function playSequence(x) {
    if (x == 0 || x == undefined) {
      x = 20;
    }
    $.each(seq, function(i, s) {
      if (i < x) {
        flash(s);
      }
    });
  }

  function nextRound() {
    playSequence(++round);
  }

  function initGame() {
    initSeq(20);
    player = [];
    c = null;
    round = 0;
    nextRound();
  }

  $(document).keydown(function(event) {
    $("h1").hide();
    $("#game-board").show();
    initGame();
  });

  $("#game-board .btn").click(function(event) {
    var i = $(this).index();
    flash(i);
    player.push(i);
  });

  $("#playSeq").click(function() {
    var p = $(this).next().val();
    console.log("TEST: Play Sequence to " + p + " Position.");
    if (seq.length == 0) {
      initSeq(20);
      $("#game-board").show();
    }
    //console.log("TEST", seq);
    playSequence(p);
  });
});
#game-board {
  width: 410px;
  white-space: normal;
}

.btn {
  width: 200px;
  height: 200px;
  display: inline-block;
  opacity: 0.35;
  padding: 0;
  margin: 0;
  border: 0;
}

.green {
  background: green;
  border-radius: 199px 0 0 0;
}

.red {
  border: 0;
  background: red;
  border-radius: 0 199px 0 0;
}

.yellow {
  border: 0;
  background: yellow;
  opacity: 0.65;
  border-radius: 0 0 0 199px;
}

.blue {
  border: 0;
  background: blue;
  opacity: 0.65;
  border-radius: 0 0 199px 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test-bar">
  <button id="playSeq">Play To</button> <input type="number" value="1" style="width: 2.5em;" />
</div>
<h1>Press Any Key to Begin.</h1>
<div id="game-board" style="display: none;">
  <div class="btn green"></div>
  <div class="btn red"></div>
  <div class="btn yellow"></div>
  <div class="btn blue"></div>
</div>

【讨论】:

  • @Twisty 我试图做的是,在第一次加载页面时,什么都没有发生。用户只是看到游戏。它的 h1 标题为“按任意键开始游戏”。然后我的代码开始,在 .keydown 上(我知道如何更改 h1 以读取“级别 1”)我想要的是 randomColorChosen 变量,也能够随机选择一个 myPadColor,动画它,以及播放它的声音。这一切都是为了成为游戏的“firstMove”,这将成为游戏创建的数组中的第一项,用户必须在其中 ===
  • 我是故意的……在这个开始的部分寻求帮助……这样它就会迫使我使用我认为我知道的和我实际知道的。用户动作,例如,单击按钮,制作动画,播放声音......我可以做到(如图所示)......但现在我被困在“自动”又名游戏的开场动作上。接下来是游戏的随机移动,作为数组的入口......但我想我可以解决这个问题;-)
  • @Bryant 这不是那个网站。最好尝试一些代码或了解一些代码的 sn-p,当你到达一个你看不到过去的点时,然后发布一个问题。你必须先付出努力。我会参加巡回赛:stackoverflow.com/tour
  • @Bryant 您可能还喜欢:codepen.io/BenLBlood/pen/LGLEoJ
  • 并且记录在案...我承认我意识到自己的错误...Sooo....我确实检查了代码笔链接...也许我对此有点过于个人化了.. . 当你感到愚蠢时,这是一种脆弱的感觉......似乎有人公开证实了这一点,说“这对你来说是错误的网站!无论如何......感谢那个链接......但我已经可以访问答案。这是我的班级解决它的方式...我试图通过解决我自己的逻辑来更好地理解这个项目...因此寻求我的逻辑的帮助...无论如何...#没有难过的感觉!#调试#Code Life!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2019-08-02
  • 1970-01-01
相关资源
最近更新 更多