TransWikia.com

Не получается сравнить счета игроков в игре Угадай число

Stack Overflow на русском Asked by bota on January 1, 2022

Всем привет! Недавно начала изучать JS. Никак не могу разобраться как сравнить счета игроков по количеству ходов. Заранее извиняюсь если что то неразумное вышло, я новичок.
В главном меню если выбрать игру в раунд, пользователь и компьютер играют по очереди. По количество шагов в каждом раунде даются очки. Количество шагов считаются в функции и для пользователя и для компьютера. А вытащить данные не получается

let count = 1;

let getRandomInt = (max) => {
  return Math.floor(Math.random() * Math.floor(max) + 1);
};

let makeCounter = () => {
  let currentCount = 1;
  return {
    getNext: function() {
      return currentCount++;
    },
    reset: function() {
      currentCount = 1;
    }
  };
}
let counter = makeCounter();


let playGameForUser = () => {
  randomInt = getRandomInt(100);
  console.log(randomInt); // console
  while (count > 0) {
    let user = prompt('Guess the number. User says:');
    if (user === null) {
      break;
    } else if (isNaN(+user) || user === '') {
      alert('Please enter only numbers')
    } else if (+user < randomInt) {
      alert('greater');
    } else if (+user > randomInt) {
      alert('less')
    } else if (+user === randomInt) {
      alert(`Yes? It is!
Got it in ${counter.getNext()} steps!`);
      break;
    }
    counter.getNext();
  }
  counter.reset();
};

let playGameForComputer = () => {
  while (count > 0) {
    let randomInt = getRandomInt(100);
    let computer = prompt(`Computer asks:
is it ${randomInt} ?
(Enter less, greater or yes)`);
    if (computer === null) {
      break;
    } else {
      computer = computer.toLowerCase();
      if (computer === 'less' || computer === 'greater') {

      } else if (computer === 'yes') {
        alert(`Got it in ${counter.getNext()} steps!`);
        break;
      } else {
        alert('Please enter right answer')
      }
    }
    counter.getNext();
  }
  counter.reset();
};

let playWithTurn = () => {
  let turn = prompt('Enter the number of rounds');
  if (turn === '') {
    turn = 3;
  } else {
    turn = +turn;
  };
  while (count < (+turn + 1)) {
    let scoreForUser = 0;
    let scoreForComputer = 0;
    alert(`Round ${count} `);
    playGameForUser();
    playGameForComputer();
    switch (true) {
      case (counter.getNext < counter.getNext):
        scoreForUser++; break;
      case (counter.getNext > counter.getNext):
        scoreForComputer++; break;
      case (counter.getNext === counter.getNext):
        scoreForComputer++ && scoreForUser++; break;
    }

    alert(`Score:
user ${scoreForUser}
computer: ${scoreForComputer}`)
    count++
  }
};

let chooseModeTheGame = () => {
  while (count > 0) {
    let mode = prompt(`Choose the mode of game (user or computer or round):
                                
user - You need guess the number;
computer - Computer try to guess the number
round - You take turns playing with the computer `);
    if (mode === null) {
      alert('Bye. See you later');
      break;
    } else {
      mode = mode.toLowerCase();
      if (mode === 'user') {
        playGameForUser();
      } else if (mode === 'computer') {
        playGameForComputer();
      } else if (mode === 'round') {
        playWithTurn()
      }
    }
  };
};

chooseModeTheGame()

One Answer

  • Вам надо, чтобы playGameForUser и playGameForComputer в конце выполнения(раунда) возвращали итоговое количество затраченных ходов.
  • В свою очередь playWithTurn должен принимать и обрабатывать
    возвращаемое значение функций playGameFor....
  • Количество ходов для функций лучше считать через локальные
    переменные в функциях playGameFor..., а не через makeCounter

Схематичный пример логики.

`

let playGameForUser = () => {
  let counter // вместо makeCounter локальная переменная, для хранения количества ходов
  //код игры
  return counter //возвращаем итоговое количество ходов
}

let playGameForComputer => {
  let counter // // вместо makeCounter локальная переменная, для хранения количества ходов
  //код игры
  return counter //возвращаем итоговое количество ходов
}


let playWithTurn => {
    //Стартовый счет. 
    let score = {
      user: 0;
      computer: 0
    }

    /* ваш код игры */

    //цикл игры
    //playGameForUser() и ForComputer() возвращают количество ходов, в текущем примере 1 ход = 1 очку, вы делайте, как вам нужно.
    while (true) {
      score.user += playGameForUser();
      score.computer += playGameForComputer();
    }

    //после выполнения цикла, вы можете работать с итоговым значением score
    let winner = //какие-то операции со score
      console.log(`Winner is ${winner})
  }

Answered by xydope on January 1, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP