Space Invaders- Code
From RoboWiki
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))