python实现简单的井字棋小游戏

yizhihongxing

Python实现简单的井字棋小游戏

井字棋是一种非常经典的小游戏,下面将详细讲解怎样使用 Python 实现一个简单的井字棋小游戏。

游戏规则

井字棋是由两个玩家轮流在一个3x3网格上放置棋子(通常是X和O),先将三个棋子排列成横线、竖线或斜线的玩家获胜。

实现步骤

  1. 定义游戏棋盘
  2. 定义棋手 (player)
  3. 输出棋盘并让玩家输入下棋位置
  4. 检查胜利和平局

定义游戏棋盘

我们可以使用一个二维列表来表示棋盘,每个元素代表一个棋子。

board = [
    [" ", " ", " "],
    [" ", " ", " "],
    [" ", " ", " "]
]

定义棋手

在定义棋手时,我们可以使用一个简单的类来表示。棋手具有下棋行为并且可以设置棋子的形状。

class Player:
    def __init__(self, name, symbol):
        self.name = name
        self.symbol = symbol

    def move(self, board):
        print(f"{self.name}, it's your turn!")
        x = int(input("Enter the row(1-3): "))
        y = int(input("Enter the column(1-3): "))
        if x < 1 or x > 3 or y < 1 or y > 3:
            print("Invalid move! Please enter the row and column between 1 and 3.")
            return self.move(board)
        if board[x-1][y-1] != " ":
            print("Invalid move! The spot is already taken.")
            return self.move(board)
        board[x-1][y-1] = self.symbol

输出棋盘并让玩家输入下棋位置

在每个轮次下棋前,我们需要输出当前棋盘以便玩家选择下棋位置。

def print_board(board):
    for i in range(3):
        for j in range(3):
            if j != 2:
                print(f" {board[i][j]} ", end="|")
            else:
                print(f" {board[i][j]} ")
        if i != 2:
            print("-----------")

检查胜利和平局

我们需要在每个轮次下棋后检查是否有一个玩家获得胜利或者所有的位置已经被占据。我们可以使用一个函数来判断游戏是否结束。

def is_win(board, symbol):
    for i in range(3):
        if board[i][0] == board[i][1] == board[i][2] == symbol: # 横向匹配
            return True
        if board[0][i] == board[1][i] == board[2][i] == symbol: # 纵向匹配
            return True
    if board[0][0] == board[1][1] == board[2][2] == symbol: # / 对角线匹配
        return True
    if board[0][2] == board[1][1] == board[2][0] == symbol: # \ 对角线匹配
        return True
    return False

def game_over(board):
    if is_win(board, "X"):
        print_board(board)
        print("Congratulations! The winner is X")
        return True
    elif is_win(board, "O"):
        print_board(board)
        print("Congratulations! The winner is O")
        return True
    elif all(board[i][j] != " " for i in range(3) for j in range(3)):
        print_board(board)
        print("It's a tie!")
        return True
    return False

游戏流程

将以上功能结合起来,就能够实现一个简单的井字棋小游戏了。

def tic_tac_toe():
    board = [
        [" ", " ", " "],
        [" ", " ", " "],
        [" ", " ", " "]
    ]
    players = [Player("Player X", "X"), Player("Player O", "O")]
    current_player = players[0]

    while True:
        print_board(board)
        current_player.move(board)
        if game_over(board):
            break
        # 切换玩家
        current_player = players[1] if current_player == players[0] else players[0]

if __name__ == "__main__":
    tic_tac_toe()

示例说明

示例一

下面是一局井字棋游戏的示例输出:

   |   |   
-----------
   |   |   
-----------
   |   |   
Player X, it's your turn! # X玩家的输入
Enter the row(1-3): 2
Enter the column(1-3): 2
   |   |   
-----------
   | X |   
-----------
   |   |   
Player O, it's your turn! # O玩家的输入
Enter the row(1-3): 1
Enter the column(1-3): 2
   | O |   
-----------
   | X |   
-----------
   |   |   
Player X, it's your turn! # X玩家的输入
Enter the row(1-3): 3
Enter the column(1-3): 3
   | O |   
-----------
   | X |   
-----------
   |   | X 
Player O, it's your turn! # O玩家的输入
Enter the row(1-3): 1
Enter the column(1-3): 1
 O | O |   
-----------
   | X |   
-----------
   |   | X 
Player X, it's your turn! # X玩家的输入
Enter the row(1-3): 1
Enter the column(1-3): 3
 O | O | X 
-----------
   | X |   
-----------
   |   | X 
Player O, it's your turn! # O玩家的输入
Enter the row(1-3): 3
Enter the column(1-3): 1
 O | O | X 
-----------
   | X |   
-----------
 O |   | X 
Player X, it's your turn! # X玩家的输入
Enter the row(1-3): 2
Enter the column(1-3): 1
 O | O | X 
-----------
 X | X |   
-----------
 O |   | X 
Congratulations! The winner is X # X玩家胜利

示例二

下面的示例说明了当一个玩家尝试占据已经被另一个玩家占据的位置时,程序会提示玩家重新输入:

   |   |   
-----------
   |   |   
-----------
   |   |   
Player X, it's your turn! 
Enter the row(1-3): 2 # X玩家选择(2, 2)
Enter the column(1-3): 2
   |   |   
-----------
   | X |   
