Где проблема с отображением букв со структурой 'for' с помощью pygame? - PullRequest
1 голос
/ 29 марта 2020

Я новичок в python, и я пытаюсь сделать игру Hangman, используя 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()

Когда я запускаю это, я вижу прямоугольники, но не буквы. Где это исправить и в чем проблема?

1 Ответ

0 голосов
/ 29 марта 2020

1-й аргумент sysfont.render должен быть строкой. chr(i) возвращает строковое представление кода Unicode. Таким образом, type(), который возвращает тип объекта, является излишним:

message[i][j] = sysfont.render(type(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].center = (80 + 140 * i, 180 + 140 * j)

message_rect[i][j].center = (80 + 100 * i, 180 + 100 * j)

Для решения проблемы измените код следующим образом:

def main():
    # [...]

    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(chr(65+7*j+i), True, (0, 255, 0))
                message_rect[i][j] = message[i][j].get_rect()
                message_rect[i][j].center = (80 + 100 * i, 180 + 100 * j)

    # [...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...