Advertisement
Guest User

Untitled

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