Python记忆翻牌游戏实现:如何基于双列表设置非成对元素场景的结束判定
适配剩余单元素场景的记忆翻牌游戏结束判断逻辑
核心实现逻辑
全程沿用现有双列表的存储结构,不改动原有游戏状态的记录规则,在原有全量匹配的结束判断基础上,新增“剩余未翻开卡牌无有效可匹配对”的结束触发条件。
判定执行流程
- 提取剩余未翻开卡牌:逐位遍历
letters和correctly_revealed,筛选出correctly_revealed中为占位符' '的位置,取对应位置的letters元素组成剩余卡牌列表 - 校验可匹配对存在性:统计每个剩余卡牌的出现次数,若所有元素的出现次数均小于2,说明不存在可完成的有效匹配
- 合并两类触发条件生成最终结束标记
可直接复用的判定代码
# 提取未翻开的剩余卡牌集合 remaining_cards = [card for card, revealed in zip(letters, correctly_revealed) if revealed == ' '] # 检测剩余卡牌中是否存在可匹配的成对元素 has_available_pair = any(remaining_cards.count(card) >= 2 for card in set(remaining_cards)) # 游戏结束触发条件 game_over = (letters == correctly_revealed) or (len(remaining_cards) > 0 and not has_available_pair)
适配效果验证
- 单元素剩余场景:当
letters = ['B', 'B', 'C', 'D']、correctly_revealed = ['B', 'B', ' ', ' ']时,提取的剩余卡牌为['C', 'D'],两个元素均只出现1次,不存在可匹配对,直接触发游戏结束 - 常规成对卡牌场景:若剩余卡牌为
['C', 'C', 'D'],C元素出现2次,存在可匹配对,游戏可正常推进 - 全量匹配完成场景:完全兼容原有
letters == correctly_revealed的判断逻辑,无额外流程改动
内容的提问来源于stack exchange,提问作者abc
相关产品推荐
相关产品推荐

