Javascript функция, если заявление - PullRequest
0 голосов
/ 10 октября 2019

Я делаю игру в кости на javascript, где вы делаете ставку, если результат будет ODD или ДАЖЕ, и когда вы нажимаете кнопку, игра в кости бросается, и она показывает, является ли она нечетной или четной. Моя единственная проблема заключается в том, что когда вы делаете ставку чётно и получаете нечетное, он не будет записывать это как проигрыш, или если вы делаете ставку чётно и получаете чёт, он не будет записываться как выигрыш. Подводя итог, я не знаю, почему он не записывает счет игрока. Вся помощь приветствуется, пожалуйста, и спасибо, также код здесь.

var score = 0;
var lose = 0;
document.getElementById("Even").addEventListener("click", Evencheck);

function Evencheck() {
  var d1 = Math.floor(Math.random() * 6) + 1;
  var d2 = Math.floor(Math.random() * 6) + 1;
  var d11 = parseInt(d1);
  var d22 = parseInt(d2);
  var d33 = parseInt(d11 + d22);
  die1.innerHTML = "Dice 1 rolled: " + d1;
  die2.innerHTML = "Dice 2 rolled: " + d2;
  sum.innerHTML = " Total Sum: " + d33;
  if (d33 % 2 == 0 && Even.Clicked) {
    var score = score + 1;
    wins.innerHTML = " Wins : " + score;
    losses.innerHTMl = " Losses : " + lose;
  }
  if (d33 % 2 == 1 && Even.Clicked) {
    var lose = lose + 1;
    wins.innerHTML = " Wins : " + score;
    losses.innerHTMl = " Losses : " + lose;
  }
}
document.getElementById("Odd").addEventListener("click", Oddcheck);

function Oddcheck() {
  var d1 = Math.floor(Math.random() * 6) + 1;
  var d2 = Math.floor(Math.random() * 6) + 1;
  var d11 = parseInt(d1);
  var d22 = parseInt(d2);
  var d33 = parseInt(d11 + d22);
  die1.innerHTML = "Dice 1 rolled: " + d1;
  die2.innerHTML = "Dice 2 rolled: " + d2;
  sum.innerHTML = " Total Sum: " + d33;
  if (d33 % 2 == 0 && Odd.Clicked) {
    var lose = lose + 1;
    wins.innerHTML = " Wins : " + score;
    losses.innerHTMl = " Losses : " + lose;
  }
  if (d33 % 2 == 1 && Odd.Clicked) {
    var score = score + 1;
    wins.innerHTML = " Wins : " + score;
    losses.innerHTMl = " Losses : " + lose;
  }
}
<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="defaults.css">
  <title>INTRO</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<body>
  <h1><img src="dice.png" alt="dice" width="50" height="50"> EVEN ODDS<img src="dice.png" alt="dice" width="50" height="50"> </h1>
  <div id="die1" class="dice"> Dice1 :0</div>
  <div id="die2" class="dice"> Dice2 :0</div>
  <div id="sum" class="dicesum"> Sum :0</div>
  <div id="wins" class="score"> Wins :0</div>
  <div id="losses" class="lose"> Losses :0</div>
  <button class="Even" onclick="Evencheck()">Even</button>
  <button class="Odd" onclick="Oddcheck()">ODD</button>

</body>

</html>

Ответы [ 3 ]

1 голос
/ 10 октября 2019

У вас есть небольшие логические ошибки, я бы порекомендовал вам воспользоваться JavaScript, вы можете просто иметь модуль "main" (давайте назовем его play()), где вы можете обрабатывать свои игрылогика.

Кроме того, если вы не используете определенные вами ссылки DOM, всегда лучше их удалить. Чем меньше кода, тем лучше. (в большинстве случаев)

Посмотрите на следующие исправления:

Что изменилось?:

  • Добавлен "log" div, такигрок может видеть, что происходит.
  • Удалены неиспользуемые ссылки DOM.
  • Добавлена ​​play() функция, которая обрабатывает все в вашей игре.
  • Добавлена ​​rollDice() функция,который бросает количество кубиков, которые вы хотите.

И все, меньше кода, намного удобнее для чтения и работы. Дайте ему тест:

let won = 0;
let lost = 0;
    
function rollDice(amount=1) { // A module that rolls the amount dices you want
  let dices = [];
  for(let c=0;c<amount;c++) {
    dices.push(+Math.floor(Math.random() * 6) + 1);
  }
  return dices; // Returns it as an array
}

