Build your shooting game using python
hello coders here I present an intermediate level, customizable and developable shooting game.
here before you run the game select you favorite background and paste link in code the background where the option is there.
here's the source code👇:
import pygame
import random
import sys
# Initialize Pygame
pygame.init()
# Screen dimensions
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
FPS = 60
# Colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# Fonts
FONT = pygame.font.Font(None, 36)
# Game setup
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Shooting Game')
clock = pygame.time.Clock()
# Load images
background_home = pygame.image.load('home_background.jpg')
background_level1 = pygame.image.load('level1_background.jpg')
background_level2 = pygame.image.load('level2_background.jpg')
background_level3 = pygame.image.load('level3_background.jpg')
background_level4 = pygame.image.load('level4_background.jpg')
background_level5 = pygame.image.load('level5_background.jpg')
# Target class
class Target(pygame.sprite.Sprite):
def __init__(self, x, y, speed):
super().__init__()
self.image = pygame.Surface((50, 50))
self.image.fill(RED)
self.rect = self.image.get_rect()
self.rect.center = (x, y)
self.speed = speed
def update(self):
self.rect.x += self.speed
if self.rect.right >= SCREEN_WIDTH or self.rect.left <= 0:
self.speed = -self.speed
# Game loop
def game_loop():
level = 1
shots = 5
score = 0
targets = pygame.sprite.Group()
load_level(level, targets)
while True:
screen.fill(WHITE)
if level == 1:
screen.blit(background_level1, (0, 0))
elif level == 2:
screen.blit(background_level2, (0, 0))
elif level == 3:
screen.blit(background_level3, (0, 0))
elif level == 4:
screen.blit(background_level4, (0, 0))
elif level == 5:
screen.blit(background_level5, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if shots > 0:
shots -= 1
if shoot_target(pygame.mouse.get_pos(), targets):
score += 1
if shots == 0 and len(targets) == 0:
level += 1
if level > 5:
show_end_screen(score)
else:
shots = 5
load_level(level, targets)
targets.update()
targets.draw(screen)
# Draw UI
draw_ui(level, shots, score)
pygame.display.flip()
clock.tick(FPS)
# Shoot target
def shoot_target(position, targets):
for target in targets:
if target.rect.collidepoint(position):
target.kill()
return True
return False
# Load level
def load_level(level, targets):
targets.empty()
if level == 1:
targets.add(Target(100, 300, 2))
elif level == 2:
targets.add(Target(100, 300, 2))
targets.add(Target(400, 200, 2))
elif level == 3:
targets.add(Target(100, 300, 4))
targets.add(Target(400, 200, 4))
elif level == 4:
targets.add(Target(100, 300, 2))
targets.add(Target(400, 200, 2))
targets.add(Target(700, 400, 2))
elif level == 5:
targets.add(Target(100, 300, 4))
targets.add(Target(400, 200, 4))
targets.add(Target(700, 400, 4))
# Draw UI
def draw_ui(level, shots, score):
level_text = FONT.render(f'Level: {level}', True, BLACK)
screen.blit(level_text, (10, 10))
shots_text = FONT.render(f'Shots: {shots}', True, BLACK)
screen.blit(shots_text, (10, 50))
score_text = FONT.render(f'Score: {score}', True, BLACK)
screen.blit(score_text, (10, 90))
# Home screen
def show_home_screen():
while True:
screen.blit(background_home, (0, 0))
title = FONT.render('Shooting Game', True, BLACK)
screen.blit(title, (SCREEN_WIDTH // 2 - title.get_width() // 2, SCREEN_HEIGHT // 4))
start_text = FONT.render('Click to Start', True, BLACK)
screen.blit(start_text, (SCREEN_WIDTH // 2 - start_text.get_width() // 2, SCREEN_HEIGHT // 2))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
return
pygame.display.flip()
clock.tick(FPS)
# End screen
def show_end_screen(score):
while True:
screen.fill(WHITE)
end_text = FONT.render(f'Congratulations! Your Score: {score}', True, BLACK)
screen.blit(end_text, (SCREEN_WIDTH // 2 - end_text.get_width() // 2, SCREEN_HEIGHT // 4))
restart_text = FONT.render('Click to Restart', True, BLACK)
screen.blit(restart_text, (SCREEN_WIDTH // 2 - restart_text.get_width() // 2, SCREEN_HEIGHT // 2))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
show_home_screen()
game_loop()
pygame.display.flip()
clock.tick(FPS)
if __name__ == '__main__':
show_home_screen()
game_loop()
Comments
Post a Comment