Advertisement
Guest User

itergroup_collisions: callback

a guest
Oct 28th, 2013
575
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.87 KB | None | 0 0
  1. import os
  2. import sys
  3. import math
  4. import pygame as pg
  5.  
  6.  
  7. def collidable(one,two):
  8.     if one is two:
  9.         return False
  10.     else:
  11.         return one.rect.colliderect(two.rect)
  12.  
  13.  
  14. class Block(pg.sprite.Sprite):
  15.     def __init__(self,color,speed,*rect):
  16.         pg.sprite.Sprite.__init__(self)
  17.         self.rect = pg.Rect(rect)
  18.         self.image = pg.Surface(self.rect.size).convert()
  19.         self.image.fill(color)
  20.         self.speed = speed
  21.  
  22.     def update(self,screen_rect,group):
  23.         self.rect.move_ip(self.speed,0)
  24.         collision = pg.sprite.spritecollide(self,group,False,collidable)
  25.         if collision or not screen_rect.contains(self.rect):
  26.             self.speed *= -1
  27.  
  28.  
  29. class Control(object):
  30.     def __init__(self):
  31.         os.environ["SDL_VIDEO_CENTERED"] = '1'
  32.         pg.init()
  33.         self.screen = pg.display.set_mode((500,270))
  34.         self.screen_rect = self.screen.get_rect()
  35.         self.clock = pg.time.Clock()
  36.         self.done = False
  37.         self.fps = 60.0
  38.         self.blocks = self.make_blocks()
  39.  
  40.     def make_blocks(self):
  41.         blocks = pg.sprite.Group()
  42.         for i in range(30):
  43.             y,x = divmod(i,6)
  44.             rect = pg.Rect(x*55+100,y*55+20,10,10)
  45.             speed = (1 if i%2 else -1)
  46.             blocks.add(Block(pg.Color("green"),speed,rect))
  47.         return blocks
  48.  
  49.     def event_loop(self):
  50.         for event in pg.event.get():
  51.             if event.type == pg.QUIT:
  52.                 self.done = True
  53.  
  54.     def main_loop(self):
  55.         while not self.done:
  56.             self.event_loop()
  57.             self.blocks.update(self.screen_rect,self.blocks)
  58.             self.screen.fill(0)
  59.             self.blocks.draw(self.screen)
  60.             pg.display.update()
  61.             self.clock.tick(self.fps)
  62.  
  63.  
  64. if __name__ == "__main__":
  65.     run_it = Control()
  66.     run_it.main_loop()
  67.     pg.quit()
  68.     sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement