diff --git a/__pycache__/catcher.cpython-311.pyc b/__pycache__/catcher.cpython-311.pyc index a8fe93a..978f128 100644 Binary files a/__pycache__/catcher.cpython-311.pyc and b/__pycache__/catcher.cpython-311.pyc differ diff --git a/__pycache__/fruit.cpython-311.pyc b/__pycache__/fruit.cpython-311.pyc index 49fc690..f71363c 100644 Binary files a/__pycache__/fruit.cpython-311.pyc and b/__pycache__/fruit.cpython-311.pyc differ diff --git a/__pycache__/manager.cpython-311.pyc b/__pycache__/manager.cpython-311.pyc new file mode 100644 index 0000000..783fdfe Binary files /dev/null and b/__pycache__/manager.cpython-311.pyc differ diff --git a/catcher.py b/catcher.py index 165f4ed..a93dedd 100644 --- a/catcher.py +++ b/catcher.py @@ -1,11 +1,18 @@ +from random import randint + class CatcherPiece: character = "-" color = "white_on_indigo" def __init__(self, position): self.position = position + def play_turn(self, game): + fruit = game.get_agent_by_name("fruit") + if new_position == fruit.position: + game.state['Score'] += 1 + class Catcher: - width = 7 + width = 6 display = False pieces = [] name = "catcher" diff --git a/fruit.py b/fruit.py index 59ca2dc..2c76f43 100644 --- a/fruit.py +++ b/fruit.py @@ -1,71 +1,66 @@ +from random import randint + +SHAPE_DEFINITIONS = [ + [(0,0)], + [(0, 0), (1, 0), (0, 1), (1, 1)], +] + class FruitPiece: character = "@" color = "green_on_indigo" + display = True def __init__(self, position): self.position = position class Fruit: width = 2 - height = 2 + height = 1 display = False pieces = [] + name = "fruit" character = "@" color = "green_on_indigo" - def __init__(self, position): + def __init__(self, position, game, shape_offsets): self.position = position + self.blocks = {} + for shape in shape_offsets: + self.create_shape(game, offset) def play_turn(self, game): - if not self.pieces: - self.create_pieces(game) - if game.turn_number % 2 == 0: + if game.turn_number % 3 == 0: x, y = self.position - if y == 24: + if y == 29: game.remove_agent(self) + game.state['Score'] -= 3 else: - catcher = game.get_agent_by_name("Player") + catcher = game.get_agent_by_name("catcher") new_position = (x, y + 1) if new_position == catcher.position: - catcher.explode() - game.end() + game.remove_agent(self) + game.state['Score'] += 1 else: self.position = new_position - def create_pieces(self, game): + def create_shape(self, game, offset): x, y = self.position - self.pieces = [] - for i in range(self.width): - piece = FruitPiece((x + i, y)) - self.pieces.append(piece) - game.add_agent(piece) - for i in range(self.height): - piece = FruitPiece((x, y + i)) - self.pieces.append(piece) - game.add_agent(piece) + ox, oy = offset + fruit = Fruit((x + ox, y + oy)) + self.fruits[offset] = fruit + game.add_agent(fruit) def update_piece_positions(self): - if game.turn_number % 2 == 0: + if game.turn_number % 3 == 0: self.set_color() x, y = self.position - if y == HEIGHT - 1: + if y == 29: game.remove_agent(self) + game.state['Score'] -= 3 else: - ship = game.get_agent_by_name("Player") - new_position = (x, y - 1) - if new_position == ship.position: - ship.explode() - game.end() + catcher = game.get_agent_by_name("catcher") + new_position = (x, y + 1) + if new_position == catcher.position: + game.remove_agent(self) + game.state['Score'] += 1 else: - self.position = new_position - - -class FruitSpawner: - display = False - - def play_turn(self, game): - if self.should_spawn_fruit(game.turn_number): - asteroid = Fruit((randint(0, WIDTH - 1), 0)) - game.add_agent(fruit) - - def should_spawn_fruit(self, turn_number): - return randint(0, 1000) < turn_number \ No newline at end of file + self.position = new_position \ No newline at end of file diff --git a/game.py b/game.py index 7b47540..1de0f9c 100644 --- a/game.py +++ b/game.py @@ -1,20 +1,16 @@ from random import randint from retro.game import Game -from retro.graph import Graph from catcher import Catcher -from fruit import Fruit +from manager import FruitManager -g = Graph() -g.get_or_create_edge(26, 10, 26, 22) -agents = g.get_agents() -for agent in agents: - agent.color = "white_on_indigo" +WIDTH = 27 +HEIGHT = 30 agents = [ - Catcher((14, 24)), - Fruit((14, 2)), + Catcher((11, 29)), + FruitManager(), ] state = {'Score': 0} -game = Game(agents, state, board_size=(35, 25), framerate=24, color="white_on_indigo") +game = Game(agents, state, board_size=(WIDTH, HEIGHT), framerate=24, color="white_on_indigo") game.play() \ No newline at end of file diff --git a/manager.py b/manager.py new file mode 100644 index 0000000..a69fe37 --- /dev/null +++ b/manager.py @@ -0,0 +1,17 @@ +from fruit import Fruit, SHAPE_DEFINITIONS +from random import choice +from retro.errors import AgentNotFoundByName + +class FruitManager: + + display = False + + def play_turn(self, game): + try: + game.get_agent_by_name("fruit") + except AgentNotFoundByName: + self.create_piece(game) + + def create_piece(self, game): + fruit = Fruit((14, 1), game, choice(SHAPE_DEFINITIONS)) + game.add_agent(fruit) \ No newline at end of file diff --git a/nav.py b/nav.py index 518baf9..07e55ef 100644 --- a/nav.py +++ b/nav.py @@ -2,7 +2,7 @@ from random import randint from retro.game import Game HEIGHT = 25 -WIDTH = 2 +WIDTH = 4 class Spaceship: """A player-controlled agent which moves left and right, dodging asteroids. diff --git a/poetry.lock b/poetry.lock index d8610e3..4ef7f79 100644 --- a/poetry.lock +++ b/poetry.lock @@ -50,14 +50,14 @@ ansicon = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "retro-games" -version = "1.1.1" +version = "1.1.3" description = "A simple framework for Terminal-based games" optional = false python-versions = "<4.0,>=3.10" groups = ["main"] files = [ - {file = "retro_games-1.1.1-py3-none-any.whl", hash = "sha256:2b2eac8c2667c69f1dd90c083a0f58b948e6fdecb184720133b819fa78f8a57f"}, - {file = "retro_games-1.1.1.tar.gz", hash = "sha256:67ce475191f78d13148028de17b97de099226c4c581d5cf811cd9dfc7f5bb420"}, + {file = "retro_games-1.1.3-py3-none-any.whl", hash = "sha256:4bdd27241b5cb3ee72e69a042d301ff58df2a2ade7e3c29400a538fa54e30148"}, + {file = "retro_games-1.1.3.tar.gz", hash = "sha256:4f91ff725e551820aa4e30c12c0264e2da41967ed34252122b7136bc2a8ed311"}, ] [package.dependencies]