import pygame import random from pygame.locals import * class KittySprite(pygame.sprite.DirtySprite): def __init__(self, image_name): super(KittySprite, self).__init__() self.image = pygame.image.load(image_name) self.rect = self.image.get_rect() self.dirty = 1 self.rect.topleft = (0, 0) def update(self): self.dirty = 1 def move_to(self, pos): self.rect.center = posimport pygame import random from pygame.locals import * class KittySprite(pygame.sprite.DirtySprite): def __init__(self, image_name): super(KittySprite, self).__init__() self.image = pygame.image.load(image_name) self.rect = self.image.get_rect() self.dirty = 1 self.rect.topleft = (0, 0) def update(self): self.dirty = 1 def move_to(self, pos): self.rect.center = pos self.dirty = 1 class BulletSprite(pygame.sprite.DirtySprite): def __init__(self, start, speed): super(BulletSprite, self).__init__() self.image = pygame.Surface((8, 30)) self.rect = self.image.get_rect() self.dirty = 1 self.rect.center = start self.speed = speed self.color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) self.image.fill(self.color) self.framescolored = 0 def update(self): self.rect.y -= self.speed if self.rect.top < 0: self.kill() if self.framescolored < 10: self.image.fill(self.color) else: self.image.fill((0, 0, 0)) self.framescolored = 0 self.framescolored += 1 def run_game(surf, sprite_group, bullets, kitty_sprite, clock): while True: events(sprite_group, kitty_sprite, bullets) update(sprite_group, bullets) render(surf, sprite_group, bullets) clock.tick(30) pygame.init() clock = pygame.time.Clock() pygame.mouse.set_visible(False) window_surface = pygame.display.set_mode((640, 480)) spr_group = pygame.sprite.GroupSingle() kitty = KittySprite('kitten.png') spr_group.add(kitty) bullets = pygame.sprite.RenderUpdates() def events(sprite_group, kitty_sprite, bullets): for event in pygame.event.get(): if event.type == QUIT: pygame.quit() elif event.type == MOUSEMOTION: kitty_sprite.move_to(event.pos) elif event.type == MOUSEBUTTONUP: bull = BulletSprite(kitty_sprite.rect.center, 10) bullets.add(bull) def update(sprite_group, bullets): sprite_group.update() bullets.update() def render(surf, sprite_group, bullets): surf.fill((255, 255, 255)) sprite_group.draw(surf) bullets.draw(surf) pygame.display.flip() run_game(window_surface, spr_group, bullets, kitty, clock) self.dirty = 1 class BulletSprite(pygame.sprite.DirtySprite): def __init__(self, start, speed): super(BulletSprite, self).__init__() self.image = pygame.Surface((8, 30)) self.rect = self.image.get_rect() self.dirty = 1 self.rect.center = start self.speed = speed self.color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) self.image.fill(self.color) self.framescolored = 0 def update(self): self.rect.y -= self.speed if self.rect.top < 0: self.kill() if self.framescolored < 10: self.image.fill(self.color) else: self.image.fill((0, 0, 0)) self.framescolored = 0 self.framescolored += 1 def run_game(surf, sprite_group, bullets, kitty_sprite, clock): while True: events(sprite_group, kitty_sprite, bullets) update(sprite_group, bullets) render(surf, sprite_group, bullets) clock.tick(30) pygame.init() clock = pygame.time.Clock() pygame.mouse.set_visible(False) window_surface = pygame.display.set_mode((640, 480)) spr_group = pygame.sprite.GroupSingle() kitty = KittySprite('kitten.png') spr_group.add(kitty) bullets = pygame.sprite.RenderUpdates() def events(sprite_group, kitty_sprite, bullets): for event in pygame.event.get(): if event.type == QUIT: pygame.quit() elif event.type == MOUSEMOTION: kitty_sprite.move_to(event.pos) elif event.type == MOUSEBUTTONUP: bull = BulletSprite(kitty_sprite.rect.center, 10) bullets.add(bull) def update(sprite_group, bullets): sprite_group.update() bullets.update() def render(surf, sprite_group, bullets): surf.fill((255, 255, 255)) sprite_group.draw(surf) bullets.draw(surf) pygame.display.flip() run_game(window_surface, spr_group, bullets, kitty, clock)