Ship Shooting

mail@pastecode.io avatar
unknown
python
2 years ago
7.4 kB
2
Indexable
Never
import cv2
import numpy as np
import keyboard


# Set the speed for each spaceship
spaceship1_speed = 10
spaceship2_speed = 20
spaceship3_speed = 30

# Ask the player to choose a spaceship
print("Choose a spaceship P1 (1, 2, or 3):")
choice = input()

# Load the selected spaceship image and speed
if choice == "1":
    ship1 = cv2.imread("spaceship1.png")
    speed = spaceship1_speed
elif choice == "2":
    ship1 = cv2.imread("spaceship2.png")
    speed = spaceship2_speed
elif choice == "3":
    ship1 = cv2.imread("spaceship3.png")
    speed = spaceship3_speed


# Ask the player to choose a spaceship
print("Choose a spaceship P2 (1, 2, or 3):")
choice = input()

# Load the selected spaceship image and speed
if choice == "1":
    ship2 = cv2.imread("spaceship1.png")
    speed = spaceship1_speed
elif choice == "2":
    ship2 = cv2.imread("spaceship2.png")
    speed = spaceship2_speed
elif choice == "3":
    ship2 = cv2.imread("spaceship3.png")
    speed = spaceship3_speed


#Load Laser assets
laser  = cv2.imread('./assets/bullet.png')

# Load the background image
bg = cv2.imread('./assets/background.png')

# Create a window to display the game
cv2.namedWindow('Space Game', cv2.WINDOW_NORMAL)

# Define the starting position of the spaceship
ship1_x = 10
ship1_y = 200

# Define the starting position of the spaceship
ship2_x = 600
ship2_y = 200
# Define the key variable
key = None


def move_ship_up(ship, gravity, acceleration):
    # Get the height and width of the ship image
    height, width = ship.shape[:2]
    # Calculate the new position of the ship
    new_y = ship_y - acceleration + gravity
    if new_y < 0:
        new_y = 0
    elif new_y + height > screen_height:
            new_y = screen_height - height
    # Update the ship's position
    ship_y = new_y
    # Return the updated ship image
    return ship


def move_ship_down(ship, gravity, acceleration):
    # Get the height and width of the ship image
    height, width = ship.shape[:2]
    # Calculate the new position of the ship
    new_y = ship_y - acceleration + gravity
    if new_y < 0:
        new_y = 0
    elif new_y + height > screen_height:
        new_y = screen_height - height
    # Update the ship's position
    ship_y = new_y
    # Return the updated ship image
    return ship


def shoot_bullet(bullets, ship_x, ship_y):
    # Load the bullet image
    bullet_image = cv2.imread("assets/bullet.png")
    # Create a new bullet object
    bullet = {
        "image": bullet_image,
        "x": ship_x,
        "y": ship_y,
        "speed": 10
    }
    # Add the bullet to the list of bullets
    bullets.append(bullet)
    # Return the updated list of bullets
    return bullets


def activate_shield(player, shield_image):
    # Set the shield active flag to true
    player["shield_active"] = True
    # Set the start time of the shield
    player["shield_start_time"] = time.time()
    # Set the shield image for the player
    player["shield_image"] = shield_image
def deactivate_shield(player):
    # Set the shield active flag to false
    player["shield_active"] = False
    # Set the shield image for the player to None
    player["shield_image"] = None

# Blur the player's ship while the shield is active
if player["shield_active"]:
    player["image"] = cv2.blur(player["image"], (5, 5))


def update_bullets(bullets, player1, player2):
    # Iterate over the bullets and update their positions
    for bullet in bullets:
        bullet["x"] += bullet["speed"]
    # Check if the bullet has collided with the opponent's ship
    if not player2["shield_active"]:
        if bullet["x"] > player2["x"] and bullet["x"] < player2["x"] + player2["width"] and \
           bullet["y"] > player2["y"] and bullet["y"] < player2["y"] + player2["height"]:
            # Reduce the opponent's hitpoints
            player2["hitpoints"] -= 1
            # Check if the opponent's ship is destroyed
            if player2["hitpoints"] <= 0:
                # Show the winning message
                print("Player 1 wins!")
                # Remove the bullet
                bullets.remove(bullet)

    if not player1["shield_active"]:
        if bullet["x"] > player1["x"] and bullet["x"] < player1["x"] + player1["width"] and \
           bullet["y"] > player1["y"] and bullet["y"] < player1["y"] + player1["height"]:
            # Reduce the opponent's hitpoints
            player1["hitpoints"] -= 1
            # Check if the opponent's ship is destroyed
            if player1["hitpoints"] <= 0:
                # Show the winning message
                print("Player 2 wins!")
                # Remove the bullet
                bullets.remove(bullet)
        # Return the updated list of bullets

        return bullets

def explode(spaceship):
    # Create a list to store the explosion animation frames
    frames = []

    # Scale the spaceship image up to create the initial "expanding" effect
    explosion = cv2.resize(spaceship, (spaceship.shape[1] * 2, spaceship.shape[0] * 2))

    # Add the first frame to the list of animation frames
    frames.append(explosion)

    # Apply image filters to create the explosion effect
    for i in range(10):
        explosion = cv2.GaussianBlur(explosion, (5, 5), 0)
        explosion = cv2.addWeighted(explosion, 0.6, np.zeros(spaceship.shape, spaceship.dtype), 0.4, 0)
        frames.append(explosion)

    # Return the list of animation frames
    return frames

# Generate the explosion animation
frames = explode(spaceship)

# Display the animation on the screen
for frame in frames:
    cv2.imshow("Explosion", frame)
    cv2.waitKey(100)


# Define the starting position of the spaceship
ship1_x = 10
ship1_y = 200

# Define the starting position of the spaceship
ship2_x = 600
ship2_y = 200

# Create a window to display the game
cv2.namedWindow('Space Game', cv2.WINDOW_NORMAL)

# Loop until the user closes the game window
while True:
    # Check if the player 1 pressed the up arrow key
    if keyboard.is_pressed('up'):
        # Move the spaceship up
        move_ship_up(ship1, gravity, acceleration)
        ship1_y -= 10
    # Check if the player 1 pressed the down arrow key
    elif keyboard.is_pressed('down'):
        # Move the spaceship down
        move_ship_down(ship1, gravity, acceleration)
        ship1_y += 10
    # Check if the player 1 pressed the space key
    elif keyboard.is_pressed('shift'):
        # Shoot a bullet
        shoot_bullet(bullets, ship1_x, ship1_y)

    elif keyboard.is_pressed('x'):
        # Shoot a bullet
        activate_shield(ship2, shield_image)

    # Check if the player 2 pressed the w key
    if keyboard.is_pressed('w'):
        # Move the spaceship up
        move_ship_up(ship2, gravity, acceleration)
        ship2_y -= 10
    # Check if the player 2 pressed the s key
    elif keyboard.is_pressed('s'):
        # Move the spaceship down
        move_ship_down(ship2, gravity, acceleration)
        ship2_y += 10
    # Check if the player 2 pressed the d key
    elif keyboard.is_pressed('space'):
        # Shoot a bullet
        shoot_bullet(bullets, ship2_x, ship2_y)

    elif keyboard.is_pressed('ctrl'):
        # Shoot a bullet
        activate_shield(ship2, shield_image)


    # Update the game screen
    update_game_screen(ship1, ship1_x, ship1_y, ship2, ship2_x, ship2_y, bullets, bg)

    # Check if the user pressed the 'q' key to quit the game
    if keyboard.is_pressed('q'):
        break