hi, i'm following SDL tutorial here, http://sol.gfxile.net/gp/ch04.html
this is the pygame equivalent. as you can see the code is not nice
looking. that's because i have tried all the optimization tricks i
know (local names, avoid dot operators, numpy array etc...) the result
is still awfully slow
help.
import numpy
import random
from sys import exit
from math import sin, cos
import pygame
import pygame.event as event
import pygame.display as display
from pygame.locals import *
from pygame import Surface
from pygame.time import get_ticks
from pygame.surfarray import pixels2d, blit_array, make_surface
WIDTH = 640
HEIGHT = 480
RESOLUTION = (WIDTH, HEIGHT)
def init(width, height, screen_array, green=int(0x007f00)):
for i in xrange(width):
sins = (sin((i + 3247) * 0.02) * 0.3 +
sin((i + 2347) * 0.04) * 0.1 +
sin((i + 4378) * 0.01) * 0.6)
p = int(sins * 100 + 380)
for j in range(p, height):
screen_array[i, j] = green
def newsnow(width, height, screen_array, white=int(0xffffff)):
for i in xrange(8):
screen_array[random.randint(1, 638), 0] = white
def snowfall(width, height, screen_array, white=int(0xffffff), black=0):
for j in xrange(height-2, -1, -1):
for i in xrange(1, width-1):
if screen_array[i, j] == white:
if screen_array[i, j+1] == black:
screen_array[i, j+1] = white
screen_array[i, j] = black
def main():
pygame.init()
width = WIDTH
height = HEIGHT
screen_surf = display.set_mode(RESOLUTION)
screen_rect = screen_surf.get_rect()
screen_array = pixels2d(screen_surf)
init(width, height, screen_array)
white = int(0xffffff)
black = 0
display.update(screen_rect)
while True:
tick = get_ticks()
newsnow(width, height, screen_array)
#snowfall(width, height, screen_array)
for j in xrange(height-2, -1, -1):
for i in xrange(1, width-1):
if screen_array[i, j] == white:
if screen_array[i, j+1] == black:
screen_array[i, j+1] = white
screen_array[i, j] = black
display.update(screen_rect)
for e in event.get():
type = e.type
if type == QUIT:
exit()
elif type == KEYUP and e.key == K_ESCAPE:
return
if __name__ == '__main__': main()
--
paul victor noagbodji