function play(selection) {
  let dices = rollDice(2); // Roll two dices
  let sum = dices[0] + dices[1];
  die1.innerHTML = "Dice 1 rolled: " + dices[0];
  die2.innerHTML = "Dice 2 rolled: " + dices[1];
  res.innerHTML = " Total Sum: " + sum;
  let result = sum % 2 === 0 ? "even" : "odd"; // Ternary if statement to get the result
  log.innerHTML = `
    You selected ${selection} and result is ${result}.
    You ${selection===result ? "won" : "lost"}.
  `;
  if(selection===result) { // If statement that handles score based on result
    won++;
  } else {
    lost++;
  }
  wins.innerHTML = "Wins: " + won; // Update both results on screen after played
  losses.innerHTML = "Losses: " + lost;
}
<img src="dice.png" alt="dice" width="50" height="50">
<h1>EVEN</h1>
<h1>ODDS</h1>
<img src="dice.png" alt="dice" width="50" height="50">
<div id="die1" class="dice"> Dice1 :0</div>
<div id="die2" class="dice"> Dice2 :0</div>
<div id="res" class="dicesum"> Sum :0</div>
<div id="wins" class="score"> Wins :0</div>
<div id="losses" class="lose"> Losses :0</div>
<button class="even" name="even" onclick="play(this.name)">Even</button>
<button class="odd" name="odd" onclick="play(this.name)">ODD</button>
<div id="log"></div>
1 голос
/ 10 октября 2019

Рассмотрим написание функций, которые принимают входные данные и выдают выходные данные -

const roll = (sides = 6) =>
  Math.floor(Math.random() * sides) + 1
   
const isWin = (sum, bet) =>
  (sum & 1) === bet

const update = (bet, state) =>
{ const d1 = roll()
  const d2 = roll()
  const sum = d1 + d2

  return Object.assign
    ( state
    , { d1, d2, sum }
    , isWin(sum, bet)
        ? { win: state.win + 1 }
        : { loss: state.loss + 1 }
    )
}

const render = (form, state) =>
  Object
    .entries(state)
    .forEach(([ k, v ]) => form[k].value = v)
 
const play = (form, bet, state) =>
  render
    ( form
    , update(bet, state)
    )

// init
const state =
  { d1: 0, d2: 0, sum: 0, win: 0, loss: 0 }

const f = document.querySelector("form")
f.evenbet.addEventListener("click", event => play(f, 0, state))
f.oddbet.addEventListener("click", event => play(f, 1, state))

render(f, state)
<form>
  Dice: <output name="d1"></output> <output name="d2"></output><br>
  Sum: <output name="sum"></output><br>
  <br>
  Win: <output name="win"></output> &nbsp; 
  Loss: <output name="loss"></output><br>
  Bet:
  <button type="button" name="oddbet">Odd</button>
  <button type="button" name="evenbet">Even</button>
</form>
0 голосов
/ 10 октября 2019

в вашем коде было несколько ошибок -

  1. "Четные" и "нечетные" были классами, а не идентификаторами, поэтому вы не могли связать их - замените атрибут класса атрибутом id.
  2. Вы, если операторы не сработали, поскольку вы разделили свой код на нечетный и четный. Вам просто нужно проверить, является ли число нечетным или событием, а не какая кнопка была нажата - удалили его из статистики.
  3. ваш код не распознал html-элементы для выигрыша и проигрыша - поэтому я обработал его с помощью add getelemntbyid.
  4. вы набрали очки и потеряли глобальные переменные, но вы их повторно объявили, поэтому вы не получилиправильное значение там, я удаляю объявление var из переменных в функциях.
  5. самое важное, я рекомендую вам делать это в одной функции, которая получает параметры, а не в 2 функциях, которые обрабатывают каждый случай.

попробуйте следующее-

<h1><img src="dice.png" alt="dice" width="50" height="50">
    EVEN ODDS<img src="dice.png" alt="dice" width="50" height="50"> <h1><img src="dice.png" alt="dice" width="50" height="50">
    EVEN ODDS<img src="dice.png" alt="dice" width="50" height="50"> </h1>
<div id="die1" class="dice"> Dice1 :0</div>
<div id="die2" class="dice"> Dice2 :0</div>
<div id="sum" class="dicesum"> Sum :0</div>
<div id = "wins" class="score"> Wins :0</div>
<div id = "losses" class="lose"> Losses :0</div>
<button type="button" onclick="clicked(this.name)" name="even">Even</button>
<button type="button" onclick="clicked(this.name)" name="odd">ODD</button>

 <script>
  let score = 0;
  let lose = 0;
  const losses = document.getElementById("losses");
  const wins = document.getElementById("wins");
  function clicked(name){
    var d1 = Math.floor(Math.random() * 6) + 1;
    var d2 = Math.floor(Math.random() * 6) + 1;
    var d11 = parseInt(d1);
    var d22 = parseInt(d2);
    var d33 = parseInt(d11 + d22);
            const result = d33 % 2 == 0 ? 'even' : 'odd';
    die1.innerHTML = "Dice 1 rolled: " + d1;
    die2.innerHTML = "Dice 2 rolled: " + d2;
    sum.innerHTML = " Total Sum: " + d33;
    if( name === result) {
        score++;
      } else {
        lose++
    }
    wins.innerHTML = " Wins : " + score;
    losses.innerHTML = " Losses : " + lose;
  }
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...