簡體   English   中英

pygame顯示二維numpy數組

[英]Pygame display 2D numpy array

我創建了一個2d的numpy數組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

您可以創建一個包含顏色的數組

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 ,您可以將其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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM