Home > Software engineering >  I've tried to make easy guessing game. But it doesn't work. What's wrong
I've tried to make easy guessing game. But it doesn't work. What's wrong

Time:11-05

Here's code

const prompt = require('prompt-sync')({ sigInt: true})

/* It's generating a random number from 0 to 100. */
let wylosowanaLiczba = Math.random() * 100
/* It's converting the number to an integer. */
wylosowanaLiczba = wylosowanaLiczba.toFixed(0)


/* It's asking the user to input a number from 0 to 100. */
let liczbaUzytkownika = prompt('Podaj liczbę od 0 do 100: ')


/* Checking if the function `sprawdzacz` returns false, if it does, it calls the function again. */
if (sprawdzacz(wylosowanaLiczba, liczbaUzytkownika) == false) {
    sprawdzacz(wylosowanaLiczba, liczbaUzytkownika)
} 




/**
 * It checks if the user's number is equal to the random number, if not, it checks if the user's number
 * is greater than the random number, if not, it checks if the user's number is less than the random
 * number.
 * @param wylosowanaLiczbaxx - the number that the computer generated
 * @param liczbaUzytkownikaxx - user's input
 * @returns the value of the last expression evaluated.
 */
function sprawdzacz(wylosowanaLiczbaxx, liczbaUzytkownikaxx) {
/* It's checking if the random number is greater than the user's number. If it is, it prints out a
message and asks the user to input a number again. */
    if (wylosowanaLiczbaxx > liczbaUzytkownikaxx) {
        console.log('\nWylosowana liczba jest większa niż twoja liczba!\n');
        liczbaUzytkownikaxx = prompt('Podaj liczbę od 0 do 100: ')
        return false
    }
/* It's checking if the random number is less than the user's number. If it is, it prints out a
message and asks the user to input a number again. */
    if (wylosowanaLiczbaxx < liczbaUzytkownikaxx) {
        console.log('\nWylosowana liczba jest mniejsza niż twoja liczba!\n');
        liczbaUzytkownikaxx = prompt('Podaj liczbę od 0 do 100: ')
        return false
    }
/* It's checking if the random number is equal to the user's number. If it is, it prints out a
message and returns true. */
    if (wylosowanaLiczba == liczbaUzytkownika) {
        console.log('\n\nBRAWO, WYGRALES\n\n')
        return true
    }
}

I was expecting working game, that gives you random numbers and you must guess a number. If it's more than you tried it will be console.log('\nWylosowana liczba jest większa niż twoja liczba!\n'), if less console.log('\nWylosowana liczba jest mniejsza niż twoja liczba!\n').

CodePudding user response:

@xMixerek I can provide my example ;)

const prompt = require('prompt-sync')({ sigInt: true });

const rangeMessage = '--- Provide a number in range between 0 to 100: '

/* It's generating a random number from 0 to 100. */
const randomNumber = (Math.random() * 100).toFixed(0);

/* It's asking the user to input a number from 0 to 100. */
let userNumber = 0;

function numberPrompt() {
    return prompt(rangeMessage);
}

function askUserForNumber() {
    const givenNumber = numberPrompt();

    if (!givenNumber || isNaN(givenNumber)) {
        console.error('Invalid argument, not a number');
        return 0;
    }

    const givenNumberFixed = Number(givenNumber).toFixed(0);

    if (givenNumberFixed < 0 || givenNumberFixed > 100) {
        console.warn(rangeMessage);
        return 0;
    }

    return givenNumberFixed;
}


/* Checking if the function `validateNumbers` returns false, if it does, it calls the function again. */
if (randomNumber !== userNumber) {
    do {
        userNumber = askUserForNumber()
    } while (!validateNumbers(randomNumber, userNumber));
}

/**
 * It checks if the user's number is equal to the random number, if not, it checks if the user's number
 * is greater than the random number, if not, it checks if the user's number is less than the random
 * number.
 * @param randomNumber - the number that the computer generated
 * @param userNumber - user's input
 * @returns the value of the last expression evaluated.
 */

function validateNumbers(randomNumber, userNumber) {
    // console.log({ randomNumber, userNumber }); //debugg

    if (!userNumber) return false;

    if (randomNumber === userNumber) {
        console.log('-----------', 'You won, the numbers matches!', '-----------');
        return true;
    }

    /* It's checking if the random number is greater than the user's number. If it is, it prints out a
    message and asks the user to input a number again. */
    if (randomNumber > userNumber) {
        console.log('The random number is bigger than yours!');
        return false;
    }

    /* It's checking if the random number is less than the user's number. If it is, it prints out a
    message and asks the user to input a number again. */
    if (randomNumber < userNumber) {
        console.log('The random number is smaller than yours!');
        return false;
    }
}

/**
It's checking if the random number is equal to the user's number. If it is, it prints out a
message and returns true. 
*/

a Replit reproduction here

CodePudding user response:

At first, you should consider making your variable names English despite the language that you're writing in. Secondly, you can spot the issue when you follow the code deeply.

let liczbaUzytkownika = prompt('Podaj liczbę od 0 do 100: ') Here you're getting the users number and passing it to the function.

function sprawdzacz(wylosowanaLiczbaxx, liczbaUzytkownikaxx) {
    if (wylosowanaLiczbaxx > liczbaUzytkownikaxx) {
        console.log('\nWylosowana liczba jest większa niż twoja liczba!\n');
        liczbaUzytkownikaxx = prompt('Podaj liczbę od 0 do 100: ')
        return false
    }
}

Here, on the 4th line you're overwriting the argument not the variable up above, so you're basically calling the function again with the same parameters. The prompt data only modifies the argument so the base variable is not changed.

if (sprawdzacz(wylosowanaLiczba, liczbaUzytkownika) == false) {
    sprawdzacz(wylosowanaLiczba, liczbaUzytkownika)
} 

Over here you're calling the same function twice with the same argument. With minimal changes I'd recommend a recursive solution.

function sprawdzacz(wylosowanaLiczbaxx, liczbaUzytkownikaxx) {
    if (wylosowanaLiczbaxx > liczbaUzytkownikaxx) {
        console.log('\nWylosowana liczba jest większa niż twoja liczba!\n');
        liczbaUzytkownika = prompt('Podaj liczbę od 0 do 100: ')
        return sprawdzacz(wylosowanaLiczbaxx, liczbaUzytkownika);
    }
    //The rest of the code checking if the player won...
}

This calls the function again with the new argument. And instead of using that if you just call the function sprawdzacz(wylosowanaLiczba, liczbaUzytkownika)

Powodzenia!

  • Related