1

Тема: Js _гра відгадай слово

є код для гри Відгадай слово. Потрібно зробити, коли я вводжу букву (велику), вона замінювалась на маленьку і якщо вона є, щоб виводилась в алерті маленька буква.
ось цей код, який має міняти велику букву на маленьку. Не можу зрозуміти чому він не працює

// if ((quess_letter = quess_letter.toUpperCase())) {
    //     quess_letter = guess_letter.toLowerCase();
    //}

Це весь код:

var words = ['яблуко', 'магазин'];
var word = words[Math.floor(words.length * Math.random())];
var unknown_word = [];
for (var i = 0; i < word.length; i++) {
    unknown_word[i] = '_';
}
var remaining_letter = word.length;
while (remaining_letter > 0) {
    alert(unknown_word.join(' '));
    var quess_letter = prompt('Відгадайте букву');
    if (quess_letter == null) {
        break;
    }
    // if ((quess_letter = quess_letter.toUpperCase())) {
    //     quess_letter = guess_letter.toLowerCase();
    //}
    else if (quess_letter.length !== 1) {
        alert('Потрібно ввести 1 букву');
    } else {
        for (j = 0; j < word.length; j++) {
            if (word[j] === quess_letter) {
                unknown_word[j] = quess_letter;
                remaining_letter--;
            }
        }
    }
}

alert(unknown_word.join(' '));
if (remaining_letter == 0) {
    alert('Ви відгадали слово - ' + word);
}

2

Re: Js _гра відгадай слово

1) Тому що закоментований? Приберіть //
2) Тому що використовуєте присвоєння (=) в умові if, де має бути порівняння (==)? Типова помилка новачків. Ще раз: там, де перевіряєте, чи рівні два значення, ставиться == , а там, де в змінну zm записується нове значення zn, пишемо zm=zn

Подякували: koala1

3 Востаннє редагувалося koala (08.09.2021 07:38:16)

Re: Js _гра відгадай слово

Щоб гарантовано отримати літеру в нижньому регістрі, треба просто викликати toLowerCase. Перевірка (тим більш з помилкою) не потрібна, символи, що не мають нижнього регістру, методом toLowerCase не змінюються. І, будь ласка, конкретно пишіть, що відбувається, замість "не працює". Якщо літера не змінюється - то пишіть "літера не змінюється", якщо ви отримуєте повідомлення про помилку - пишіть, яку саме.

Ну і трохи смакоти з ES6:

var unknown_word = Array.from({length:10},()=>'_'); //те саме, що й у вас, але значно коротше

Звісно, якщо вам складно поки що читати такий код - пишіть, як раніше, читаність - це головне.

P.S. якщо розкоментувати ваш код, то він майже працює (хоча й надмірно складно), якщо виправити помилку в одній літері. І текст повідомлення про помилку там однозначний.

4

Re: Js _гра відгадай слово

якось так

var words = ['яблуко', 'магазин'];
var word = words[Math.floor(words.length * Math.random())];
var unknown_word = [];
for (var i = 0; i < word.length; i++) {
    unknown_word[i] = '_';
}
var remaining_letter = word.length;
while (remaining_letter > 0) {
    alert(unknown_word.join(' '));
    var quess_letter = prompt('Відгадайте букву');
    if (quess_letter == null) {
        break;
    } else {
        quess_letter = quess_letter.toLowerCase();
        if (quess_letter.length !== 1) {
            alert('Потрібно ввести 1 букву');
        } else {
            for (j = 0; j < word.length; j++) {
                if (word[j] === quess_letter) {
                    unknown_word[j] = quess_letter;
                    remaining_letter--;
                }
            }
        }
    }
}

alert(unknown_word.join(' '));
if (remaining_letter == 0) {
    alert('Ви відгадали слово - ' + word);
}

5

Re: Js _гра відгадай слово

Ви на чому це все запускаєте? Якщо в оглядачі - то створили б HTML-сторінку на 3-4 елементи і виводили б текст у відповідні поля, це значно зручніше за prompt та alert.

6

Re: Js _гра відгадай слово

І ще дрібна порада: якщо ви вже не структурний код пишете (break же є?), то можна трохи "сплющити" його. Після break та continue не потрібні else:

while (remaining_letter > 0) {
    alert(unknown_word.join(' '));
    var quess_letter = prompt('Відгадайте букву');
    if (quess_letter == null) {
        break;
    } 
    quess_letter = quess_letter.toLowerCase();
    if (quess_letter.length !== 1) {
        alert('Потрібно ввести 1 букву');
        continue;
    } 
    for (j = 0; j < word.length; j++) {
        if (word[j] === quess_letter) {
            unknown_word[j] = quess_letter;
            remaining_letter--;
        }
    }
}

7

Re: Js _гра відгадай слово

koala написав:

Ви на чому це все запускаєте? Якщо в оглядачі - то створили б HTML-сторінку на 3-4 елементи і виводили б текст у відповідні поля, це значно зручніше за prompt та alert.

Oskiky tut prosto vyvid teksta, to mogna tupo na jakomusj VS Kodji tcerez console.log() vyvodyty na konsolju potrjibne.

Подякували: 0xDADA11C7, koala2