Próbuję napisać grę w pokera wideo w Javascripcie jako sposób na zapoznanie się z jej podstawami i napotkałem problem polegający na tym, że programy obsługi zdarzeń kliknięcia jQuery uruchamiają się wielokrotnie.
Są one przymocowane do przycisków służących do obstawiania i działa dobrze przy obstawianiu pierwszego rozdania podczas gry (strzelanie tylko raz); ale w zakładach na drugie rozdanie uruchamia zdarzenie kliknięcia dwa razy za każdym razem, gdy zostanie naciśnięty przycisk zakładu lub postawienia zakładu (więc dwukrotność prawidłowej kwoty za każde naciśnięcie). Ogólnie rzecz biorąc, następuje to według tego, ile razy zdarzenie kliknięcia jest uruchamiane po jednokrotnym naciśnięciu przycisku zakładu - gdzie i-ty termin sekwencji dotyczy zakładów i-tego rozdania od początku gry: 1, 2, 4 , 7, 11, 16, 22, 29, 37, 46, który wydaje się być n (n + 1) / 2 + 1 dla tego, co jest warte - i nie byłem wystarczająco inteligentny, aby to zrozumieć, użyłem OEIS . :)
Oto funkcja z działającymi funkcjami obsługi zdarzeń kliknięcia; miejmy nadzieję, że łatwo to zrozumieć (daj mi znać, jeśli nie, chcę też być lepszy):
/** The following function keeps track of bet buttons that are pressed, until place button is pressed to place bet. **/
function pushingBetButtons() {
$("#money").text("Money left: $" + player.money); // displays money player has left
$(".bet").click(function() {
var amount = 0; // holds the amount of money the player bet on this click
if($(this).attr("id") == "bet1") { // the player just bet $1
amount = 1;
} else if($(this).attr("id") == "bet5") { // etc.
amount = 5;
} else if($(this).attr("id") == "bet25") {
amount = 25;
} else if($(this).attr("id") == "bet100") {
amount = 100;
} else if($(this).attr("id") == "bet500") {
amount = 500;
} else if($(this).attr("id") == "bet1000") {
amount = 1000;
}
if(player.money >= amount) { // check whether the player has this much to bet
player.bet += amount; // add what was just bet by clicking that button to the total bet on this hand
player.money -= amount; // and, of course, subtract it from player's current pot
$("#money").text("Money left: $" + player.money); // then redisplay what the player has left
} else {
alert("You don't have $" + amount + " to bet.");
}
});
$("#place").click(function() {
if(player.bet == 0) { // player didn't bet anything on this hand
alert("Please place a bet first.");
} else {
$("#card_para").css("display", "block"); // now show the cards
$(".card").bind("click", cardClicked); // and set up the event handler for the cards
$("#bet_buttons_para").css("display", "none"); // hide the bet buttons and place bet button
$("#redraw").css("display", "block"); // and reshow the button for redrawing the hand
player.bet = 0; // reset the bet for betting on the next hand
drawNewHand(); // draw the cards
}
});
}
Daj mi znać, jeśli masz jakieś pomysły lub sugestie lub jeśli rozwiązanie mojego problemu jest podobne do rozwiązania innego problemu tutaj (przejrzałem wiele podobnie utytułowanych wątków i nie miałem szczęścia znaleźć rozwiązania, które mogłoby zadziałać dla mnie).
var amount = parseInt(this.id.replace(/[^\d]/g,''),10);
A jeśli zamierzasz użyć tej samej właściwości elementu więcej niż raz, buforuj tę właściwość, nie szukaj dalej. Wyszukiwanie jest drogie.