generated from mwc/project_game
@chris My fruit offset does not work
This commit is contained in:
Binary file not shown.
Binary file not shown.
BIN
__pycache__/manager.cpython-311.pyc
Normal file
BIN
__pycache__/manager.cpython-311.pyc
Normal file
Binary file not shown.
@@ -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"
|
||||
|
||||
73
fruit.py
73
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
|
||||
self.position = new_position
|
||||
16
game.py
16
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()
|
||||
17
manager.py
Normal file
17
manager.py
Normal file
@@ -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)
|
||||
2
nav.py
2
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.
|
||||
|
||||
6
poetry.lock
generated
6
poetry.lock
generated
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user