Python实现简单井字棋游戏:逻辑判断与代码解析

晚来风
晚来风
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍如何使用Python语言实现经典的井字棋(Tic-Tac-Toe)游戏。文章详细解析了棋盘初始化、玩家轮流落子以及核心的胜负判定逻辑,涵盖横、竖、斜三个方向的连线检测。通过完整的Python代码示例,展示了从界面打印到游戏循环控制的实现过程,并包含平局情况的处理,适合Python初学者学习二维数组操作及基础游戏逻辑开发。

井字棋游戏规则简介

井字棋(Tic-Tac-Toe)是一种在3x3网格上进行的连珠类游戏,其规则与五子棋有相似之处。由于棋盘通常没有边框,且网格线排列成“井”字形,因此得名。该游戏仅需纸笔即可进行,由两名玩家分别代表“O”和“X”轮流在格子中放置标记,通常先手为“X”。当任意一方的三个标记在横向、纵向或对角线上连成一条直线时,该方获胜。

胜负判定逻辑分析

实现该游戏的关键难点在于如何准确判断是否形成连线。系统需要检测横、竖、斜三个方向上的所有可能组合,以确定是否有玩家达成胜利条件。

Python完整代码实现

以下是实现该游戏的核心Python代码:


#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on 2019年4月13日

@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重庆交大'
__updated__ = '2019-04-13'


# 创建井字棋的程序
def initBoard():
 global board # 调用全局的board
 board = [None] * 3
 print("井字棋:")
 for i in range(len(board)):
  board[i] = ["+ "] * 3


# 打印井字棋的程序
def printBoard():
 global board
 for i in range(len(board)):
  for j in range(len(board[i])):
   print(board[i][j], end=" ")
  print("")


# 开始下棋的程序
def startGame():
 global board
 player = 0
 while isGameContinue():
  if player <= 8:
   if player % 2 == 0:
   # 甲方下棋
   print("==>黑方下棋")
   if not playChess("x"):
    continue
   else:
   # 乙方下棋
   print("==>白方下棋")
   if not playChess("○"):
    continue
   player += 1
  else:
   print("平局")
   break

def playChess(chess):
 # 获取位置
 x = int(input("==> X=")) - 1
 y = int(input("==> Y=")) - 1
 if board[x][y] == "+ ":
  board[x][y] = chess
  printBoard()
  return True # 落子成功
 else:
  print("==> 已有棋子 请重新落子\a")
  printBoard()
  return False # 落子失败


def isGameContinue():
 for i in range(len(board)):
  for j in range(len(board[i])):
   if board[i][j] != "+ ":
   # 横向
   if j == 0:
    if board[i][j] == board[i][j + 1] == board[i][j + 2]:
     whoWin(i, j)
     return False
   # 竖向
   if i == 0:
    if board[i][j] == board[i + 1][j] == board[i + 2][j]:
     whoWin(i, j)
     return False
   # 正斜
   if i == 0 and j == 0:
    if board[i][j] == board[i + 1][j + 1] == board[i + 2][j + 2]:
     whoWin(i, j)
     return False
   # 反斜
   if i == 2 and j == 0:
    if board[i][j] == board[i - 1][j + 1] == board[i - 2][j + 2]:
     whoWin(i, j)
     return False
 return True


def whoWin(i, j):
 if board[i][j] == "x":
  print("黑方胜!")
 else:
  print("白方胜!")
 for i in range(3):
  print("win")


class main():
 board = []
 initBoard()
 printBoard()
 startGame()


if __name__ == "__main__":
 main()

游戏运行结果示例

游戏运行后的典型结果展示如下:

此外,当棋盘填满且无获胜者时,游戏结果为平局:

以上内容涵盖了井字棋游戏的基本实现原理与代码示例,希望能为读者的学习提供参考,欢迎继续支持本站获取更多技术内容。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表