-----------
   |   |   
Player O, it's your turn!
Enter the row(1-3): 2 # O玩家选择(2, 2),但是该位置已被占据
Enter the column(1-3): 2
Invalid move! The spot is already taken.
Enter the row(1-3): 1 # O玩家选择另外一个位置(1, 3)
Enter the column(1-3): 3
   |   |   
-----------
 O | X |   
-----------
   |   |   
Player X, it's your turn!
Enter the row(1-3): 1
Enter the column(1-3): 3
 X |   | X 
-----------
 O | X |   
-----------
   |   |   
Player O, it's your turn!
Enter the row(1-3): 4
Enter the column(1-3): 4 # 输入超出范围(1-3)
Invalid move! Please enter the row and column between 1 and 3.
Enter the row(1-3): 1
Enter the column(1-3): 1
 O |   | X 
-----------
 O | X |   
-----------
   |   |   
Player X, it's your turn!
Enter the row(1-3): 2
Enter the column(1-3): 1
 O |   | X 
-----------
 O | X |   
-----------
 X |   |   
Player O, it's your turn!
Enter the row(1-3): 2
Enter the column(1-3): 3
 O |   | X 
-----------
 O | X | O 
-----------
 X |   |   
Player X, it's your turn!
Enter the row(1-3): 3
Enter the column(1-3): 3
 O |   | X 
-----------
 O | X | O 
-----------
 X |   | X 
It's a tie!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现简单的井字棋小游戏 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python文件读取的3种方法及路径转义

    以下是详细讲解Python文件读取的3种方法及路径转义的完整攻略: Python文件读取的3种方法 1. 使用open()函数读取文件 使用Python的内置函数open()可以打开一个文件,并返回文件对象。通过文件对象可以操作文件。 语法如下: f = open("文件路径", "访问模式") 其中,文件路径可以是相…

    python 2023年6月5日
    00
  • PyQt5+QtChart实现绘制极坐标图

    下面是关于“PyQt5+QtChart实现绘制极坐标图”的完整攻略,包含两个示例。 一、PyQt5+QtChart实现绘制极坐标图 1. PyQt5介绍 PyQt5是Python的一种GUI编程工具包,它使用Qt(一个跨平台的C++应用程序开发框架)提供了GUI编程能力。PyQt5是一个开源软件,支持Windows、Linux、MacOS和Android等操…

    python 2023年6月3日
    00
  • Pandas实现自定义Excel格式并导出多个sheet表

    首先我们需要明确两个概念:Pandas和Excel。 Pandas是Python中一种常用的数据处理库,而Excel是一种电子表格软件,可用于数据分析和可视化。在这个教程中,我们将使用Pandas来处理数据,并将数据以Excel格式导出。 下面是一个基本的示例代码,演示了如何使用Pandas创建一个Excel文件,并写入一些数据: import pandas…

    python 2023年5月13日
    00
  • python爬取酷狗音乐Top500榜单

    在本攻略中,我们将介绍如何使用Python爬取酷狗音乐Top500榜单。以下是一个完整攻略,包括两个示例。 步骤1:安装必要的库 首先,需要安装必要的库。将使用requests库来发送HTTP请求,并使用BeautifulSoup库来解析HTML页面。 以下是一个示例代码,演示如何使用安装requests和BeautifulSoup: pip install…

    python 2023年5月15日
    00
  • 使用python将最新的测试报告以附件的形式发到指定邮箱

    要将最新的测试报告以附件的形式发到指定邮箱,可以使用Python的smtplib和email模块来实现。下面是实现的完整攻略: 1. 准备工作 首先需要准备以下内容: SMTP邮箱服务器的地址和端口号(比如,使用腾讯企业邮箱SMTP服务器地址为smtp.exmail.qq.com,端口号为465或587) 发件人的邮箱地址和登录密码 收件人的邮箱地址 最新的…

    python 2023年5月31日
    00
  • python实现聊天小程序

    下面我将为你讲解Python实现聊天小程序的完整攻略。 准备工作 在开始实现聊天小程序前,需要进行一些准备工作: 安装Python,建议使用Python3.x版本 安装必要的第三方库,如socket和threading模块 设计聊天程序的逻辑和界面,可以使用Tkinter或PyQt等GUI库 实现聊天程序 1. 建立服务器 首先,需要建立服务器,以接收客户端…

    python 2023年5月23日
    00
  • 利用Python 实现分布式计算

    利用Python实现分布式计算 什么是分布式计算 分布式计算是指将一个计算任务分成若干个小的计算任务,分配给多个计算节点同时计算,从而实现更快速、更高效地完成计算任务的一种计算方式。它不仅可以大幅提升计算速度,还具有更好的容错性和可伸缩性等优势。 分布式计算的实现方法 利用Python实现分布式计算通常可以采用以下方法: 使用Python自带的multipr…

    python 2023年5月19日
    00
  • Python标准库sys库常用功能详解

    Python标准库sys库常用功能详解 简介 Python标准库sys库是Python自带的一个系统参数相关的库,通过它可以访问与Python解释器相关的系统参数和函数。它包含了与Python解释器进行交互的一系列工具,主要包括: sys.argv:获取命令行参数 sys.path:获取Python模块搜索路径 sys.modules:获取已经加载的模块 s…

    python 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部