Пигмейд дисплей 2D NumPy массив - PullRequest
0 голосов
/ 18 сентября 2018

Я создал двумерный массив NxPy 20x20 со случайным значением 0, 1 или 2. Я хочу, чтобы каждое из этих значений имело соответствующее значение цвета, а Pygame отображалоСетка этих соответствующих значений цвета.0 становится белым квадратом, 1 становится красным квадратом, а 2 становится зеленым, например.Я не могу найти способ сделать это.Мой код на данный момент представляет собой путаницу учебных пособий, и ни одна из них на самом деле не работает, но вот, пожалуйста:

import numpy
import pygame

gridarray = numpy.random.randint(3, size=(20, 20))
print(gridarray)

colour0=(120,250,90)
colour1=(250,90,120)
colour2=(255,255,255)

(width,height)=(300,300)

screen = pygame.pixelcopy.make_surface(gridarray)
pygame.display.flip()
screen.fill(colour2)

running = True
while running:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      running = False

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете создать массив, содержащий цвета

colors = np.array([[120, 250, 90], [250, 90, 120], [255, 255, 255]])

и использовать gridarray в качестве массива индекса: colors[gridarray].Вы получите массив, такой как этот:

array([[[120, 250,  90],
        [250,  90, 120],
        [250,  90, 120],
        ...,

Передайте его в pygame.surfarray.make_surface, чтобы превратить его в pygame.Surface, который вы можете перетаскивать на экран.

import pygame as pg
import numpy as np


pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()

colors = np.array([[120, 250, 90], [250, 90, 120], [255, 255, 255]])
gridarray = np.random.randint(3, size=(20, 20))
surface = pg.surfarray.make_surface(colors[gridarray])
surface = pg.transform.scale(surface, (200, 200))  # Scaled a bit.

running = True
while running:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            running = False

    screen.fill((30, 30, 30))
    screen.blit(surface, (100, 100))
    pg.display.flip()
    clock.tick(60)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...