# ----------------------------------------------------------------------------- # # Balloon Shooter # Language - Python # Modules - pygame, sys, random, math # # Controls - Mouse # # By - Jatin Kumar Mandav # # Website - https://jatinmandav.wordpress.com # # YouTube Channel - https://www.youtube.com/channel/UCdpf6Lz3V357cIZomPwjuFQ # Twitter - @jatinmandav # # ----------------------------------------------------------------------------- import pygame import sys import random from math import * pygame.init() width = 500 height = 500 display = pygame.display.set_mode((width, height)) pygame.display.set_caption("Balloon Shooter") clock = pygame.time.Clock() margin = 100 lowerBound = 100 score = 0 # Colors white = (230, 230, 230) lightBlue = (174, 214, 241) red = (231, 76, 60) lightGreen = (25, 111, 61) darkGray = (40, 55, 71) darkBlue = (21, 67, 96) green = (35, 155, 86) yellow = (244, 208, 63) blue = (46, 134, 193) purple = (155, 89, 182) orange = (243, 156, 18) font = pygame.font.SysFont("Snap ITC", 25) # Balloon Class class Balloon: def __init__(self, speed): self.a = random.randint(30, 40) self.b = self.a + random.randint(0, 10) self.x = random.randrange(margin, width - self.a - margin) self.y = height - lowerBound self.angle = 90 self.speed = -speed self.probPool = [-1, -1, -1, 0, 0, 0, 0, 1, 1, 1] self.length = random.randint(50, 100) self.color = random.choice([red, green, purple, orange, yellow, blue]) # Move balloon around the Screen def move(self): direct = random.choice(self.probPool) if direct == -1: self.angle += -10 elif direct == 0: self.angle += 0 else: self.angle += 10 self.y += self.speed*sin(radians(self.angle)) self.x += self.speed*cos(radians(self.angle)) if (self.x + self.a > width) or (self.x < 0): if self.y > height/5: self.x -= self.speed*cos(radians(self.angle)) else: self.reset() if self.y + self.b < 0 or self.y > height + 30: self.reset() # Show/Draw the balloon def show(self): pygame.draw.line(display, darkBlue, (self.x + self.a/2, self.y + self.b), (self.x + self.a/2, self.y + self.b + self.length)) pygame.draw.ellipse(display, self.color, (self.x, self.y, self.a, self.b)) pygame.draw.ellipse(display, self.color, (self.x + self.a/2 - 5, self.y + self.b - 3, 10, 10)) # Check if Balloon is bursted def burst(self): global score pos = pygame.mouse.get_pos() if onBalloon(self.x, self.y, self.a, self.b, pos): score += 1 self.reset() # Reset the Balloon def reset(self): self.a = random.randint(30, 40) self.b = self.a + random.randint(0, 10) self.x = random.randrange(margin, width - self.a - margin) self.y = height - lowerBound self.angle = 90 self.speed -= 0.002 self.probPool = [-1, -1, -1, 0, 0, 0, 0, 1, 1, 1] self.length = random.randint(50, 100) self.color = random.choice([red, green, purple, orange, yellow, blue]) balloons = [] noBalloon = 10 for i in range(noBalloon): obj = Balloon(random.choice([1, 1, 2, 2, 2, 2, 3, 3, 3, 4])) balloons.append(obj) def onBalloon(x, y, a, b, pos): if (x < pos[0] < x + a) and (y < pos[1] < y + b): return True else: return False # show the location of Mouse def pointer(): pos = pygame.mouse.get_pos() r = 25 l = 20 color = lightGreen for i in range(noBalloon): if onBalloon(balloons[i].x, balloons[i].y, balloons[i].a, balloons[i].b, pos): color = red pygame.draw.ellipse(display, color, (pos[0] - r/2, pos[1] - r/2, r, r), 4) pygame.draw.line(display, color, (pos[0], pos[1] - l/2), (pos[0], pos[1] - l), 4) pygame.draw.line(display, color, (pos[0] + l/2, pos[1]), (pos[0] + l, pos[1]), 4) pygame.draw.line(display, color, (pos[0], pos[1] + l/2), (pos[0], pos[1] + l), 4) pygame.draw.line(display, color, (pos[0] - l/2, pos[1]), (pos[0] - l, pos[1]), 4) def lowerPlatform(): pygame.draw.rect(display, darkGray, (0, height - lowerBound, width, lowerBound)) def showScore(): scoreText = font.render("Balloons Bursted : " + str(score), True, white) display.blit(scoreText, (150, height - lowerBound + 50)) def close(): pygame.quit() sys.exit() def game(): global score loop = True while loop: for event in pygame.event.get(): if event.type == pygame.QUIT: close() if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: close() if event.key == pygame.K_r: score = 0 game() if event.type == pygame.MOUSEBUTTONDOWN: for i in range(noBalloon): balloons[i].burst() display.fill(lightBlue) for i in range(noBalloon): balloons[i].show() pointer() for i in range(noBalloon): balloons[i].move() lowerPlatform() showScore() pygame.display.update() clock.tick(60) game()