1

I want to test how many red/black/even/odd comes up in a row in the game of roulette.

The following function will loop through a list of spins n and give how many times in a row red won and lost. The same function can be used for all the other types of even wins however the check is different

color[n[i]] == "red"

I want to pass a different check into this function to test for evens

n[i]%2 == 0

Can this be done?

function test(n)
{
    var wins = parseInt(0);
    var losses = parseInt(0);

    for(var i=0;i<n.length;i++)
    {
        if(color[n[i]] == "red")
        {
            wins += 1 
            losses = 0
        }
        else
        {
            wins = 0
            losses += 1
        }

    }
.
.
.

PART 2

This is the full code. If you click the 'Enter Spins' button and the 'Toggle Number Pad' button, then add the number 8 twice, then 3 alerts will display.

I can not seem to get the the 3 messages to show up on separate lines. I tried some examples, but it always adds the line return before the last message. Do you know how to get the multiple messages on separate lines?

<html>
<head>
<style>
.bntcal {
    padding: 10px 10px 10px 10px;
    margin: 10px;
}
.bntcaladd {
    padding: 10px 10px 10px 10px;
    margin: 10px;
}

.bntshow{
    padding: 5px 5px 5px 5px;
    margin: 5px;
    width: 10%;
}
.spanhide {
    display: none;
}
.bell {
    float:left;
    display: none;
}

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
var wheel0 = [37,32,15,19,4,21,2,25,17,34,6,27,13,36,11,30,8,23,10,5,24,16,33,1,20,14,31,9,22,18,29,7,28,12,35,3,26];
var wheel00 = [37,28,9,26,30,11,7,20,32,17,5,22,34,15,3,24,36,13,1,38,27,10,25,29,12,8,19,31,18,6,21,33,16,4,23,35,14,2];
var wheel = wheel00;
var wColor = "";
var numbers = [];
var color = [];



$(document).ready(function(){

    // --- Menu Buttons
    $("#enterSpins").click(function(){
        $("#divSpins").show();
        $("#divAlerts").hide();
        $("#divHowTo").hide();
    });

    $("#setAlert").click(function(){
        $("#divAlerts").show();
        $("#divSpins").hide();
        $("#divHowTo").hide();
    });

    $("#howTo").click(function(){
        $("#divHowTo").show();
        $("#divSpins").hide();
        $("#divAlerts").hide();

    });

    // ---- Sub Buttons
    $("#enterPad").click(function(){
        $("#showSpinsPad").toggle();
        $("#clearBox").toggle();
        $("#clearBox1").toggle();
        if(!$("#showSpinsPad").is(":hidden"))
        {
            $("#spins").prop("disabled", true)
        }
        else
        {
            $("#spins").prop("disabled", false)
        }

    }); 

    $(".bntcal").click(function(){
        $("#currentSpin").text($("#currentSpin").text()+$(this).val())
        if ($("#currentSpin").text().length > 2)
        {
            $("#currentSpin").text($(this).val())
        }    
    });


    $("#clear").click(function(){
        $("#currentSpin").text("")
    });

    $("#add").click(function(){

        getWheel()
        currentSpin = $("#currentSpin").text()
        if(currentSpin.length > 0)
        {
            if ($("#spins").val().length > 0)
            {
                $("#spins").val($("#spins").val() + ", ");
            }
            if(parseInt(currentSpin)<37)
            {
                $("#spins").val($("#spins").val() + currentSpin);
            }
            if(parseInt(currentSpin) == 37)
            {
                $("#spins").val($("#spins").val() + "0");
            }
            if(parseInt(currentSpin) == 38)
            {
                $("#spins").val($("#spins").val() + "00");
            }
            if(parseInt(currentSpin)>38)
            {
                $("#spins").val($("#spins").val() + "0");
            }

            $("#currentSpin").text("") 
        }

        var n = GetUserNumbers();
        run(n)
    });

    $("#undo").click(function(){
        var n = GetUserNumbers();

        if (n.length>0)
        {
            n.pop();
        }
        $("#spins").val(n)
        run(n)
    });

    $("#clean").click(function(){
        $("#spins").val("")
    });

    $("#run").click(function(){
        var n = GetUserNumbers();
        run(n)
    });

});
// ---------------------------------------------------------------
// --------------------- FUNCTIONS -------------------------------
// ---------------------------------------------------------------

function run(n)
{

    $("#alert").text("")

    // Evens
    var conditions = ['color[n] == "red"','color[n] == "black"','n%2 == 0 && n<37','n%2 == 1 && n<37','n > 18 && n<37','n < 19 && n>0']
    var checklocation = ['Red','Black','Even','Odd','High','Low']
    var idWins = "#evenwin"
    var idLosses = "#evenloss"

    checkCondition(n, conditions, checklocation, idWins, idLosses)

    // Dozens
    var conditions = ['n%3 == 1','n%3 == 2','n%3 == 0','n>=1 && n<=12','n>=13 && n<=24','n>=25 && n<=36']
    var checklocation = ['Row 1 [1,2,3..]','Row 2 [2,3,4..]','Row 2 [3,6,9..]','Dozen 1 [1-12]','Dozen 1 [13-24]','Dozen 1 [25-36]']
    var idWins = "#dozenwin"
    var idLosses = "#dozenloss"

    checkCondition(n, conditions, checklocation, idWins, idLosses)
}

function checkCondition(n, conditions, checklocation, idWins, idLosses)
{
    for(var i=0; i<conditions.length; i++)
    {
        var check = function(n){ if(conditions[i]){ return true; } else { return false; }}
        var wins = checkWins(n, check)
        var losses = checkLosses(n, check)
        if(wins >= $(idWins).val()) { $("#alert").text($("#alert").text()+" "+checklocation[i]+" loses "+wins+" times in a rows.<br/>")}
        if(losses >= $(idLosses).val()) { $("#alert").text($("#alert").text()+" "+checklocation[i]+" loses "+losses+" times in a rows.<br/>")}
    }
}

function checkWins(n, condition)
{
    var wins = parseInt(0);
    for(var i=0;i<n.length;i++)
    {
        if(condition(n[i]))
        {
            wins += 1 
        }
        else
        {
            wins = 0
        }   
    }

    return wins 
}

function checkLosses(n, condition)
{
    var losses = parseInt(0);
    for(var i=0;i<n.length;i++)
    {
        if(condition(n[i]))
        {
            losses = 0
        }
        else
        {
            losses += 1
        }
    }
    return losses
}

$.fn.multiline = function(text){
    this.text(text);
    this.html(this.html().replace(/\n/g,'<br/>'));
    return this;
}


function getWheel()
{
    if($("input[name=wheel]:checked").val()=="0")
    {
        wheel = wheel0
    }
    else
    {
        wheel = wheel00
    }
    color = GetColor(wheel)
}

function reset()
{
    evenwins = parseInt(0);
}
function GetUserNumbers()
{
    var n = $("#spins").val().split(",");

    for(var x=0; x<n.length; x++)
    {
        if(n[x].trim() == "0")
        {
            n[x] = "37";
        }
        if(n[x].trim() == "00")
        {
            n[x] = "38";
        }
        n[x] = parseInt(n[x].trim());
    }
    return n;
}

function GetColor(wheel)
{
    var color = Array();
    if(wheel.length==37)
    {
        color[1] = "red";
        color[2] = "black";
        color[3] = "red";
        color[4] = "black";
        color[5] = "red";
        color[6] = "black";
        color[7] = "red";
        color[8] = "black";
        color[9] = "red";
        color[10] = "black";
        color[11] = "black";
        color[12] = "red";
        color[13] = "black";
        color[14] = "red";
        color[15] = "black";
        color[16] = "red";
        color[17] = "black";
        color[18] = "red";
        color[19] = "red";
        color[20] = "black";
        color[21] = "red";
        color[22] = "black";
        color[23] = "red";
        color[24] = "black";
        color[25] = "red";
        color[26] = "black";
        color[27] = "red";
        color[28] = "black";
        color[29] = "black";
        color[30] = "red";
        color[31] = "black";
        color[32] = "red";
        color[33] = "black";
        color[34] = "red";
        color[35] = "black";
        color[36] = "red";
        color[37] = "green";
    }
    if(wheel.length==38)
    {
        color[1] = "red";
        color[2] = "black";
        color[3] = "red";
        color[4] = "black";
        color[5] = "red";
        color[6] = "black";
        color[7] = "red";
        color[8] = "black";
        color[9] = "red";
        color[10] = "black";
        color[11] = "black";
        color[12] = "red";
        color[13] = "black";
        color[14] = "red";
        color[15] = "black";
        color[16] = "red";
        color[17] = "black";
        color[18] = "red";
        color[19] = "red";
        color[20] = "black";
        color[21] = "red";
        color[22] = "black";
        color[23] = "red";
        color[24] = "black";
        color[25] = "red";
        color[26] = "black";
        color[27] = "red";
        color[28] = "black";
        color[29] = "black";
        color[30] = "red";
        color[31] = "black";
        color[32] = "red";
        color[33] = "black";
        color[34] = "red";
        color[35] = "black";
        color[36] = "red";
        color[37] = "green";
        color[38] = "green";
    }
    return color;
}

</script>
</head>
<body>
Toggle Displays</br><br/>
<div >
<button class="bntshow" id="enterSpins">Enter Spins</button><br/>
<button class="bntshow" id="setAlert">Set Alerts</button><br/>
<button class="bntshow" id="howTo">How To</button><br/>
<input type="radio" name="wheel" value="0">0 Wheel<br/>
<input type="radio" name="wheel" value="00" checked>00 Wheel<br/>
</div><br/>
<div id="alert"></div>
<hr>


<!-- Enter Spins -->
<span class="spanhide" id="divSpins">
<button class="bntcaladd" id="enterPad">Toggle Numberpad</button><br/>
<br/>

<span class="spanhide" id='showSpinsPad'>
<br/>
<button class="bntcal" id="calculator" value="0">0</button>
<button class="bntcal" id="calculator" value="00">00</button><br/>
<button class="bntcal" id="calculator" value="1">1</button>
<button class="bntcal" id="calculator" value="2">2</button>
<button class="bntcal" id="calculator" value="3">3</button><br/>
<button class="bntcal" id="calculator" value="4">4</button>
<button class="bntcal" id="calculator" value="5">5</button>
<button class="bntcal" id="calculator" value="6">6</button><br/>
<button class="bntcal" id="calculator" value="7">7</button>
<button class="bntcal" id="calculator" value="8">8</button>
<button class="bntcal" id="calculator" value="9">9</button><br/>
<button class="bntcaladd" id="clear">Clear</button>
<button class="bntcaladd" id="add">ADD</button><span id="currentSpin"></span>
<br/>
<button class="bntcaladd" id="undo">Undo</button><br/>
<span id="currentSpin"></span>
<br/>
</span>
<span id="clearBox">Enter roulette numbers separated by a comma</span><br/>
<textarea rows="10" cols="50" id="spins"></textarea><br/><br/>
<span id="clearBox1">
<button id="clean">Clear Box</button>
<button id="run">Run</button>
</span>

</span>

<!-- Set Alerts -->
<span class="spanhide" id="divAlerts">
<h2>Evens</h2>
<input type="text" id="evenwin" value="2"> Wins in a row<br>
<input type="text" id="evenloss" value="6"> Losses in a row<br>
<br><br>
<h2>Dozens</h2>
<input type="text" id="dozenwin" value="6"> Wins in a row<br>
<input type="text" id="dozenloss" value="6"> Losses in a row<br>
<br><br>

</span>

<!-- How To -->
<span class="spanhide" id="divHowTo">
How To
</span>


</body>
</html>
1
  • Rewrite test function as function test(n, callback){...} where callback will return true/false for winner/looser. Commented Aug 17, 2016 at 20:22

2 Answers 2

4

Yes, absolutely!

In JavaScript, you are capable of saving functions to variables, and hence pass them around as parameters; this is one of the most powerful aspects of JavaScript. So for example, if you want to check if the color is red, you can write a condition test function that returns true/false as follows:

var checkColor = function(nElement){
      var color = color(nElement);
      if(color == 'red'){
          return true;
      }
      else if(color == 'black'){
           return false;
      }
 }

So now, you have a variable checkColor that is a function that checks if a color is red or not. Now, you can pass this function into your test function like this:

function test(n,testFunc)
{
var wins = parseInt(0);
var losses = parseInt(0);

for(var i=0;i<n.length;i++)
{
    if(testFunc(n[i])) //testFunc = checkColor in this case since we passed in checkColor
    {
        wins += 1 
        losses = 0
    }
    else
    {
        wins = 0
        losses += 1
    }

}

test(n,checkColor); //This is where you pass in checkColor as your test func

And so for example, if we wanted to add another test for an even, we could write a function as so:

var checkEven = function(nElement){
     if(nElement % 2 == 0){
           return true;
     }
     else{
           return false;
     }
 }

And we could simply run test using this new condition like:

test(n,checkEven);

And so from here, you should get the idea of how to create a test function and pass it into a universal test function. If you need clarification, don't hesitate to ask!

Sign up to request clarification or add additional context in comments.

6 Comments

Can you possibly help me out with another odd issue? I can send you my full code in email
Yeah absolutely, but i'd prefer it if you just asked another question or just edited this question with a part 2 :)
Thank you Ted. I have added a part 2 and there will be a part 3 because I want to minimize the duplication of the //red //black //even //odd checks.
From my first impression, it definitely looks like you can reduce the duplication of your code ALOT haha i'll explain this when i take a deeper look at it. But for the lines, try changing your <br/>'s to just <br> and see if that works. I don't think you'll ever need to use \n
Take a look here actually : stackoverflow.com/questions/11449161/…
|
0

Simply pass the condition as function.

Javascript:

const myFunctionByCondition = (conditionFn) => {
   const index = 10

   if (conditionFn(index)) return "Condition applies"
   return "Condition does not apply"
}

const val = myFunctionByCondition(i => i >= 10)

Typescript:

const myFunctionByCondition = (conditionFn: (i: number) => boolean) => {
   const index = 10

   if (conditionFn(index)) return "Condition applies"
   return "Condition does not apply"
}

const val = myFunctionByCondition(i => i >= 10)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.