在本教程中,我们将一步步教你如何使用Python编写一个经典的Nim游戏。无论你是编程新手还是想深入理解博弈论算法,这篇教程都将帮助你轻松上手。我们会讲解游戏规则、核心逻辑,并最终实现一个可运行的命令行版本。
Nim是一种两人轮流进行的数学策略游戏。游戏开始时有若干堆石子(或其他物品),每轮玩家必须从其中一堆中拿走至少一个石子。拿到最后一个石子的玩家获胜(或失败,取决于规则变种)。我们这里采用“拿最后一个石子者胜”的规则。
Nim游戏是博弈论中的经典案例,其最优策略可通过“异或(XOR)”运算快速判断。通过实现它,你能掌握:
我们先创建一个最简版本:玩家 vs 玩家,不带AI。
def print_piles(piles): for i, count in enumerate(piles): print(f"堆 {i + 1}: {'● ' * count}")def get_valid_move(piles): while True: try: pile = int(input("请选择堆号 (1-{}): ".format(len(piles)))) - 1 if pile < 0 or pile >= len(piles): print("无效堆号!") continue take = int(input(f"从堆 {pile + 1} 中拿几个 (1-{piles[pile]}): ")) if 1 <= take <= piles[pile]: return pile, take else: print("数量超出范围!") except ValueError: print("请输入有效数字!")def main(): piles = [3, 4, 5] # 初始三堆石子 current_player = 1 while any(piles): print(f"\n当前玩家: 玩家 {current_player}") print_piles(piles) pile, take = get_valid_move(piles) piles[pile] -= take if not any(piles): print(f"\n玩家 {current_player} 获胜!") break current_player = 2 if current_player == 1 else 1if __name__ == "__main__": main() 真正的Nim游戏算法核心在于“Nim和”——即所有堆石子数的异或值。如果Nim和为0,则当前局面为必败态;否则为必胜态。
我们可以让AI总是将局面变为Nim和为0的状态:
def nim_sum(piles): result = 0 for p in piles: result ^= p return resultdef ai_move(piles): total = nim_sum(piles) if total == 0: # 必败态,随机拿一个 for i in range(len(piles)): if piles[i] > 0: return i, 1 else: # 寻找能使得新nim_sum为0的移动 for i in range(len(piles)): target = piles[i] ^ total if target < piles[i]: return i, piles[i] - target # 安全兜底 for i in range(len(piles)): if piles[i] > 0: return i, 1 修改main()函数,支持人机对战:
def main(): piles = [3, 4, 5] mode = input("选择模式:1=玩家对战,2=人机对战: ") player_vs_ai = (mode == "2") while any(piles): print_piles(piles) if player_vs_ai: # 玩家回合 pile, take = get_valid_move(piles) piles[pile] -= take if not any(piles): print("\n你赢了!") break # AI回合 print("\nAI正在思考...") ai_pile, ai_take = ai_move(piles) piles[ai_pile] -= ai_take print(f"AI从堆 {ai_pile + 1} 拿走了 {ai_take} 个石子。") if not any(piles): print("\nAI获胜!") break else: # 玩家对战逻辑(略,同前) pass 恭喜你!你已经掌握了Python Nim游戏算法的基本实现。这个项目不仅锻炼了你的编程能力,也让你初步接触了博弈论编程的思想。
如果你想进一步提升,可以尝试:
希望这篇初学者Python游戏开发教程对你有帮助!动手试试吧,编程的乐趣在于实践。
关键词:Python Nim游戏算法、Nim游戏实现、Python博弈论编程、初学者Python游戏开发
本文由主机测评网于2025-12-08发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124574.html