2016-08-17 11 views
0

ルーレットの試合で、赤/黒/偶数/奇数がどれほど並んでいるかをテストしたいと思います。javascriptで変数条件をパラメータとして作成するにはどうすればよいですか?

次の関数は、スピンnのリストをループして、赤色の行が赤色になった回数を示します。同機能は、このことができますが、チェックは、私が追いつい

n[i]%2 == 0 

をテストするために、この機能に別のチェックを通過したい

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

異なっていても勝利の他のすべてのタイプのために使用することができます完了?

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

これは完全なコードです。 「Enter Spins」ボタンと「Toggle Number Pad」ボタンをクリックして8を2回追加すると、3つのアラートが表示されます。

3つのメッセージが別々の行に表示されないようです。いくつかの例を試しましたが、最後のメッセージの前に改行が追加されます。 複数のメッセージを別々の行に表示する方法をご存知ですか?

<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> 
+0

'test'関数を' function test(n、callback){...} 'と書き直してください。' callback'はwinner/looserに対して 'true/false'を返します。 –

答えて

3

はい、絶対に!

JavaScriptでは、関数を変数に保存することができ、パラメータとして渡すことができます。これはJavaScriptの最も強力な側面の1つです。だから、あなたは色が赤であるかどうかを確認したい場合たとえば、あなたは次のように偽/ trueを返す条件テスト関数を記述することができます

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

はだから今、あなたはその関数である変数checkColorを持っています色が赤であるかどうかをチェックします。

var checkEven = function(nElement){ 
    if(nElement % 2 == 0){ 
      return true; 
    } 
    else{ 
      return false; 
    } 
} 
:私たちも、私たちはとてもとしての機能を書くことができますのための別のテストを追加したい場合は、例えば

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 

そしてそう:さて、あなたはこのようなあなたのtest関数に、この関数を渡すことができます

そして、我々は、単によう、この新しい条件を使用してtestを実行することができます:ここから

test(n,checkEven);

だから、あなたテスト関数を作成して汎用テスト関数に渡す方法のアイデアを得るべきです。説明が必要な場合は、お気軽にお問い合わせください。

+0

それは心が曲がったが、それは素晴らしい作品です。ありがとうございました。私は同じことに関連する別の質問があります。私は新しいスレッドで尋ねるべきですか? – user1854438

+1

新しいコードがあれば、はい。単なる概念的な質問であれば、ここで質問することができます。しかし、もう一度、それは完全にあなた次第です - それはあまり重要ではないと思います;) – Ted

+0

別の奇妙な問題で私を助けてくれるでしょうか?私はあなたに電子メールで私の完全なコードを送ることができます – user1854438

関連する問題