ฉันกำลังพยายามเขียนวิดีโอเกมโป๊กเกอร์ใน Javascript เพื่อหาพื้นฐานของเกมนี้และฉันพบปัญหาที่ jQuery click event handler ยิงหลายครั้ง
พวกมันติดอยู่กับปุ่มสำหรับวางเดิมพันและมันใช้งานได้ดีสำหรับการวางเดิมพันในมือแรกระหว่างเกม (ยิงเพียงครั้งเดียว); แต่ในการเดิมพันสำหรับมือสองก็ยิงเหตุการณ์คลิกสองครั้งในแต่ละครั้งที่มีการเดิมพันหรือเดิมพันสถานที่กดปุ่ม (เพื่อให้เป็นสองเท่าของจำนวนเงินที่ถูกต้องเป็นทางออกสำหรับแต่ละกด) โดยรวมก็เป็นไปตามรูปแบบนี้จำนวนครั้งเหตุการณ์คลิกยิงเมื่อกดปุ่มเดิมพันครั้งเดียว - ที่ithระยะเวลาของลำดับคือสำหรับการเดิมพันของithมือจากจุดเริ่มต้นของเกม: 1, 2, 4 , 7, 11, 16, 22, 29, 37, 46 ซึ่งดูเหมือนจะเป็น n (n + 1) / 2 + 1 สำหรับสิ่งที่คุ้มค่า - และฉันไม่ฉลาดพอที่จะเข้าใจสิ่งนั้นได้ฉันใช้OEIS . :)
นี่คือฟังก์ชันที่มีตัวจัดการเหตุการณ์คลิกที่ทำงาน หวังว่ามันจะง่ายต่อการเข้าใจ (แจ้งให้เราทราบหากไม่ฉันต้องการได้รับที่ดีขึ้นเช่นกัน):
/** 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
}
});
}
โปรดแจ้งให้เราทราบหากคุณมีความคิดเห็นหรือข้อเสนอแนะหรือหากวิธีการแก้ไขปัญหาของฉันคล้ายกับวิธีแก้ไขปัญหาอื่น ๆ ที่นี่ (ฉันได้ดูหัวข้อหัวข้อที่คล้ายกันจำนวนมากและไม่มีโชคในการหาวิธีแก้ไขปัญหา สำหรับฉัน).
var amount = parseInt(this.id.replace(/[^\d]/g,''),10);
และถ้าคุณจะใช้คุณสมบัติเดียวกันขององค์ประกอบมากกว่าหนึ่งครั้งแคชคุณสมบัตินั้นอย่าค้นหามันต่อไป การค้นหามีราคาแพง