Pygame实现井字棋:第一步绘制九宫格界面

Mason
Mason
发布时间:2026-10-12 | 2人浏览过
原创

本文介绍使用Python Pygame模块实现井字棋游戏的第一步:绘制九宫格界面。通过初始化屏幕、设置背景色及标题,利用pygame.draw.rect函数创建9个矩形对象以划分游戏区域。文章详细解析了矩形参数的含义,包括坐标、宽高及边框宽度,并初步探讨了通过类封装格子状态以支持后续X/O显示及人机交互逻辑的实现思路。

一、前言

本次尝试使用Pygame模块开发一个井字棋游戏。目标是在屏幕上创建一个被划分为9个区域的界面,允许用户通过鼠标点击来占领未被占用的方格。游戏规则遵循常规井字棋标准,具体策略建议自行查阅相关资料。在本阶段的人机对战逻辑中,采用随机数模式进行选择,暂不涉及复杂的算法策略。

二、显示界面

import pygame
import sys
# 初始化模块,加一下稳一些
pygame.init()
# 创建屏幕对象
screen = pygame.display.set_mode((width,height))
# 界面背景颜色渲染,放在while中会不断覆盖格子
screen.fill((255,255,255))
# 界面的标题
pygame.display.set_caption('井字棋')

# 刷新界面函数
def update():
    pass

# 游戏状态,0表示未分胜负,-1表示个人胜利,1表示电脑获胜
judge = 0

while not judge:
    update()
    # 感应事件
    for event in pygame.event.get():
    	# 点击关闭窗口,退出游戏
    	if event.type == pygame.QUIT:
            sys.exit()
    # 将渲染的界面显示
    pygame.display.flip()

需要注意的是,若未在代码中正确调用退出机制,游戏窗口可能会因无法响应而卡死。

三、九宫格

核心思路是将游戏界面划分为9个独立的格子,每个格子对应一个Rect对象。

# width、height已经给出
# 长/宽的三分之一,为一个格子的长宽
single = width/3
# 表示九个格子
rect = [0]*9
rect[0] = pygame.draw.rect(screen,(255,228,181),((0,0),(single,single)),width=1)
rect[1] = pygame.draw.rect(screen,(255,228,181),((single,0),(single,single)),width=1)
rect[2] = pygame.draw.rect(screen,(255,228,181),((single*2,0),(single,single)),width=1)
rect[3] = pygame.draw.rect(screen,(255,228,181),((0,single),(single,single)),width=1)
rect[4] = pygame.draw.rect(screen,(255,228,181),((single,single),(single,single)),width=1)
rect[5] = pygame.draw.rect(screen,(255,228,181),((single*2,single),(single,single)),width=1)
rect[6] = pygame.draw.rect(screen,(255,228,181),((0,single*2),(single,00)),width=1)
rect[7] = pygame.draw.rect(screen,(255,228,181),((single,single*2),(single,single)),width=1)
rect[8] = pygame.draw.rect(screen,(255,228,181),((single*2,800),(single,single)),width=1)

首先使用[0]*9初始化一个包含9个元素的列表,随后逐个修改其内容以赋值具体的矩形对象。

Rect函数的参数定义如下:

  • 第一个参数为显示屏幕对象,即我们创建的screen。
  • 第二个参数为RGB颜色值,该颜色既可以是矩形的填充色,也可以是边框颜色,具体取决于后续参数。
  • 第三个参数是一个元组,包含两个部分:第一个子元组表示矩形的左上角坐标,第二个部分表示矩形的宽度和高度。
  • 第四个参数为边框宽度。若该值非零,则前面的颜色参数作为边框颜色;若为0,则前面的颜色作为填充颜色。

关于xy坐标的具体含义,参考上述坐标元组的定义即可理解。

四、效果

由于边框和背景颜色在代码中已固定,因此无需在每一帧渲染循环中重复执行这些绘制操作。

当格子被占用时,需要显示“X”或“O”。初步设想是在对应的Rect对象上渲染图像,若处理图像较为繁琐,也可直接将文字处理为矩形形状。这涉及两个矩形的嵌套关系,因此另外编写了一个类来处理。

# lattice.py
class Lattice():
    def __init__(self,rect):
        self.rect = rect
        # 0表示初始,1表示个人-1表示电脑
        self.stats = 0
	
	# 渲染矩阵
    def draw(self):
        # 按照状态显示
        if self.stats == -1:
            pass
        elif self.stats == 0:
            pass
        else:
            pass

根据格子的当前状态,生成内部矩形(此部分代码尚未完成)。

主模块代码如下:

from lattice import Lattice

for i in range(len(rect)):
    rect[i] = Lattice(rect[i])

经过上述处理,原来的rect对象列表现在转换为类的实例列表。

未完待续

接下来,我将实现游戏的整体逻辑部分。

下一篇:pygame实现井字棋——2.逻辑实现

到此这篇关于pygame实现井字棋之第一步绘制九宫格的文章就介绍到这了,更多相关pygame绘制九宫格内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表