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()
嗨,我看了你的代码,问题主要出在循环逻辑和坐标重置上,我来帮你修正:
问题分析
- 内层循环范围错误:你用了
range(0, column)作为内层循环的范围,这会导致第1次外层循环(column=0)时内层根本不执行,第2次(column=1)只画1个方块,以此类推,最后画出来的是个三角形而不是完整网格。 - 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
相关产品推荐
相关产品推荐

