Python 显示带有';对于';使用pygame的结构

Python 显示带有';对于';使用pygame的结构,python,pygame,Python,Pygame,我是python和Java的初学者 我正在尝试使用pygame制作一个刽子手游戏。 我制作了一些矩形来显示一些按钮,以便点击输入。 现在我尝试在每个矩形中显示字母表。 我尝试2D列表,但我找不到哪里出错 这是我的密码 import pygame from pygame.locals import QUIT, Rect import sys pygame.init() SURFACE = pygame.display.set_mode((900, 600)) FPSCLOCK = pygame.

我是python和Java的初学者 我正在尝试使用pygame制作一个刽子手游戏。 我制作了一些矩形来显示一些按钮,以便点击输入。 现在我尝试在每个矩形中显示字母表。 我尝试2D列表,但我找不到哪里出错

这是我的密码

import pygame
from pygame.locals import QUIT, Rect
import sys

pygame.init()
SURFACE = pygame.display.set_mode((900, 600))
FPSCLOCK = pygame.time.Clock()

def main():
    sysfont = pygame.font.SysFont(None, 46)
    message = [[0]*4 for i in range(7)]
    message_rect = [[0]*4 for i in range(7)]

    for i in range(0, 7):
        for j in range(0, 4):
            if not ((i == 5 and j == 3) or (i == 6 and j == 3)):
                message[i][j] = sysfont.render(type(chr(65+7*j+i)), True, (0, 255, 0))
                message_rect[i][j] = message[i][j].get_rect()
                message_rect[i][j].center = (80 + 140 * i, 180 + 140 * j)

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

        SURFACE.fill((255, 255, 255))
        for i in range(0, 7):
            for j in range(0, 4):
                if not ((i == 5 and j == 3) or (i == 6 and j == 3)):
                    SURFACE.blit(message[i][j], message_rect[i][j])

        for i in range(0, 7):
            for j in range(0, 4):
                if not ((i == 5 and j == 3) or (i == 6 and j == 3)):
                    pygame.draw.rect(SURFACE, (0, 0, 0), (50+100*i, 150+100*j, 60, 60), 5)

        pygame.display.update()
        FPSCLOCK.tick(1)

if __name__ == '__main__':
    main()
当我运行这个程序时,我可以看到矩形,但不能看到字母。
我应该在哪里修复它,问题是什么?

sysfont.render的第一个参数必须是字符串。返回unicode代码的字符串表示形式。因此,返回对象的类型是多余的:

message[i][j]=sysfont.render(类型(chr(65+7*j+i)),True,(0,255,0))

message[i][j]=sysfont.render(chr(65+7*j+i),True,(0,255,0))
此外,由于字母之间的偏移量较大,因此字母位置的计算会产生越来越大的失准结果,以增加索引:

message_rect[i][j]。中心=(80+140*i,180+140*j)

message_rect[i][j].中心=(80+100*i,180+100*j)
更改代码如下,以解决此问题:

def main():
# [...]
对于范围(0,7)内的i:
对于范围(0,4)内的j:
如果不是((i==5和j==3)或(i==6和j==3)):
message[i][j]=sysfont.render(chr(65+7*j+i),True,(0,255,0))
message_rect[i][j]=message[i][j]。get_rect()
message_rect[i][j].中心=(80+100*i,180+100*j)
# [...]

sysfont.render的第一个参数必须是字符串。返回unicode代码的字符串表示形式。因此,返回对象的类型是多余的:

message[i][j]=sysfont.render(类型(chr(65+7*j+i)),True,(0,255,0))

message[i][j]=sysfont.render(chr(65+7*j+i),True,(0,255,0))
此外,由于字母之间的偏移量较大,因此字母位置的计算会产生越来越大的失准结果,以增加索引:

message_rect[i][j]。中心=(80+140*i,180+140*j)

message_rect[i][j].中心=(80+100*i,180+100*j)
更改代码如下,以解决此问题:

def main():
# [...]
对于范围(0,7)内的i:
对于范围(0,4)内的j:
如果不是((i==5和j==3)或(i==6和j==3)):
message[i][j]=sysfont.render(chr(65+7*j+i),True,(0,255,0))
message_rect[i][j]=message[i][j]。get_rect()
message_rect[i][j].中心=(80+100*i,180+100*j)
# [...]