Tôi đang cố gắng viết một trò chơi video poker bằng Javascript như một cách để giảm bớt những điều cơ bản của nó và tôi đã gặp phải một vấn đề trong đó các trình xử lý sự kiện nhấp chuột jQuery đang bắn nhiều lần.
Chúng được gắn vào các nút để đặt cược và nó hoạt động tốt khi đặt cược vào tay đầu tiên trong trò chơi (chỉ bắn một lần); nhưng khi đặt cược cho ván bài cũ, nó sẽ kích hoạt sự kiện nhấp hai lần mỗi lần nhấn nút đặt cược hoặc đặt cược (do đó, gấp đôi số tiền chính xác được đặt cho mỗi lần nhấn). Nhìn chung, nó tuân theo mô hình này cho số lần sự kiện nhấp được kích hoạt khi nhấn nút đặt cược một lần - trong đó thuật ngữ thứ i của chuỗi là để đặt cược cho ván bài thứ i từ đầu trò chơi: 1, 2, 4 , 7, 11, 16, 22, 29, 37, 46, dường như là n (n + 1) / 2 + 1 cho bất cứ điều gì đáng giá - và tôi không đủ thông minh để hiểu rằng, tôi đã sử dụng OEIS . :)
Đây là chức năng với các trình xử lý sự kiện nhấp đang hoạt động; hy vọng nó dễ hiểu (cho tôi biết nếu không, tôi cũng muốn cải thiện điều đó):
/** 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
}
});
}
Vui lòng cho tôi biết nếu bạn có bất kỳ ý tưởng hoặc đề xuất nào hoặc nếu giải pháp cho vấn đề của tôi tương tự như giải pháp cho một vấn đề khác ở đây (Tôi đã xem xét nhiều chủ đề có tiêu đề tương tự và không gặp may mắn trong việc tìm giải pháp có thể hoạt động cho tôi).
var amount = parseInt(this.id.replace(/[^\d]/g,''),10);
Và nếu bạn sẽ sử dụng cùng một thuộc tính của một phần tử nhiều lần bộ đệm thuộc tính đó, đừng tiếp tục tìm kiếm nó. Việc tìm kiếm là đắt tiền.