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

Pygame用元组列表存储方块颜色绘制棋盘出现黑屏问题求助

问题排查与解决方案

你怀疑的colour = con.BOARD_COLOURS[((r+c) % 2)]这行逻辑本身是正确的,可以正常生成交替颜色索引,黑屏是其他代码逻辑错误导致的,具体问题和修复方案如下:

核心错误点

  • 初始化顺序错误:必须先执行pg.init()初始化Pygame所有模块,再调用pg.display.set_mode()创建显示窗口,你当前的顺序反过来会导致渲染功能失效
  • 缺少画面刷新逻辑:Pygame的所有绘制操作默认在后台缓冲区执行,绘制完成后需要调用pg.display.update()或者pg.display.flip()才能把内容同步到实际显示的窗口上,缺少这步就会一直显示黑屏
  • 常量引用错误:你定义的常量没有挂载到con对象/模块下,直接用con.XXX调用会触发名称错误,如果是把常量单独放在con.py文件里需要先导入,否则直接去掉con.前缀直接引用常量即可
  • 非必要重复创建对象:不需要在游戏主循环里每次都新建Board实例,放在循环外部创建一次即可

修正后可运行代码

常量与依赖导入

import pygame as pg

# RGB colours
BOARD_COLOURS = [(245, 222, 179),(34, 139, 34)]
# Dimensions
ROWS = 8
COLS = 8
DIMS = 600
SQUARE = 600 // 8

Board类实现

class Board:
    def __init__(self):
        pass

    def drawBoard(self, screen):
        for r in range(ROWS):
            # 列循环改为用COLS更符合逻辑,原代码用ROWS也能运行因为值都是8
            for c in range(COLS):
                colour = BOARD_COLOURS[((r+c) % 2)]
                pg.draw.rect(screen, colour, pg.Rect(c*SQUARE, r*SQUARE, SQUARE, SQUARE))

主函数实现

def main():
    t = 60
    clock = pg.time.Clock()
    # 先初始化pygame再创建窗口
    pg.init()
    interface = pg.display.set_mode((DIMS, DIMS))
    run = True
    # Board实例只创建一次
    b = Board()

    while run:
        clock.tick(t)

        for ev in pg.event.get():
            if ev.type == pg.QUIT:
                run = False

        b.drawBoard(interface)
        # 刷新屏幕显示
        pg.display.flip()

    pg.quit()

if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:07