当前位置: 首页 > news >正文

用 Python 实现井字棋游戏

一、引言

井字棋(Tic-Tac-Toe)是一款经典的两人棋类游戏。在这个游戏中,玩家轮流在 3x3 的棋盘上放置自己的标记,通常是 “X” 和 “O”,第一个在棋盘上连成一线(横、竖或斜)的玩家即为获胜者。本文将详细介绍如何用 Python 代码实现这个游戏。

二、代码实现

(一)打印棋盘函数

def print_board(board):for row in board:print(" | ".join(row))print("-" * 5)

这个函数用于打印棋盘的当前状态。它遍历棋盘的每一行,将每行中的元素用 “|” 连接起来并打印,然后再打印一行 “-” 组成的分隔线。

(二)检查获胜函数

def check_win(board, player):win_conditions = [[board[0][0], board[0][1], board[0][2]],[board[1][0], board[1][1], board[1][2]],[board[2][0], board[2][1], board[2][2]],[board[0][0], board[1][0], board[2][0]],[board[0][1], board[1][1], board[2][1]],[board[0][2], board[1][2], board[2][2]],[board[0][0], board[1][1], board[2][2]],[board[2][0], board[1][1], board[0][2]]]for condition in win_conditions:if all(spot == player for spot in condition):return Truereturn False

该函数检查是否有玩家获胜。它定义了所有可能的获胜条件,即 8 种横、竖、斜的组合情况。然后遍历这些条件,判断是否所有位置都被当前玩家的标记占据,如果是则返回 True,表示该玩家获胜,否则返回 False。

(三)检查平局函数

def check_draw(board):for row in board:if " " in row:return Falsereturn True

此函数用于检查是否平局。它遍历棋盘的每一行,如果发现某一行中还有空位置(“ ”),则说明游戏还未结束,返回 False;如果所有行都没有空位置了,说明棋盘已满且无获胜者,返回 True 表示平局。

(四)游戏主函数

def tic_tac_toe():board = [[" " for _ in range(3)] for _ in range(3)]current_player = "X"while True:print_board(board)print(f"Player {current_player}'s turn.")try:col = int(input("Choose a column (1-3): ")) - 1row = int(input("Choose a row (1-3): ")) - 1except ValueError:print("Invalid input. Please enter a number.")continueif board[row][col]!= " ":print("Invalid move. Try again.")continueboard[row][col] = current_playerif check_win(board, current_player):print_board(board)print(f"Player {current_player} wins!")breakif check_draw(board):print_board(board)print("It's a draw!")breakcurrent_player = "O" if current_player == "X" else "X"

这是游戏的主函数,负责游戏的流程控制。首先初始化一个 3x3 的空棋盘和当前玩家为 “X”。然后进入一个无限循环,在每次循环中:

  1. 先打印当前棋盘状态和当前玩家的提示信息。
  2. 尝试获取玩家输入的行和列,若输入不是数字则提示错误并继续循环。
  3. 检查玩家选择的位置是否为空,若不为空则提示无效移动并继续循环。
  4. 将当前玩家的标记放置在选择的位置上。
  5. 检查放置后是否有玩家获胜,如果是则打印棋盘和获胜信息并跳出循环。
  6. 检查是否平局,如果是则打印棋盘和平局信息并跳出循环。
  7. 如果游戏未结束,则切换当前玩家为另一个玩家(“X” 与 “O” 交替)。

最后,通过以下代码启动游戏:

if __name__ == "__main__":tic_tac_toe()

三、游戏玩法

运行代码后,程序会按照以下步骤进行游戏:

  1. 程序会提示玩家 X 选择行和列来放置 “X”。玩家需要输入 1 - 3 之间的数字表示行和列。
  2. 然后玩家 O 选择行和列来放置 “O”。
  3. 程序会在每次放置后检查是否有玩家获胜或者是否平局,并相应地结束游戏。如果有玩家获胜,会打印出获胜玩家;如果是平局,则会提示平局信息。

通过以上代码,我们就可以在 Python 环境中愉快地玩井字棋游戏了。这个简单的游戏实现不仅可以帮助我们熟悉 Python 的基本语法和逻辑控制,还能为进一步开发更复杂的棋类游戏或其他应用程序奠定基础。

http://www.lryc.cn/news/506445.html

相关文章:

  • 06 实现自定义AXI DMA驱动
  • SpringBoot集成ENC对配置文件进行加密
  • 初学stm32 ——— 串口通信
  • qwt 多Y轴 项目效果
  • Java中通过ArrayList扩展数组
  • Java:链接redis报错:NoSuchElementException: Unable to validate object
  • datasets库之load_dataset
  • React Router常见面试题目
  • sequelize-cli 封装登录接口
  • 使用 Elasticsearch 查询和数据同步的实现方法
  • QTday1作业设置简易登录界面
  • RC低通滤波器和LR低通滤波器,LC低通滤波器该怎么选择
  • 芯旺微KF32A156芯片ADC配置
  • 【Token】校验、会话技术、登录请求、拦截器【期末实训】实战项目学生和班级管理系统\Day15-后端Web实战(登录认证)\讲义
  • [Unity Shader] 【游戏开发】【图形渲染】Shader数学基础3:矢量与标量的乘法与除法详解
  • javalock(四)AQS派生类之Semphore逐行注释
  • 【C语言】头文件”“和<>的详解
  • Elasticsearch:什么是信息检索?
  • Spark-Streaming容错语义
  • 2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程
  • GUI07-学工具栏,懂MVC
  • 【进程篇】04.进程的状态与优先级
  • ElasticSearch 数据聚合与运算
  • 科研学习|论文解读——智能体最新研究进展
  • 面试小札:Java后端闪电五连鞭_8
  • java error(2)保存时间带时分秒,回显时分秒变成00:00:00
  • 计算机毕业设计python+spark+hive动漫推荐系统 漫画推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据毕设
  • 数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?
  • (8)YOLOv6算法基本原理
  • LNMP+discuz论坛