Untitled

 avatar
unknown
plain_text
3 months ago
2.6 kB
9
Indexable
pip install pygameimport pygame
import random
import math

# Init
pygame.init()

# Screen
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Space Shooter")

# Colors
WHITE = (255, 255, 255)
RED = (255, 50, 50)
BLUE = (50, 150, 255)
BLACK = (10, 10, 30)

# Clock
clock = pygame.time.Clock()

# Player
player_pos = [WIDTH // 2, HEIGHT - 60]
player_speed = 6

# Bullets
bullets = []

# Enemies
enemies = []

# Score
score = 0
font = pygame.font.SysFont("Arial", 24)

def draw_player(pos):
    pygame.draw.polygon(screen, BLUE, [
        (pos[0], pos[1] - 20),
        (pos[0] - 15, pos[1] + 20),
        (pos[0] + 15, pos[1] + 20)
    ])

def spawn_enemy():
    x = random.randint(20, WIDTH - 20)
    y = -20
    speed = random.randint(2, 5)
    return [x, y, speed]

def draw_enemy(enemy):
    pygame.draw.circle(screen, RED, (enemy[0], enemy[1]), 15)

def draw_bullet(b):
    pygame.draw.rect(screen, WHITE, (b[0] - 2, b[1], 4, 10))

def check_collision(a, b):
    return math.hypot(a[0] - b[0], a[1] - b[1]) < 20

# Game loop
running = True
spawn_timer = 0

while running:
    clock.tick(60)
    screen.fill(BLACK)

    # Events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bullets.append([player_pos[0], player_pos[1]])

    # Movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_pos[0] > 20:
        player_pos[0] -= player_speed
    if keys[pygame.K_RIGHT] and player_pos[0] < WIDTH - 20:
        player_pos[0] += player_speed

    # Spawn enemies
    spawn_timer += 1
    if spawn_timer > 30:
        enemies.append(spawn_enemy())
        spawn_timer = 0

    # Update bullets
    for b in bullets[:]:
        b[1] -= 8
        if b[1] < 0:
            bullets.remove(b)

    # Update enemies
    for e in enemies[:]:
        e[1] += e[2]
        if e[1] > HEIGHT:
            enemies.remove(e)

    # Collisions
    for e in enemies[:]:
        for b in bullets[:]:
            if check_collision(e, b):
                enemies.remove(e)
                bullets.remove(b)
                score += 1
                break

    # Draw everything
    draw_player(player_pos)

    for b in bullets:
        draw_bullet(b)

    for e in enemies:
        draw_enemy(e)

    # Score display
    text = font.render(f"Score: {score}", True, WHITE)
    screen.blit(text, (10, 10))

    pygame.display.flip()

pygame.quit()
Editor is loading...
Leave a Comment