MaminProgrammist
@MaminProgrammist
Я слава беброу

Как сделать скрипт, который будет спрашивать букву, искать её в строке и заменять её символом, если она есть?

// Алгоритм игры:
// ● Компьютер выбирает слово случайным образом из некоторого списка слов
// ● Пока слово не угадано:
// ○ Выводим количество букв в слове и неугаданные символы в виде знака подчеркивания ( _ )
// ○ Предлагаем пользователю ввести букву
// ○ Если пользователь нажал "Отмена", завершаем игру
// ○ Проверяем, если буква есть в слове, заменяем неугаданные символы в местах совпадения в слове на эту букву.
// ● Выводим пользователю сообщение о загаданном слове и количестве попыток, который тот сделал, чтобы его угадать.

while (true) {
    const Game = {
        countAttempts: 0,
        wordsList: ['javascript', 'python', 'computer', 'aboba'], //слова, которые надо отгадывать
        badLetters: [], //буквы, которые не были найдены в слове
        rndWordChoice: function() { 
            //рандомайзер для выбора слова
            let random = Math.random();
            let chance = 1 / this.wordsListCount;
            const chanceList = [];
            for (let i = 1; i <= this.wordsListCount; i++) {
                let pushChance = chance * i;
                chanceList.push(pushChance)
            };
            if (random <= chanceList[0] && this.wordsList[0] !== undefined) {
                return this.wordsList[0]
            } else if (chanceList[0] < random <= chanceList[1] && this.wordsList[1] !== undefined) {
                return this.wordsList[1]
            } else if (chanceList[1] < random <= chanceList[2] && this.wordsList[2] !== undefined) {
                return this.wordsList[2]
            } else if (chanceList[2] < random <= chanceList[3] && this.wordsList[3] !== undefined) {
                return this.wordsList[3]
            } else {
                return null
            }
        },
        wordsListCount: this.wordsList.length,
    };

    randomChoice = Game.rndWordChoice();

    if (randomChoice != undefined) {
        let underlineWord = '_'.repeat(randomChoice.length);
        while (true) {
            alert(`Угадайте слово - ${underlineWord}\nБукв в слове - ${underlineWord.length}\nНеудачных попыток - ${Game.badLetters.length}`)
            let userInput = prompt('Введите букву:')
            if (randomChoice.includes(userInput)) {
                //сюда мне и нужен этот скрипт
            } else if (userInput == null) {
                break;
            } else {
                continue;
            }
        }

    } else {
        break;
    };
}


Не задумывайтесь о расположении вашего скрипта (
//сюда мне и нужен этот скрипт
), если вам это может усложнит задачу, я потом сам его туда встрою. Спасибо!

(если нужны ещё подробности, без которых вам будет тяжело мне помочь - спрашивайте в комментариях)
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно в ещё одном цикле искать очередную позицию угаданной буквы через indexOf и конструировать новую строку, заменяя подчёркивание в этой позиции на букву.
spoiler
game:
while (true) {
  const Game = {
    countAttempts: 0,
    wordsList: ['javascript', 'python', 'computer', 'aboba'], //слова, которые надо отгадывать
    badLetters: [], //буквы, которые не были найдены в слове
    rndWordChoice: function () {
      //рандомайзер для выбора слова
      return this.wordsList[Math.floor(Math.random() * this.wordsList.length)];
    },
  };

  let word = Game.rndWordChoice();

  let underlineWord = '_'.repeat(word.length);
  
  round:
  while (true) {
    alert(`Угадайте слово - ${underlineWord}\nБукв в слове - ${underlineWord.length}\nНеудачных попыток - ${Game.badLetters.length}`)
    const userInput = prompt('Введите букву:');
    if (userInput == null) break game;
    if (userInput.length !== 1) {
      alert('Нужна ровно 1 буква');
      continue;
    }
    const letter =  userInput.toLocaleLowerCase();
    if (word.includes(letter)) {
      let index = word.indexOf(letter);
      while (index > -1) {
        underlineWord = underlineWord.substring(0, index) + letter + underlineWord.substring(index + 1);
        index = word.indexOf(letter, index + 1);
      }
    } else {
      Game.badLetters.push(letter);
    }
  }
}
Случайный выбор слова заменил на однострочник.

Но вся идея реализации и модель данных че-т так-себе. Мелкие алёрты треш.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы