This is a simple space effect of sliding stars using Pygame.
Direct link to video: simple_space_effect_01.ogv
We set some constants like the screen size and the number N of star we want.
N = 200
SCREEN_W, SCREEN_H = (640, 480)
Using list comprehension we create a list of random points in the screen, that will be our stars. The size of this list is N.
stars = [
[random.randint(0, SCREEN_W),random.randint(0, SCREEN_H)]
for x in range(N)
]
Each star is represented by one tuple on the stars list. The first star is on stars[0] and is a touple with [x, y] positions.
At each step from the game loop we draw and update the position of each star. A star is draw as a white line of one pixel. See the pygame.draw.line doc.
for star in stars:
pygame.draw.line(background,
(255, 255, 255), (star[0], star[1]), (star[0], star[1]))
star[0] = star[0] - 1
if star[0] < 0:
star[0] = SCREEN_W
star[1] = random.randint(0, SCREEN_H)
In this example we update the position of a star by decreasing its horizontal position. When the horizontal position is less than zero, it's not displayed on the screen anymore so we replace its horizontal position (star[0]) by the screen width (SCREEN_W) and the vertical position (star[1]) by a new random position. This will be like create a new star and guarantee always a different pattern of sliding stars.
The complete code:
#!/usr/bin/env python
# A simple effect of sliding stars to create a deep space sensation.
# by Silveira Neto
# Free under the terms of GPLv3 license
# See http://silveiraneto.net/2009/08/12/pygame-simple-space-effect/
import os,sys,random
import pygame
from pygame.locals import *
# Constants
N = 200
SCREEN_W, SCREEN_H = (640, 480)
def main():
# basic start
pygame.init()
screen = pygame.display.set_mode((SCREEN_W,SCREEN_H))
pygame.display.set_caption('Simple Space Effect by Silveira Neto')
# create background
background = pygame.Surface(screen.get_size())
background = background.convert()
# generate N stars
stars = [
[random.randint(0, SCREEN_W),random.randint(0, SCREEN_H)]
for x in range(N)
]
# main loop
clock = pygame.time.Clock()
while 1:
clock.tick(22)
for event in pygame.event.get():
if event.type == QUIT:
return
elif event.type == KEYDOWN and event.key == K_ESCAPE:
return
background.fill((0,0,0))
for star in stars:
pygame.draw.line(background,
(255, 255, 255), (star[0], star[1]), (star[0], star[1]))
star[0] = star[0] - 1
if star[0] < 0:
star[0] = SCREEN_W
star[1] = random.randint(0, SCREEN_H)
screen.blit(background, (0,0))
pygame.display.flip()
if __name__ == '__main__': main()