CharlesMighty
CharlesMighty

Reputation: 572

javascript lottery game using random numbers what is wrong with my logic

A simple straight forward game user enters 6 numbers and clicks button play, if all 6 numbers are matched they win lottery, I have set up the loop so that it keeps generating a random numbers until the user wins, then informs them the number of loops it took to get to winning numbers. My problem with logic is that the loop terminates even if one number is matched I need it to keep running until all numbers are matched. Here is the code please help so that I can lean :)

 <html>
 <head>
 <title>Lottery Game</title>
 <SCRIPT LANGUAGE="javascript">

 function genNums(){

 var counter = 0;

    do{

    var num1 = Math.round(59 * Math.random())+1
    var resultnum1 = document.lottery.Rball1.value = num1

    var num2 = Math.round(59 * Math.random())+1
    var resultnum2 =document.lottery.Rball2.value = num2

    var num3 = Math.round(59 * Math.random())+1
    var resultnum3 =document.lottery.Rball3.value = num3

    var num4 = Math.round(59 * Math.random())+1
    var resultnum4 =document.lottery.Rball4.value = num4

    var num5 = Math.round(59 * Math.random())+1
    var resultnum5 =document.lottery.Rball5.value = num5

    var num6 = Math.round(59 * Math.random())+1
    var resultnum6 =document.lottery.Rball6.value = num6

    var enterednum1 = document.lottery.ball1.value;
    var enterednum2 = document.lottery.ball2.value;
    var enterednum3 = document.lottery.ball3.value;
    var enterednum4 = document.lottery.ball4.value;
    var enterednum5 = document.lottery.ball5.value;
    var enterednum6 = document.lottery.ball6.value;

    counter = counter + 1;

}while(resultnum1 != enterednum1 && resultnum2 != enterednum2 && resultnum3 != enterednum3 && resultnum4 != enterednum4 && resultnum5 != enterednum5 && resultnum6 != enterednum6)


//alert(counter);

if(resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum2 == enterednum2 && resultnum2 == enterednum2 && resultnum2 == enterednum2 && resultnum2 == enterednum2){

    alert("JackPot!, You Won The Lottery");
    alert("It took " + counter + " number of loops to get wining numbers")
    document.bgColor = "lightblue";

}
else{
    alert("sorry you did not win" + counter);
}


 }

</SCRIPT>



</head>
<body>

<Form Name = "lottery">

Lottery Game<br/>

Please enter your six numbers below:<br/>

Ball#1 <Input Type = "text" size = "1" value = "7" name = "ball1"><br/>
Ball#2 <Input Type = "text" size = "1" value = "45" name = "ball2"><br/>
Ball#3 <Input Type = "text" size = "1" value = "29" name = "ball3"><br/>
Ball#4 <Input Type = "text" size = "1" value = "10" name = "ball4"><br/>
Ball#5 <Input Type = "text" size = "1" value = "5" name = "ball5"><br/>
Ball#6 <Input Type = "text" size = "1" value = "25" name = "ball6"><br/>


<Input Type = "button" value = "Play" onClick = "genNums()"><br/>

Results:<br/>

Result Ball#1 <Input Type = "text" size = "1" name = "Rball1"><br/>
Result Ball#2 <Input Type = "text" size = "1" name = "Rball2"><br/>
Result Ball#3 <Input Type = "text" size = "1" name = "Rball3"><br/>
Result Ball#4 <Input Type = "text" size = "1" name = "Rball4"><br/>
Result Ball#5 <Input Type = "text" size = "1" name = "Rball5"><br/>
Result Ball#6 <Input Type = "text" size = "1" name = "Rball6"><br/>


</Form>
</body>
</html>

Upvotes: 1

Views: 4315

Answers (2)

JLowther
JLowther

Reputation: 1

Sometimes reading the NOT logic gets a little hairy, especially with while clauses which depend on something being true to keep continuing

I try to keep things 'true' as often as possible for readability

} while( !(resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum3 == enterednum3 &&
resultnum4 == enterednum4 && resultnum5 == enterednum5 && resultnum6 == enterednum6) )

