Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.42 KB | None | 0 0
  1. import pygame, random
  2. from os import path
  3.  
  4. img_dir = path.join(path.dirname(__file__), 'img')
  5.  
  6. Width = 480
  7. Height = 600
  8. FPS = 60
  9. Powerup_time = 5000
  10.  
  11. White = (255, 255, 255)
  12. Black = (0, 0, 0)
  13. Red = (255, 0, 0)
  14. Green = (0, 255, 0)
  15. Blue = (0, 0, 255)
  16. Yellow = (255, 255, 0)
  17. pygame.init()
  18. pygame.mixer.init()
  19. screen = pygame.display.set_mode((Width, Height))
  20. pygame.display.set_caption("Defender")
  21. clock = pygame.time.Clock()
  22. font_name = pygame.font.match_font('arial')
  23.  
  24.  
  25. def draw_text(surf, text, size, x, y):
  26.     font = pygame.font.Font(font_name, size)
  27.     text_surface = font.render(text, True, White)
  28.     text_rect = text_surface.get_rect()
  29.     text_rect.midtop = (x, y)
  30.     surf.blit(text_surface, text_rect)
  31.  
  32. def newmob():
  33.     m = Mob()
  34.     all_sprites.add(m)
  35.     mobs.add(m)
  36.  
  37. def draw_shield_bar(surf, x, y, pct):
  38.     if pct < 0:
  39.         pct = 0
  40.     Bar_Length = 100
  41.     Bar_Height = 10
  42.     fill = (pct  / 100) * Bar_Length
  43.     outline_rect = pygame.Rect(x, y, Bar_Length, Bar_Height)
  44.     fill_rect = pygame.Rect(x, y, fill, Bar_Height)
  45.     pygame.draw.rect(surf, Yellow, fill_rect, Bar_Height)
  46.     pygame.draw.rect(surf, White, outline_rect, 2)
  47.  
  48. def draw_lives(surf, x, y, lives, img):
  49.     for i in range(lives):
  50.         img_rect = img.get_rect()
  51.         img_rect.x = x + 30 * i
  52.         img_rect.y = y
  53.         surf.blit(img, img_rect)
  54.  
  55. def draw_roundtime(surf, x, y):
  56.     Time_Length = 30
  57.     Time_Height = 10
  58.     pygame.draw.rect(surf, Time_Length, Time_Height)
  59.  
  60.  
  61. class Player(pygame.sprite.Sprite):
  62.     def __init__(self):
  63.         pygame.sprite.Sprite.__init__(self)
  64.         self.image = pygame.transform.scale(player_img, (60, 40))
  65.         self.image.set_colorkey(White)
  66.         self.rect = self.image.get_rect()
  67.         self.radius = 14
  68.         self.rect.centerx = Width / 2
  69.         self.rect.bottom = Height - 10
  70.         self.speedx = 0
  71.         self.shield = 100
  72.         self.shoot_delay = 250
  73.         self.last_shot = pygame.time.get_ticks()
  74.         self.lives = 3
  75.         self.hidden = False
  76.         self.hide_timer = pygame.time.get_ticks()
  77.         self.power = 1
  78.         self.power_time = pygame.time.get_ticks()
  79.  
  80.  
  81.     def update(self):
  82.         if self.power >= 2 and pygame.time.get_ticks() - self.power_time > Powerup_time:
  83.             self.power -= 1
  84.             self.power_time = pygame.time.get_ticks()
  85.  
  86.         if self.hidden and pygame.time.get_ticks() - self.hide_timer > 1000:
  87.             self.hidden = False
  88.             self.rect.centerx = (Width / 2)
  89.             self.rect.bottom = Height - 10
  90.         self.speedx = 0
  91.         keystate = pygame.key.get_pressed()
  92.         if keystate[pygame.K_a]:
  93.             self.speedx = -5
  94.         if keystate[pygame.K_d]:
  95.             self.speedx = 5
  96.         if keystate[pygame.K_SPACE]:
  97.             self.shoot()
  98.         self.rect.x += self.speedx
  99.         if self.rect.right > Width:
  100.             self.rect.right = Width
  101.         if self.rect.left < 0:
  102.             self.rect.left = 0
  103.  
  104.     def powerup(self):
  105.         self.power += 1
  106.         self.power_time = pygame.time.get_ticks()
  107.  
  108.     def shoot(self):
  109.         now = pygame.time.get_ticks()
  110.         if now - self.last_shot > self.shoot_delay:
  111.             self.last_shot = now
  112.             if self.power == 1:
  113.                 bullet = Bullet(self.rect.centerx, self.rect.top)
  114.                 all_sprites.add(bullet)
  115.                 bullets.add(bullet)
  116.             if self.power >= 2:
  117.                 bullet1 = Bullet(self.rect.left, self.rect.centery)
  118.                 bullet2 = Bullet(self.rect.right, self.rect.centery)
  119.                 all_sprites.add(bullet1)
  120.                 all_sprites.add(bullet2)
  121.                 bullets.add(bullet1)
  122.                 bullets.add(bullet2)
  123.  
  124.     def hide(self):
  125.         self.hidden = True
  126.         self.hide_timer = pygame.time.get_ticks()
  127.         self.rect.center = (Width / 2, Height + 200)
  128.  
  129. class Mob(pygame.sprite.Sprite):
  130.     def __init__(self):
  131.         pygame.sprite.Sprite.__init__(self)
  132.         self.image = pygame.transform.scale(enemy_img, (40, 30))
  133.         self.image.set_colorkey(Black)
  134.         self.rect = self.image.get_rect()
  135.         self.radius = 7
  136.         self.rect.x = random.randrange(Width - self.rect.width)
  137.         self.rect.y = random.randrange(-100, -40)
  138.         self.speedy = random.randrange(1, 4)
  139.         self.speedx = random.randrange(-3, 3)
  140.  
  141.     def update(self):
  142.         self.rect.y += self.speedy
  143.         if self.rect.top > Height + 10 or self.rect.left < -25 or self.rect.right < 25:
  144.             self.rect.x = random.randrange(Width - self.rect.width)
  145.             self.rect.y = random.randrange(-100, -40)
  146.             self.speedy = random.randrange(1, 4)
  147.  
  148. class Bullet(pygame.sprite.Sprite):
  149.     def __init__(self, x, y):
  150.         pygame.sprite.Sprite.__init__(self)
  151.         self.image = bullet_img
  152.         self.image.set_colorkey(Black)
  153.         self.rect = self.image.get_rect()
  154.         self.rect.bottom = y
  155.         self.rect.centerx = x
  156.         self.speedy = -10
  157.  
  158.     def update(self):
  159.         self.rect.y += self.speedy
  160.         if self.rect.bottom < 0:
  161.             self.kill()
  162.  
  163. class Pow(pygame.sprite.Sprite):
  164.     def __init__(self, center):
  165.         pygame.sprite.Sprite.__init__(self)
  166.         self.type = random.choice(['shield', 'gun'])
  167.         self.image = powerup_images[self.type]
  168.         self.image.set_colorkey(Black)
  169.         self.rect = self.image.get_rect()
  170.         self.rect.center = center
  171.         self.speedy = 2
  172.  
  173.     def update(self):
  174.         self.rect.y += self.speedy
  175.         if self.rect.top > Height:
  176.             self.kill()
  177.  
  178. class Boss(pygame.sprite.Sprite):
  179.     def __init__(self):
  180.         pygame.sprite.Sprite.__init__(self)
  181.         self.image = pygame.transform.scale(boss_img, (150, 200))
  182.         self.image.set_colorkey(Black)
  183.         self.rect = self.image.get_rect()
  184.         self.rect.center = ((Width / 2, -70))
  185.         self.speedy = 1
  186.         self.shoot_delay = 250
  187.         self.last_shot = pygame.time.get_ticks()
  188.         self.hp = 150
  189.         self.dead = False
  190.  
  191.     def update(self):
  192.         if self.hp <= 25:
  193.             self.speedy = 3
  194.  
  195.  
  196.  
  197. def show_go_screen():
  198.     screen.blit(background, background_rect)
  199.     draw_text(screen, "Defender", 64, Width / 2, Height / 4)
  200.     draw_text(screen, "A and D to move, Space to fire", 22, Width / 2, Height / 2)
  201.     draw_text(screen, "Press any key to begin", 18, Width / 2, Height * 3 / 4)
  202.     pygame.display.flip()
  203.     waiting = True
  204.     while waiting:
  205.         clock.tick(FPS)
  206.         for event in pygame.event.get():
  207.             if event.type == pygame.QUIT:
  208.                 pygame.quit()
  209.             if event.type == pygame.KEYUP:
  210.                 waiting = False
  211.  
  212. background = pygame.image.load(path.join(img_dir, "grass00.png")).convert()
  213. background_rect = background.get_rect()
  214. player_img = pygame.image.load(path.join(img_dir, 'Hero.png')).convert()
  215. player_mini_img = pygame.transform.scale(player_img, (36, 28))
  216. player_mini_img.set_colorkey(White)
  217. enemy_img = pygame.image.load(path.join(img_dir, 'Zombie.png')).convert()
  218. boss_img = pygame.image.load(path.join(img_dir, 'Daddy Big Boi.png')).convert()
  219. bullet_img = pygame.image.load(path.join(img_dir, 'bullet.png')).convert()
  220. powerup_images = {}
  221. powerup_images['shield'] = pygame.image.load(path.join(img_dir, 'Shield.png')).convert()
  222. powerup_images['gun'] = pygame.image.load(path.join(img_dir, 'Gun.png')).convert()
  223.  
  224. game_over = True
  225. running = True
  226. while running:
  227.     if game_over:
  228.         show_go_screen()
  229.         game_over = False
  230.         all_sprites = pygame.sprite.Group()
  231.         mobs = pygame.sprite.Group()
  232.         bullets = pygame.sprite.Group()
  233.         powerups = pygame.sprite.Group()
  234.         player = Player()
  235.         all_sprites.add(player)
  236.         for i in range(6):
  237.             newmob()
  238.         score = 0
  239.  
  240.     clock.tick(FPS)
  241.     for event in pygame.event.get():
  242.         if event.type == pygame.QUIT:
  243.             running = False
  244.  
  245.  
  246.     all_sprites.update()
  247.  
  248.     hits = pygame.sprite.groupcollide(mobs, bullets, True, True)
  249.     for hit in hits:
  250.         score += 10
  251.         if random.random() > 0.9:
  252.             pow = Pow(hit.rect.center)
  253.             all_sprites.add(pow)
  254.             powerups.add(pow)
  255.         newmob()
  256.  
  257.     hits = pygame.sprite.spritecollide(player, mobs, True, pygame.sprite.collide_circle)
  258.     for hit in hits:
  259.         player.shield -= 20
  260.         newmob()
  261.         if player.shield <= 0:
  262.             player.hide()
  263.             player.lives -= 1
  264.             player.shield = 100
  265.  
  266.     hits = pygame.sprite.spritecollide(player, powerups, True)
  267.     for hit in hits:
  268.         if hit.type == 'shield':
  269.             player.shield += random.randrange(10, 30)
  270.             if player.shield >= 100:
  271.                 player.shield = 100
  272.         if hit.type == 'gun':
  273.             player.powerup()
  274.  
  275.     hits = pygame.sprite.spritecollide(player, Boss, True)
  276.     for hit in hits:
  277.         player.lives = 0
  278.  
  279.     hits = pygame.sprite.spritecollide(Boss, bullets, True)
  280.     for hit in hits:
  281.         boss.hp -= 10
  282.         if boss.hp == 0:
  283.             game_over = True
  284.  
  285.     if player.lives == 0:
  286.         game_over = True
  287.  
  288.  
  289.     screen.fill(Black)
  290.     screen.blit(background, background_rect)
  291.     all_sprites.draw(screen)
  292.     draw_text(screen, str(score), 18, Width / 2, 10)
  293.     draw_lives(screen, Width - 100, 5, player.lives, player_mini_img)
  294.     draw_shield_bar(screen, 5, 5, player.shield)
  295.     pygame.display.flip()
  296.  
  297. pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement