generated from mwc/lab_retro
Kathryn Odell-Hamilton
May27, 2024 unit3/lab_retro The lab_retro was straight forward with the instructions and code. I made a few typos while coding that threw errors, but that was good for me to go back and review the code. You also found an error with the file name and too many of one file. That was good to see. I did realize that the Terminal window has to be larger so that the game can be viewed and played, otherwise you'll get an error, "TerminalTooSmall." I understand the concept of setting up class' and agents for the game. I've already watched your "Beast" game video to help each of us to get started with creating our Retro game.
This commit is contained in:
BIN
__pycache__/asteroid.cpython-311.pyc
Normal file
BIN
__pycache__/asteroid.cpython-311.pyc
Normal file
Binary file not shown.
BIN
__pycache__/asteroid_spawner.cpython-311.pyc
Normal file
BIN
__pycache__/asteroid_spawner.cpython-311.pyc
Normal file
Binary file not shown.
BIN
__pycache__/spaceship.cpython-311.pyc
Normal file
BIN
__pycache__/spaceship.cpython-311.pyc
Normal file
Binary file not shown.
19
asteroid.py
19
asteroid.py
@@ -2,3 +2,22 @@
|
|||||||
# ------------
|
# ------------
|
||||||
# By MWC Contributors
|
# By MWC Contributors
|
||||||
# This module defines an asteroid agent class.
|
# This module defines an asteroid agent class.
|
||||||
|
class Asteroid:
|
||||||
|
character = '0'
|
||||||
|
|
||||||
|
def __init__(self, position):
|
||||||
|
self.position = position
|
||||||
|
|
||||||
|
def play_turn(self, game):
|
||||||
|
if game.turn_number % 2 == 0:
|
||||||
|
x, y = self.position
|
||||||
|
board_height = game.board_size[1]
|
||||||
|
if y == board_height - 1:
|
||||||
|
game.remove_agent(self)
|
||||||
|
else:
|
||||||
|
ship = game.get_agent_by_name('ship')
|
||||||
|
new_position = (x, y + 1)
|
||||||
|
if new_position == ship.position:
|
||||||
|
game.end()
|
||||||
|
else:
|
||||||
|
self.position = new_position
|
||||||
|
|||||||
@@ -2,3 +2,22 @@
|
|||||||
# -------------------
|
# -------------------
|
||||||
# By MWC Contributors
|
# By MWC Contributors
|
||||||
# This module defines an AsteroidSpawner agent class.
|
# This module defines an AsteroidSpawner agent class.
|
||||||
|
from random import randint
|
||||||
|
from asteroid import Asteroid
|
||||||
|
|
||||||
|
class AsteroidSpawner:
|
||||||
|
display = False
|
||||||
|
|
||||||
|
def __init__(self, board_size):
|
||||||
|
width, height = board_size
|
||||||
|
self.board_width = width
|
||||||
|
|
||||||
|
def play_turn(self, game):
|
||||||
|
game.state['score'] += 1
|
||||||
|
if self.should_spawn_asteroid(game.turn_number):
|
||||||
|
asteroid = Asteroid((randint(0, self.board_width - 1), 0))
|
||||||
|
game.add_agent(asteroid)
|
||||||
|
|
||||||
|
def should_spawn_asteroid(self, turn_number):
|
||||||
|
return randint(0, 1000) < turn_number
|
||||||
|
|
||||||
2
game.py
2
game.py
@@ -5,4 +5,4 @@ agent = ArrowKeyAgent()
|
|||||||
state = {}
|
state = {}
|
||||||
game = Game([agent], state)
|
game = Game([agent], state)
|
||||||
game.play()
|
game.play()
|
||||||
debug=True
|
|
||||||
|
|||||||
11
nav_game.py
11
nav_game.py
@@ -2,3 +2,14 @@
|
|||||||
# ------------
|
# ------------
|
||||||
# By MWC Contributors
|
# By MWC Contributors
|
||||||
# This class implements a simple game where a spaceship avoids asteroids.
|
# This class implements a simple game where a spaceship avoids asteroids.
|
||||||
|
from retro.game import Game
|
||||||
|
from spaceship import Spaceship
|
||||||
|
from asteroid import Asteroid
|
||||||
|
from asteroid_spawner import AsteroidSpawner
|
||||||
|
|
||||||
|
board_size = (25, 25)
|
||||||
|
ship = Spaceship(board_size)
|
||||||
|
spawner = AsteroidSpawner(board_size)
|
||||||
|
game = Game([ship, spawner], {"score": 0}, board_size=board_size)
|
||||||
|
game.play()
|
||||||
|
|
||||||
|
|||||||
11
nav_game_initial_code.py
Normal file
11
nav_game_initial_code.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# nav_game.py
|
||||||
|
# ------------
|
||||||
|
# By MWC Contributors
|
||||||
|
# This class implements a simple game where a spaceship avoids asteroids.
|
||||||
|
from retro.game import Game
|
||||||
|
from spaceship import Spaceship
|
||||||
|
|
||||||
|
board_size = (25, 25)
|
||||||
|
ship = Spaceship(board_size)
|
||||||
|
game = Game([ship], {"score" : 0}, board_size=board_size)
|
||||||
|
game.play()
|
||||||
71
poetry.lock
generated
71
poetry.lock
generated
@@ -24,13 +24,13 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "babel"
|
name = "babel"
|
||||||
version = "2.14.0"
|
version = "2.15.0"
|
||||||
description = "Internationalization utilities"
|
description = "Internationalization utilities"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"},
|
{file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"},
|
||||||
{file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"},
|
{file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
@@ -196,13 +196,13 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "docutils"
|
name = "docutils"
|
||||||
version = "0.20.1"
|
version = "0.21.2"
|
||||||
description = "Docutils -- Python Documentation Utilities"
|
description = "Docutils -- Python Documentation Utilities"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.9"
|
||||||
files = [
|
files = [
|
||||||
{file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"},
|
{file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"},
|
||||||
{file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"},
|
{file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -224,13 +224,13 @@ sphinx-basic-ng = "*"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "3.6"
|
version = "3.7"
|
||||||
description = "Internationalized Domain Names in Applications (IDNA)"
|
description = "Internationalized Domain Names in Applications (IDNA)"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.5"
|
python-versions = ">=3.5"
|
||||||
files = [
|
files = [
|
||||||
{file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
|
{file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
|
||||||
{file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
|
{file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -246,13 +246,13 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jinja2"
|
name = "jinja2"
|
||||||
version = "3.1.3"
|
version = "3.1.4"
|
||||||
description = "A very fast and expressive template engine."
|
description = "A very fast and expressive template engine."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"},
|
{file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
|
||||||
{file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"},
|
{file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -357,28 +357,27 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pygments"
|
name = "pygments"
|
||||||
version = "2.17.2"
|
version = "2.18.0"
|
||||||
description = "Pygments is a syntax highlighting package written in Python."
|
description = "Pygments is a syntax highlighting package written in Python."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
|
{file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"},
|
||||||
{file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
|
{file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
plugins = ["importlib-metadata"]
|
|
||||||
windows-terminal = ["colorama (>=0.4.6)"]
|
windows-terminal = ["colorama (>=0.4.6)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "requests"
|
name = "requests"
|
||||||
version = "2.31.0"
|
version = "2.32.2"
|
||||||
description = "Python HTTP for Humans."
|
description = "Python HTTP for Humans."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
|
{file = "requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c"},
|
||||||
{file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
|
{file = "requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -442,20 +441,20 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sphinx"
|
name = "sphinx"
|
||||||
version = "7.2.6"
|
version = "7.3.7"
|
||||||
description = "Python documentation generator"
|
description = "Python documentation generator"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.9"
|
python-versions = ">=3.9"
|
||||||
files = [
|
files = [
|
||||||
{file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"},
|
{file = "sphinx-7.3.7-py3-none-any.whl", hash = "sha256:413f75440be4cacf328f580b4274ada4565fb2187d696a84970c23f77b64d8c3"},
|
||||||
{file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"},
|
{file = "sphinx-7.3.7.tar.gz", hash = "sha256:a4a7db75ed37531c05002d56ed6948d4c42f473a36f46e1382b0bd76ca9627bc"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
alabaster = ">=0.7,<0.8"
|
alabaster = ">=0.7.14,<0.8.0"
|
||||||
babel = ">=2.9"
|
babel = ">=2.9"
|
||||||
colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
|
colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""}
|
||||||
docutils = ">=0.18.1,<0.21"
|
docutils = ">=0.18.1,<0.22"
|
||||||
imagesize = ">=1.3"
|
imagesize = ">=1.3"
|
||||||
Jinja2 = ">=3.0"
|
Jinja2 = ">=3.0"
|
||||||
packaging = ">=21.0"
|
packaging = ">=21.0"
|
||||||
@@ -468,11 +467,12 @@ sphinxcontrib-htmlhelp = ">=2.0.0"
|
|||||||
sphinxcontrib-jsmath = "*"
|
sphinxcontrib-jsmath = "*"
|
||||||
sphinxcontrib-qthelp = "*"
|
sphinxcontrib-qthelp = "*"
|
||||||
sphinxcontrib-serializinghtml = ">=1.1.9"
|
sphinxcontrib-serializinghtml = ">=1.1.9"
|
||||||
|
tomli = {version = ">=2", markers = "python_version < \"3.11\""}
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
docs = ["sphinxcontrib-websupport"]
|
docs = ["sphinxcontrib-websupport"]
|
||||||
lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"]
|
lint = ["flake8 (>=3.5.0)", "importlib_metadata", "mypy (==1.9.0)", "pytest (>=6.0)", "ruff (==0.3.7)", "sphinx-lint", "tomli", "types-docutils", "types-requests"]
|
||||||
test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"]
|
test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=6.0)", "setuptools (>=67.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sphinx-basic-ng"
|
name = "sphinx-basic-ng"
|
||||||
@@ -585,6 +585,17 @@ lint = ["docutils-stubs", "flake8", "mypy"]
|
|||||||
standalone = ["Sphinx (>=5)"]
|
standalone = ["Sphinx (>=5)"]
|
||||||
test = ["pytest"]
|
test = ["pytest"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tomli"
|
||||||
|
version = "2.0.1"
|
||||||
|
description = "A lil' TOML parser"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
|
||||||
|
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "urllib3"
|
name = "urllib3"
|
||||||
version = "2.2.1"
|
version = "2.2.1"
|
||||||
|
|||||||
21
spaceship.py
21
spaceship.py
@@ -2,3 +2,24 @@
|
|||||||
# ------------
|
# ------------
|
||||||
# By MWC Contributors
|
# By MWC Contributors
|
||||||
# This module defines a spaceship agent class.
|
# This module defines a spaceship agent class.
|
||||||
|
class Spaceship:
|
||||||
|
name = "ship"
|
||||||
|
character = 'v'
|
||||||
|
|
||||||
|
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"):
|
||||||
|
if keystroke.name == "KEY_LEFT":
|
||||||
|
new_position = (x - 1, y)
|
||||||
|
else:
|
||||||
|
new_position = (x + 1, y)
|
||||||
|
if game.on_board(new_position):
|
||||||
|
if game.is_empty(new_position):
|
||||||
|
self.position = new_position
|
||||||
|
else:
|
||||||
|
game.end()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user