I added the retro lab code, made 4 python files, and gave the player the ability to move left, right, up, and down.

A recent success that I am proud of is that I was able to give the player the ability to move up, down, left, and right.  When implementing the ability to move up and down it seemed that the code was opposite of what I expected it to be.  I was able to figure out how to implement it the correct way.
This commit is contained in:
jwberent
2025-11-22 19:29:20 -05:00
parent 28274e7a09
commit 45f45a428f
7 changed files with 89 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

9
new.py Normal file
View File

@@ -0,0 +1,9 @@
from retro.game import Game
from person import Spaceship
from spawner import AsteroidSpawner
board_size = (25, 25)
ship = Spaceship(board_size)
spawner = AsteroidSpawner()
game = Game([ship, spawner], {"score": 0,"lives":5}, board_size=board_size)
game.play()

41
path.py Normal file
View File

@@ -0,0 +1,41 @@
class Asteroid:
character = 'O'
def __init__(self, position):
self.position = position
#def play_turn(self, game):
# lives = 5
# width, height = game.board_size
# if game.turn_number % 2 == 0:
# x, y = self.position
# if y == height - 1:
# game.remove_agent(self)
# else:
# ship = game.get_agent_by_name('ship')
# new_position = (x, y + 1)
# if new_position == ship.position:
# lives = lives-1
# game.state["lives"] -=1
# if game.state["lives"] == 0:
# game.end()
#else:
# self.position = new_position
def play_turn(self, game):
lives = 5
width, height = game.board_size
if game.turn_number % 2 == 0:
x, y = self.position
if y == height - 1:
game.remove_agent(self)
else:
ship = game.get_agent_by_name('ship')
new_position = (x, y + 1)
if new_position == ship.position:
lives = lives-1
game.state["lives"] -=1
if game.state["lives"] == 0:
game.end()
else:
self.position = new_position

24
person.py Normal file
View File

@@ -0,0 +1,24 @@
class Spaceship:
name = "ship"
character = '^'
def __init__(self, board_size):
board_width, board_height = board_size
self.position = (board_width // 2, board_height - 1)
def handle_keystroke(self, keystroke, game):
x, y = self.position
if keystroke.name in ("KEY_LEFT", "KEY_RIGHT","KEY_UP", "KEY_DOWN"):
if keystroke.name == "KEY_LEFT":
new_position = (x - 1, y)
if keystroke.name == "KEY_RIGHT":
new_position = (x + 1, y)
if keystroke.name == "KEY_UP":
new_position = (x, y - 1)
if keystroke.name == "KEY_DOWN":
new_position = (x, y + 1)
if game.on_board(new_position):
if game.is_empty(new_position):
self.position = new_position
else:
game.end()

15
spawner.py Normal file
View File

@@ -0,0 +1,15 @@
from random import randint
from path import Asteroid
class AsteroidSpawner:
display = False
def play_turn(self, game):
width, height = game.board_size
game.state['score'] += 1
if self.should_spawn_asteroid(game.turn_number):
asteroid = Asteroid((randint(0, width - 1), 0))
game.add_agent(asteroid)
def should_spawn_asteroid(self, turn_number):
return randint(0, 1000) < turn_number