edit: also, your if statement looks copied and pasted.. may want to fix the rest of the statement

if ( resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum3 == enterednum3 && resultnum4 == enterednum4 && resultnum5 == enterednum5 && resultnum6 == enterednum6 ){

edit 2: Here's the code that worked for me. It works about 1 in 4 tries but only because I reduced the random maximum to 6

 <html>
 <head>
 <title>Lottery Game</title>
 <SCRIPT LANGUAGE="javascript">

 function genNums(){

 var counter = 0;

    do{

    var num1 = Math.round(5 * Math.random())+1
    var resultnum1 = document.lottery.Rball1.value = num1

    var num2 = Math.round(5 * Math.random())+1
    var resultnum2 = document.lottery.Rball2.value = num2

    var num3 = Math.round(5 * Math.random())+1
    var resultnum3 = document.lottery.Rball3.value = num3

    var num4 = Math.round(5 * Math.random())+1
    var resultnum4 = document.lottery.Rball4.value = num4

    var num5 = Math.round(5 * Math.random())+1
    var resultnum5 = document.lottery.Rball5.value = num5

    var num6 = Math.round(5 * Math.random())+1
    var resultnum6 = document.lottery.Rball6.value = num6

    var enterednum1 = document.lottery.ball1.value;
    var enterednum2 = document.lottery.ball2.value;
    var enterednum3 = document.lottery.ball3.value;
    var enterednum4 = document.lottery.ball4.value;
    var enterednum5 = document.lottery.ball5.value;
    var enterednum6 = document.lottery.ball6.value;

    counter = counter + 1;

}while( !((resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum3 == enterednum3 && resultnum4 == enterednum4 && resultnum5 == enterednum5 && resultnum6 == enterednum6 ) || counter >= 10000 ) )


//alert(counter);

if( resultnum1 == enterednum1 && resultnum2 == enterednum2 && resultnum3 == enterednum3 && resultnum4 == enterednum4 && resultnum5 == enterednum5 && resultnum6 == enterednum6) {

    alert("JackPot!, You Won The Lottery");
    alert("It took " + counter + " number of loops to get winning numbers")
    document.bgColor = "lightblue";

}
else{
    alert("sorry you did not win after " + counter + " tries");
}


 }

</SCRIPT>



</head>
<body>

<Form Name = "lottery">

Lottery Game<br/>

Please enter your six numbers below:<br/>

Ball#1 <Input Type = "text" size = "1" value = "1" name = "ball1"><br/>
Ball#2 <Input Type = "text" size = "1" value = "2" name = "ball2"><br/>
Ball#3 <Input Type = "text" size = "1" value = "3" name = "ball3"><br/>
Ball#4 <Input Type = "text" size = "1" value = "4" name = "ball4"><br/>
Ball#5 <Input Type = "text" size = "1" value = "5" name = "ball5"><br/>
Ball#6 <Input Type = "text" size = "1" value = "6" name = "ball6"><br/>


<Input Type = "button" value = "Play" onClick = "genNums()"><br/>

Results:<br/>

Result Ball#1 <Input Type = "text" size = "1" name = "Rball1"><br/>
Result Ball#2 <Input Type = "text" size = "1" name = "Rball2"><br/>
Result Ball#3 <Input Type = "text" size = "1" name = "Rball3"><br/>
Result Ball#4 <Input Type = "text" size = "1" name = "Rball4"><br/>
Result Ball#5 <Input Type = "text" size = "1" name = "Rball5"><br/>
Result Ball#6 <Input Type = "text" size = "1" name = "Rball6"><br/>


</Form>
</body>
</html>

Upvotes: 0

hop
hop

Reputation: 2558

You need to have OR condition in your while loop

while(resultnum1 != enterednum1 || resultnum2 != enterednum2 || resultnum3 != enterednum3 || resultnum4 != enterednum4 || resultnum5 != enterednum5 || resultnum6 != enterednum6)

This way, even if one set doesn't match, the code will loop again !!

And since you are using Math.random(), you are going to have a tough time to validate the logic as you may either need to predict Math.random() 's outcome are be lucky to win the great lottery :)

Upvotes: 3

Related Questions