如何让记忆配对游戏的提示按钮仅翻转未匹配卡片?
解决方案
问题根源
你的提示函数当前会操作所有.card元素,包括已经完成匹配(移除了unmatched类)的卡片,这直接导致:
- 已匹配卡片的透明度被意外重置,显示状态混乱
- 已匹配卡片被强制替换为背面,视觉效果异常
- 已匹配卡片未被禁用交互,用户可重复点击获取额外分数
具体修改步骤
1. 调整提示函数,仅处理未匹配卡片
修改showHint函数,把目标选择器从.card改为.card.unmatched,只对未配对的卡片执行提示逻辑:
//Function to turn cards when hint button clicked function showHint() { // 仅显示未匹配卡片的正面 $(".card.unmatched").each(function () { $(this) .html("<img src='" + $(this).data("cardValue") + "'/>") .show(); }); setTimeout(function () { // 仅将未匹配卡片翻回背面 $(".card.unmatched").html("<img src= 'Elements/images/CardBack.jpg' />").show(); }, 1000); score = score - hintclick; $(".scorecounter").html("Score: " + score); }
2. 禁用已匹配卡片的交互(解决重复匹配问题)
在checkMatch函数的匹配成功分支,给已匹配卡片添加标记类并禁用点击事件,彻底阻止重复选择:
// 在checkMatch函数的匹配成功部分修改 $(".selected").each(function () { $(this) .animate({ opacity: 0.25 }) .removeClass("unmatched") .addClass("matched") // 添加匹配完成标记 .off("click"); // 禁用点击事件,防止重复选中 });
3. 可选优化:初始化卡片背面状态
如果卡片初始为空白,建议在游戏初始化阶段统一设置背面,避免提示后状态混乱:
// 游戏初始化时设置所有未匹配卡片的背面 $(".card.unmatched").html("<img src= 'Elements/images/CardBack.jpg' />");
修改效果说明
- 提示功能仅作用于未匹配卡片,已匹配卡片的透明度、显示状态完全不受影响
- 已匹配卡片被禁用点击,彻底杜绝重复匹配刷分的问题
- 未匹配卡片的提示逻辑保持原有功能,1秒后自动翻回背面
内容的提问来源于stack exchange,提问作者Amy
相关产品推荐
相关产品推荐

