在javascript中的水果忍者类型游戏

时间:2018-04-26 01:00:48

标签: javascript

我试图在javascript中制作一个忍者水果风格游戏,但问题正在发生。我有这个if语句来比较变量" fruit"与#34;水果"的指数阵列。问题是当我"消除"如果陈述起作用,另一个是果实。

游戏需要如何运作:

1您开始游戏时,会出现一个水果的随机名称供您点击。

2您点击水果的图像并消失,在此单击中会生成另一个随机水果。

3然后你完成游戏,这很多就是这个。

所以很难解释,但它与忍者水果游戏的逻辑相同。而且我不知道是否需要使用shift函数来消除数组中的果实。



var fruits = ['Banana', 'Apple', 'Pineapple'];
var fruit = fruits[Math.floor(Math.random() * fruits.length)];
document.getElementById("frut").innerHTML = fruit;
if (fruit == fruits[0]) {
  bana.onclick = function() {
    var fruit = fruits[Math.floor(Math.random() * fruits.length)];

    document.getElementById("frut").innerHTML = fruit;

    bana.style.display = "none";
  }
}
if (fruit == fruits[1]) {
  app.onclick = function() {
    var fruit = fruits[Math.floor(Math.random() * fruits.length)];
    document.getElementById("frut").innerHTML = fruit;
    app.style.display = "none";
  }
}
if (fruit == fruits[2]) {

  pin.onclick = function() {
    var fruit = fruits[Math.floor(Math.random() * fruits.length)];
    document.getElementById("frut").innerHTML = fruit;
    pin.style.display = "none";
  }
}
function movFruit() {

  document.getElementById("info").style.display = "table";
  document.getElementById("fruitAnimation").style.display = "table";
  document.getElementById("insructions").style.display = "none";

  var elem = document.getElementById("fruitAnimation");
  var pos = 0;
  var id = setInterval(frame, 10);

  function frame() {
    if (pos == 350) {
      clearInterval(id);
    } else {
      pos++;
      elem.style.top = pos + 'px';
    }
  }
}

#fruitAnimation {
  position: relative;
  display: none;
  margin: 0 auto;
}

.fr {
  float: left;
  padding: 80px;
}

#info {
  display: none;
  margin: 0 auto;
}

#insructions {
  display: table;
  margin: 0 auto;
  margin-top: 200px;
  border: 1px solid black;
  padding: 10px;
}

<!doctype html>
<html lang="en">

<head>
  <!-- Required meta tags -->
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">

  <title>JSfruit</title>
</head>





<body>
  <div id="info">
    <h1>Fruit: <span id="frut"></span></h1>
  </div>


  <button onclick="movFruit() " style="display: table; margin: 0 auto;"><h4>Start the game</h4></button>




  <div id="fruitAnimation">
    <div class="fr" id="bana">
      <img src="https://orig00.deviantart.net/5c87/f/2016/322/8/9/banana_pixel_art_by_fireprouf-daosk9z.png" width="60" height="60">
    </div>
    <div class="fr" id="app">
      <img src="https://art.ngfiles.com/images/404000/404664_thexxxreaper_pixel-apple.png?f1454891997" width="60" height="60">
    </div>
    <div class="fr" id="pin">
      <img src="https://i.pinimg.com/originals/c2/f9/e9/c2f9e9f8d332da97a836513de98f7b29.jpg" width="60" height="60">
    </div>
  </div>

  <span id="insructions">Click in the fruits and erase them!</span>


</body>

</html>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

现在,你只是在if语句中将处理程序附加到顶层的水果图像 - 但是一旦这些语句运行并且主要块完成,它就不会得到又跑了。

您应该在开始时一次性将处理程序附加到所有水果图像,然后在处理程序中,检查点击的水果是否有效。

如果您要为某个元素分配文字,请指定textContent,而不是innerHTML; textContent更快,更安全,更可预测。

&#13;
&#13;
const fruits = ['Banana', 'Apple', 'Pineapple'];
const getRandomFruit = () => {
  const randomIndex = Math.floor(Math.random() * fruits.length);
  const fruit = fruits[randomIndex];
  document.getElementById("frut").textContent = fruit;
  fruits.splice(randomIndex, 1);
  return fruit;
};
let fruitToClickOn = getRandomFruit();


bana.onclick = function() {
  if (fruitToClickOn !== 'Banana') return;
  bana.style.display = "none";
  fruitToClickOn = getRandomFruit();
}
app.onclick = function() {
  if (fruitToClickOn !== 'Apple') return;
  app.style.display = "none";
  fruitToClickOn = getRandomFruit();
}
pin.onclick = function() {
  if (fruitToClickOn !== 'Pineapple') return;
  pin.style.display = "none";
  fruitToClickOn = getRandomFruit();
}


function movFruit() {

  document.getElementById("info").style.display = "table";
  document.getElementById("fruitAnimation").style.display = "table";
  document.getElementById("insructions").style.display = "none";

  var elem = document.getElementById("fruitAnimation");
  var pos = 0;
  var id = setInterval(frame, 10);

  function frame() {
    if (pos == 350) {
      clearInterval(id);
    } else {
      pos++;
      elem.style.top = pos + 'px';
    }
  }
}
&#13;
#fruitAnimation {
  position: relative;
  display: none;
  margin: 0 auto;
}

.fr {
  float: left;
  padding: 80px;
}

#info {
  display: none;
  margin: 0 auto;
}

#insructions {
  display: table;
  margin: 0 auto;
  margin-top: 200px;
  border: 1px solid black;
  padding: 10px;
}
&#13;
<!doctype html>
<html lang="en">

<head>
  <!-- Required meta tags -->
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

  <!-- Bootstrap CSS -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">

  <title>JSfruit</title>
</head>





<body>
  <div id="info">
    <h1>Fruit: <span id="frut"></span></h1>
  </div>


  <button onclick="movFruit() " style="display: table; margin: 0 auto;"><h4>Start the game</h4></button>




  <div id="fruitAnimation">
    <div class="fr" id="bana">
      <img src="https://orig00.deviantart.net/5c87/f/2016/322/8/9/banana_pixel_art_by_fireprouf-daosk9z.png" width="60" height="60">
    </div>
    <div class="fr" id="app">
      <img src="https://art.ngfiles.com/images/404000/404664_thexxxreaper_pixel-apple.png?f1454891997" width="60" height="60">
    </div>
    <div class="fr" id="pin">
      <img src="https://i.pinimg.com/originals/c2/f9/e9/c2f9e9f8d332da97a836513de98f7b29.jpg" width="60" height="60">
    </div>
  </div>

  <span id="insructions">Click in the fruits and erase them!</span>


</body>

</html>
&#13;
&#13;
&#13;