pygame吧 关注:724贴子:1,953
  • 0回复贴,共1

rect速度慢 怎么优化

只看楼主收藏回复

# -*- coding: utf-8 -*-
import pygame, sys, traceback
import pandas as pd
import numpy as np
from pygame.color import THECOLORS
import matplotlib.pyplot as plt
def get_lifegame(data):
(height , width) = data.shape
data_with_edge = np.zeros((height+2, width+2))
data_with_edge[1:height+1, 1:width+1] = data
for i in range(height):
for j in range(width):
sum_ij = data_with_edge[i:i+3,j:j+3].sum() - data_with_edge[i+1,j+1]
if data[i,j]==0:
if sum_ij == 2 or sum_ij == 3:
data[i,j]=1
else:
data[i,j]=0
else:
if sum_ij == 3:
data[i,j]=1
else:
data[i,j]=0
return data
#init pygame
pygame.init()
bg_size = bg_width, bg_height = 650, 550
screen = pygame.display.set_mode(bg_size)
pygame.display.set_caption('CellAuto')
background = 0,0,0
def draw_cells(cells, cell_size=5):
surf = pygame.Surface((cells.shape[1]*cell_size, cells.shape[0]*cell_size))
x_offset, y_offset = 20, 20
for i in range(cells.shape[0]):
for j in range(cells.shape[1]):
if cells[i,j]==1:
pygame.draw.rect(surf,[0,200,0],\
[cell_size*i,cell_size*j\
,cell_size,cell_size],1)
screen.blit(surf, (x_offset, y_offset))
def main():
clock = pygame.time.Clock()
my_font = pygame.font.SysFont("timesnewroman", 16)
#generate a ball
lifes = []
size=100
cells = np.random.randint(0, high=2, size=(size, size))
runing = True
while runing:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
plt.plot(lifes)
sys.exit()
screen.fill(background)
cells = get_lifegame(cells)
draw_cells(cells)
#render text
info_text = my_font.render("LifeNum:%3d"%cells.sum(), True, (0,200,0))
screen.blit(info_text, (550,50))
lifes.append(cells.sum())
pygame.display.update()
clock.tick(10)
if __name__=='__main__':
try:
main()
except SystemExit:
pass
except:
traceback.print_exc()
pygame.quit()


1楼2018-05-02 03:16回复