Advertisement
decosta1228

Prototype - Latest Version

Apr 10th, 2013
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.88 KB | None | 0 0
  1. import os, pygame, random
  2. from pygame.locals import *
  3.  
  4. # game constants
  5. SCORE = 0
  6. MAX_STARS = 45
  7. screen_height = 640
  8. screen_width = 700
  9. SCREENRECT = Rect(0, 0, screen_height, screen_width)
  10.  
  11.  
  12. main_dir = os.path.split(os.path.abspath(__file__))[0]
  13. random.seed()
  14.  
  15. def imgcolorkey(image, colorkey):
  16.     if colorkey is not None:
  17.         if colorkey is -1:
  18.             colorkey = image.get_at((0, 0))
  19.         image.set_colorkey(colorkey, RLEACCEL)
  20.     return image
  21.  
  22. def load_image(filename, colorkey = None):
  23.     filename = os.path.join('images', filename)
  24.     image = pygame.image.load(filename).convert()
  25.     return imgcolorkey(image, colorkey)
  26.    
  27. class dummysound:
  28.     def play(self): pass
  29.  
  30. def load_sound(file):
  31.     if not pygame.mixer: return dummysound()
  32.     file = os.path.join(main_dir, 'data', file)
  33.     try:
  34.         sound = pygame.mixer.Sound(file)
  35.         return sound
  36.     except pygame.error:
  37.         print ('Warning, unable to load, %s' % file)
  38.     return dummysound()
  39.  
  40. class SpriteSheet:
  41.     def __init__(self, filename):
  42.         self.sheet = load_image(filename)
  43.     def imgat(self, rect, colorkey = None):
  44.         rect = Rect(rect)
  45.         image = pygame.Surface(rect.size).convert()
  46.         image.blit(self.sheet, (0, 0), rect)
  47.         return imgcolorkey(image, colorkey)
  48.     def imgsat(self, rects, colorkey = None):
  49.         imgs = []
  50.         for rect in rects:
  51.             imgs.append(self.imgat(rect, colorkey))
  52.         return imgs
  53.  
  54. # each type of game object gets an init and an
  55. # update function. the update function is called
  56. # once per frame, and it is when each object should
  57. # change its current position and state
  58.  
  59. class PlayerShip(pygame.sprite.Sprite):
  60.     guns = [(65, 15)]   #Co-ordinates of where the guns are. Used gimp to find co-ordinates
  61.     reloadtime = 10     #How fast the bullets fly
  62.     def __init__(self):
  63.         pygame.sprite.Sprite.__init__(self, self.containers)
  64.         self.rect = self.image.get_rect()
  65.         self.justfired = 0
  66.         self.reloadtimer = 0
  67.     def update(self):
  68.         self.rect.center = pygame.mouse.get_pos()
  69.         self.rect = self.rect.clamp(SCREENRECT)
  70.         if self.reloadtimer > 0:
  71.             self.reloadtimer = self.reloadtimer -1
  72.         firing = pygame.mouse.get_pressed()[0]
  73.         if firing and (not self.justfired or self.reloadtimer == 0):
  74.             self.reloadtimer = self.reloadtime
  75.         for gun in self.guns:
  76.                 Shot((self.rect.left + gun[0], self.rect.top + gun[1]))
  77.         self.justfired = firing
  78.  
  79.  
  80. class AlienDrone(pygame.sprite.Sprite):
  81.     # Keep a master copy of the spikeyfish images so that they only need to
  82.     # be loaded once  pygame.image.load(os.path.join("images","aliendrone.png")).convert()
  83.     # pygame.rect.Rect((screen_width, (random.randrange(0,screen_height))), self.image.get_size())
  84.    
  85.     def __init__(self):
  86.         pygame.sprite.Sprite.__init__(self, self.containers)
  87.         self.image = pygame.image.load(os.path.join("images","aliendrone.png")).convert()
  88.         self.rect = pygame.rect.Rect((screen_width, (random.randrange(0,screen_height))), self.image.get_size())
  89.         self.dx = -10
  90.        
  91.     def update(self):
  92.        self.rect.centerx += self.dx
  93.  
  94.        if self.rect.right < 0:
  95.            self.kill()
  96.  
  97. class Explosion(pygame.sprite.Sprite):
  98.     defaultlife = 12
  99.     animcycle = 3
  100.     images = []
  101.     def __init__(self, actor):
  102.         pygame.sprite.Sprite.__init__(self, self.containers)
  103.         self.image = self.images[0]
  104.         self.rect = self.image.get_rect(center=actor.rect.center)
  105.         self.life = self.defaultlife
  106.  
  107.     def update(self):
  108.         self.life = self.life - 1
  109.         self.image = self.images[self.life/self.animcycle%2]
  110.         if self.life <= 0: self.kill()
  111.  
  112.  
  113. class Shot(pygame.sprite.Sprite):
  114.     speed = 20
  115.     def __init__(self, pos):
  116.         pygame.sprite.Sprite.__init__(self, self.containers)
  117.         self.rect = self.image.get_rect()
  118.         self.rect.center = pos
  119.        
  120.     def update(self):
  121.         self.rect.move_ip(self.speed, 0 )
  122.         if self.rect.x > screen_width:
  123.             self.kill()
  124.  
  125. class Score(pygame.sprite.Sprite):
  126.     def __init__(self):
  127.         pygame.sprite.Sprite.__init__(self)
  128.         self.font = pygame.font.Font(None, 20)
  129.         self.font.set_italic(1)
  130.         self.color = Color('white')
  131.         self.lastscore = -1
  132.         self.update()
  133.         self.rect = self.image.get_rect().move(470, 450)
  134.  
  135.     def update(self):
  136.         if SCORE != self.lastscore:
  137.             self.lastscore = SCORE
  138.             msg = "Total Score: %d" % SCORE
  139.             self.image = self.font.render(msg, 0, self.color)
  140.            
  141. stars = []
  142. aliens = []
  143.  
  144. for i in range(MAX_STARS):
  145.     star = [random.randrange(0,screen_height-1), random.randrange(0,screen_width-1), random.randrange(1,16)]
  146.     stars.append(star)
  147.    
  148. def main():
  149.     pygame.init()
  150.  
  151.    
  152.     if pygame.mixer and not pygame.mixer.get_init():
  153.         print ('Warning, no sound')
  154.         pygame.mixer = None
  155.  
  156.     # set the display mode
  157.     winstyle = 0
  158.     bestdepth = pygame.display.mode_ok(SCREENRECT.size, winstyle, 32)
  159.     screen = pygame.display.set_mode(SCREENRECT.size, winstyle, bestdepth)
  160.     pygame.mouse.set_visible(False)
  161.  
  162.     # load images, assign to sprite classes
  163.     # (do this before the classes are used, after screen setup)
  164.    
  165.     spritesheet = SpriteSheet('tyrian.shp.000000.png')
  166.     Shot.image = spritesheet.imgat((0, 0, 13, 13), -1)
  167.     PlayerShip.image = pygame.image.load(os.path.join("images","fighter.png")).convert()
  168.  
  169.     img = load_image('enemyexplosion.png')
  170.     Explosion.images = [img, pygame.transform.flip(img, 1, 1)]
  171.        
  172.     # decorate the game window
  173.     pygame.display.set_caption('Prototype Demo')
  174.  
  175.     # initialize game groups
  176.     shots = pygame.sprite.Group()
  177.     aliendrone = pygame.sprite.Group()
  178.     all = pygame.sprite.RenderUpdates()
  179.    
  180.     #load the sound effects
  181.     shoot_sound = load_sound('laser9.wav')
  182.    
  183.     if pygame.mixer:
  184.         music = os.path.join(main_dir, 'data', 'choral1.wav')
  185.         pygame.mixer.music.load(music)
  186.         pygame.mixer.music.play(-1)
  187.  
  188.     # assign default groups to each sprite class
  189.     PlayerShip.containers = all
  190.     Shot.containers = shots, all
  191.     AlienDrone.containers = aliendrone, all
  192.     Explosion.containers = all
  193.  
  194.    
  195.     #Create Some Starting Values
  196.     global score
  197.     clock = pygame.time.Clock()
  198.  
  199.     #initialize our starting sprites
  200.     global SCORE
  201.     if pygame.font:
  202.         all.add(Score())
  203.        
  204.        
  205.     clock = pygame.time.Clock()
  206.  
  207.     playerShip = PlayerShip()
  208.     drone = AlienDrone()        
  209.    
  210.     while 1:
  211.  
  212.         numberAlien = 5
  213.        
  214.         # get input
  215.         for event in pygame.event.get():
  216.             if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
  217.                 return
  218.             if event.type == MOUSEBUTTONDOWN:
  219.                 shoot_sound.play()
  220.  
  221.         # update all the sprites
  222.         all.update()
  223.  
  224.         # Detect collisions
  225.         for alien in pygame.sprite.spritecollide(playerShip, aliendrone, 1):
  226.             #boom_sound.play()
  227.             #Explosion(aliendrone)
  228.             #Explosion(playerShip)
  229.             playerShip.kill()
  230.  
  231.         for alien in pygame.sprite.groupcollide(shots, aliendrone, 1, 1).keys():
  232.             #boom_sound.play()
  233.             #Explosion(aliendrone)
  234.             SCORE = SCORE + 1
  235.  
  236.              
  237.         #draw the scene
  238.         screen.fill((0, 0, 0))
  239.         all.draw(screen)
  240.  
  241.        
  242.     for star in stars:
  243.         star[0] -= star[2]
  244.         if star[0] < 0:
  245.             star[0] = screen_height
  246.         screen.set_at((star[0], star[1]), (255,255,255))
  247.        
  248.             pygame.display.flip()
  249.  
  250.         aliendrone.add(AlienDrone())
  251.    
  252.        
  253.         clock.tick(30)
  254.        
  255.     if pygame.mixer:
  256.         pygame.mixer.music.fadeout(1000)
  257.     pygame.time.wait(1000)
  258.     pygame.quit()
  259.  
  260.  
  261. if __name__ == '__main__': main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement