Nano Hash - криптовалюты, майнинг, программирование

Невозможно отобразить текст на экране в pygame

Я пытаюсь создать решатель судоку с графическим интерфейсом, используя pygame. Я заполняю экран белым и рисую прямоугольники для сетки, затем переворачиваю экран, чтобы обновить его. Теперь я использую массив доски для рисования значений сетки, используя следующую функцию

def on_render(self, board):
        font = pygame.font.Font(pygame.font.match_font('nintendoext003'), 1)
        screen = pygame.display.get_surface()
        screen.fill((255, 255, 255))
        for height in range(9):
            for width in range(9):
                rect = pygame.Rect(width*70, height*70, 68, 68)
                pygame.draw.rect(screen, (0, 0, 0), rect)
        pygame.display.flip()
        screen = pygame.display.get_surface()
        for height in range(9):
            for width in range(9):
                if not board[height][width] == 0:
                    value = font.render(str(board[height][width]), True, (255, 255, 255))
                    valrect = value.get_rect()
                    valrect.center = (width*70 + 34, height*70 + 34)
                    screen.blit(value, valrect)

сетка прорисовывается правильно и ненулевые элементы тоже читаются правильно, но текст вообще не рендерится. поскольку функция рендеринга также будет рисовать решенную сетку по мере того, как программа ее решает, я хочу, чтобы она обновлялась по мере того, как значение выводится на экран. Что я делаю не так?


Ответы:


1

Последний параметр конструктора pygame.font.Font — это размер шрифта в пикселях. Таким образом, 1 означает 1 пиксель.
Кроме того, после рисования текста необходимо обновить отображение. Обратите внимание, достаточно один раз обновить отображение, после того как вся сцена будет отрисована:

Используйте другой размер шрифта (например, 40) и обновите отображение в конце on_render:

def on_render(board):
        font = pygame.font.Font(pygame.font.match_font('nintendoext003'), 40)
        screen = pygame.display.get_surface()

        # clear display
        screen.fill((255, 255, 255))

        # draw grid
        for height in range(9):
            for width in range(9):
                rect = pygame.Rect(width*70, height*70, 68, 68)
                pygame.draw.rect(screen, (0, 0, 0), rect)

        # draw text
        for height in range(9):
            for width in range(9):
                if not board[height][width] == 0:
                    value = font.render(str(board[height][width]), True, (255, 255, 255))
                    valrect = value.get_rect()
                    valrect.center = (width*70 + 34, height*70 + 34)
                    screen.blit(value, valrect)

        # update display
        pygame.display.flip()
11.01.2020
  • странно, я поклялся, что пытался перевернуть после рисования значений, и это не сработало, и большинство примеров тоже не перевернулось. Я начал с размера шрифта 100 и уменьшал его шаг за шагом.... все равно спасибо! 11.01.2020
  • @Blaine Вы должны переворачивать только один раз в каждом кадре, поэтому, если это просто вспомогательная функция для рисования, и вы вызываете pygame.display.flip() в другом месте, то переворот не нужен. 11.01.2020
  • @TedKleinBergman Конечно, но я упомянул об этом в ответе. 11.01.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..