You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyGame网格构建疑问:如何用嵌套循环实现完整方格网格?

如何用PyGame绘制完整的方格网格?

我正在学习Python与PyGame的使用,尝试构建方格网格。目前已成功绘制一行10个方块,但卡在通过添加另一个循环实现完整网格的步骤,我的代码如下:

import pygame
pygame.init()
win = pygame.display.set_mode((728, 728))
tile_width = 64
tile_height = 64
margin = 8 # space between the boxes
white = (255, 255, 255)
clock = pygame.time.Clock()
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    x, y = margin, margin
    for column in range(10):
        for row in range(0, column):
            rect = pygame.Rect(x, y, tile_width, tile_height)
            pygame.draw.rect(win, white, rect)
            x = x + tile_width + margin
        y = y + tile_width + margin
    pygame.display.update()
pygame.quit()

嗨,我看了你的代码,问题主要出在循环逻辑和坐标重置上,我来帮你修正:

问题分析

  1. 内层循环范围错误:你用了range(0, column)作为内层循环的范围,这会导致第1次外层循环(column=0)时内层根本不执行,第2次(column=1)只画1个方块,以此类推,最后画出来的是个三角形而不是完整网格。
  2. x坐标未重置:每次外层循环结束后,x没有回到初始的margin位置,导致下一行的方块会从当前x的位置继续画,而不是从左侧开始。

修正后的代码

import pygame
pygame.init()
win = pygame.display.set_mode((728, 728))
tile_width = 64
tile_height = 64
margin = 8 # space between the boxes
white = (255, 255, 255)
# 新增背景色,让方块显示更清晰
gray = (50, 50, 50)
clock = pygame.time.Clock()
run = True

while run:
    # 处理退出事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    
    # 每次循环先填充背景,避免画面残留旧方块
    win.fill(gray)
    
    y = margin  # 初始化行起始y坐标
    for row in range(10):  # 外层循环控制行数,共10行
        x = margin  # 每行开始时重置x到左侧起始位置
        for column in range(10):  # 内层循环控制列数,每行10个方块
            rect = pygame.Rect(x, y, tile_width, tile_height)
            pygame.draw.rect(win, white, rect)
            x += tile_width + margin  # 列方向移动坐标,准备画下一个方块
        y += tile_height + margin  # 行方向移动坐标,准备画下一行
    
    pygame.display.update()
    clock.tick(60)  # 控制帧率,避免程序过度占用资源

pygame.quit()

关键改进点

  • 调整循环逻辑为外层控制行、内层控制列,两个循环都用range(10),确保生成10行×10列的完整网格。
  • 每次进入新行时重置x为margin,保证每行的第一个方块都从左侧起始位置开始绘制。
  • 添加背景填充和帧率控制,让画面更整洁、运行更稳定。

运行这段代码后,你就能看到一个整齐的10×10方格网格啦!

内容的提问来源于stack exchange,提问作者Martelius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 12:37:49