Space Invaders- Code

From RoboWiki
Revision as of 21:38, 9 December 2024 by Robot (talk | contribs) (Created page with "Return back to project page: Spike Prime - Space Invaders - Unax Murua, Eric Ayestaran, Leire Sáez de Cortázar |Space Invaders - Unax Murua, Eric Ayestaran, Leire Sáez de...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Return back to project page: Space Invaders - Unax Murua, Eric Ayestaran, Leire Sáez de Cortázar

Python code for the Arrows project:

 
from hub import light_matrix, port
import time, random
import force_sensor

# Constants
GRID_SIZE = 5
LEFT_LIMIT = 0
RIGHT_LIMIT = 4
SHIP_ROW = 4
ship_x = 2
score = 0
enemy_positions = []
bullet_x = -1
bullet_y = -1
game_over = False
enemy_speed = 10
min_enemy_speed = 2
move_timer = 0

def display_game():
    light_matrix.clear()

    for enemy in enemy_positions:
        light_matrix.set_pixel(enemy[0], enemy[1], 50)

    light_matrix.set_pixel(ship_x, SHIP_ROW, 100)

    if bullet_y >= 0:
        light_matrix.set_pixel(bullet_x, bullet_y, 75)

def update_ship_position():
    global ship_x
    force_value_left = force_sensor.force(port.F)
    force_value_right = force_sensor.force(port.D)

    if force_value_right > 5:
        ship_x = min(RIGHT_LIMIT, ship_x + 1)
    elif force_value_left > 5:
        ship_x = max(LEFT_LIMIT, ship_x - 1)

def update_bullet():
    global bullet_x, bullet_y, score
    if bullet_y == -1:
        if force_sensor.force(port.C) > 5:
            bullet_x = ship_x
            bullet_y = SHIP_ROW - 1

    elif bullet_y >= 0:
        for enemy in enemy_positions:
            if enemy[0] == bullet_x and enemy[1] == bullet_y:
                score += 1
                enemy_positions.remove(enemy)
                bullet_y = -1
                return

        bullet_y -= 1

        if bullet_y < 0:
            bullet_y = -1

def check_game_over():
    global game_over
    for enemy in enemy_positions:
        if enemy[1] == SHIP_ROW:
            game_over = True
            break

def move_enemies_down():
    global enemy_positions
    new_positions = []

    for enemy in enemy_positions:
        new_y = enemy[1] + 1
        if new_y < GRID_SIZE:
            new_positions.append((enemy[0], new_y))

    enemy_positions = new_positions

def generate_static_enemies():
    global enemy_positions
    enemy_positions = []
    for _ in range(5):
        x = random.randint(0, GRID_SIZE - 1)
        y = random.randint(0, 1)
        if (x, y) not in enemy_positions:
            enemy_positions.append((x, y))

generate_static_enemies()

while not game_over:
    update_ship_position()
    update_bullet()

    if move_timer >= enemy_speed * 10:
        move_enemies_down()
        check_game_over()
        move_timer = 0

    display_game()
    time.sleep(0.1)
    move_timer += 1

    if len(enemy_positions) == 0:
        generate_static_enemies()
        enemy_speed = max(enemy_speed - 1, min_enemy_speed)

light_matrix.clear()
print("Game Over!")
print("Score: ", score)
light_matrix.write("Score: " + str(score))