diff --git a/gamefiles/__pycache__/board.cpython-312.pyc b/gamefiles/__pycache__/board.cpython-312.pyc index 9ec0984..75bc6ed 100644 Binary files a/gamefiles/__pycache__/board.cpython-312.pyc and b/gamefiles/__pycache__/board.cpython-312.pyc differ diff --git a/gamefiles/__pycache__/man.cpython-312.pyc b/gamefiles/__pycache__/man.cpython-312.pyc index 0ba4669..b6dcadf 100644 Binary files a/gamefiles/__pycache__/man.cpython-312.pyc and b/gamefiles/__pycache__/man.cpython-312.pyc differ diff --git a/gamefiles/__pycache__/mine.cpython-312.pyc b/gamefiles/__pycache__/mine.cpython-312.pyc index 1641475..668dca0 100644 Binary files a/gamefiles/__pycache__/mine.cpython-312.pyc and b/gamefiles/__pycache__/mine.cpython-312.pyc differ diff --git a/gamefiles/__pycache__/minecounter.cpython-312.pyc b/gamefiles/__pycache__/minecounter.cpython-312.pyc new file mode 100644 index 0000000..3d6fc4c Binary files /dev/null and b/gamefiles/__pycache__/minecounter.cpython-312.pyc differ diff --git a/gamefiles/__pycache__/score.cpython-312.pyc b/gamefiles/__pycache__/score.cpython-312.pyc index 300a288..126266a 100644 Binary files a/gamefiles/__pycache__/score.cpython-312.pyc and b/gamefiles/__pycache__/score.cpython-312.pyc differ diff --git a/gamefiles/__pycache__/snack.cpython-312.pyc b/gamefiles/__pycache__/snack.cpython-312.pyc index 15f627e..2f281a5 100644 Binary files a/gamefiles/__pycache__/snack.cpython-312.pyc and b/gamefiles/__pycache__/snack.cpython-312.pyc differ diff --git a/gamefiles/board.py b/gamefiles/board.py index 767a118..50ca5ae 100644 --- a/gamefiles/board.py +++ b/gamefiles/board.py @@ -2,16 +2,19 @@ from man import Man from snack import Snack from mine import Mine from random import shuffle -from retro import game class Board: - + display = False + snack=False + mine=False + def __init__(self,width, height,num_snacks,num_mines): self.width = width self.height = height self.num_snacks = num_snacks self.num_mines = num_mines + def get_agents(self,num_snacks,num_mines): all_positions = self.get_all_positions() @@ -19,8 +22,51 @@ class Board: man= [Man(all_positions[0])] snacks = [Snack(p) for p in all_positions[1:(num_snacks+1)]] mines = [Mine(p) for p in all_positions[(num_snacks + 2):(num_snacks + num_mines +2)]] - agents = man + snacks + mines + agents = man + snacks + mines + [self] return agents + + def play_turn(self,game): + game.log(game.turn_number) + while self.game_needs_snacks(game): + self.add_snack(game) + while self.game_needs_mines(game): + self.add_mine(game) + + def add_mine(self,game): + all_positions=self.get_all_positions() + shuffle(all_positions) + index =0 + while not game.is_empty(all_positions[index]): + index = index + 1 + mine = Mine(all_positions[index]) + game.add_agent(mine) + + def count_mines(self,game): + mines= [a for a in game.agents if a.mine] + return len(mines) + + def game_needs_mines(self,game): + return self.count_mines(game) < self.num_mines + + + def add_snack(self,game): + all_positions=self.get_all_positions() + shuffle(all_positions) + index =0 + while not game.is_empty(all_positions[index]): + index = index + 1 + snack = Snack(all_positions[index]) + game.add_agent(snack) + + def count_snacks(self,game): + snacks= [a for a in game.agents if a.snack] + return len(snacks) + + def game_needs_snacks(self,game): + return self.count_snacks(game) < self.num_snacks + + + ''' def get_agents(self,num_snacks,num_mines): man = self.get_man(num_snacks,num_mines) diff --git a/gamefiles/man.py b/gamefiles/man.py index f2f3338..bb9a9a4 100644 --- a/gamefiles/man.py +++ b/gamefiles/man.py @@ -17,7 +17,8 @@ direction_vectors = { class Man: character = "&" #try google asci full table?, color = "blue" - #name = "man" + snack=False + mine=False def __init__(self,position): self.position = position @@ -50,7 +51,6 @@ class Man: if obstacle.snack: game.state['Score'] += 1 game.remove_agent(agents[0]) - self.generate_new_snack() else: game.state['Score'] -= 10 game.remove_agent(agents[0]) @@ -61,28 +61,16 @@ class Man: else: self.position = future_position - '''Indicates what happens when the game is over.''' + def die(self,game): + '''Indicates what happens when the game is over.''' game.state["message"] = "Game Over" self.color = "black" game.end() - def get_all_positions(self): - positions=[] - for i in range(width): - for j in range(height): - positions.append((i,j)) - return positions - '''issue here, is_empty is not generating a coordinate positon, - but I am not sure why it is not''' - def generate_new_snack(self): - all_positions=self.get_all_positions() - shuffle(all_positions) - index =0 - while Game.is_empty(all_positions[index]) == False: - index = index + 1 - Snack(all_positions[index]) + + ''' def __init__(self, position): self.position = position diff --git a/gamefiles/mine counter.py b/gamefiles/mine counter.py new file mode 100644 index 0000000..6406dc5 --- /dev/null +++ b/gamefiles/mine counter.py @@ -0,0 +1,28 @@ + + +MAX_MINES = 50 +LEVELS = [ +[5, 10], +[50, 20], +[75, 30], +[100, 40] +] + +def num_mines(score): + for limit, n in LEVELS: + if score < limit: + return n + return MAX_MINES +''' + if score < 5: + num_mines = 10 + if 10 <= score <50: + num_mines = 20 + if 50 <= score <75: + num_mines = 30 + if 75 <= score <100: + num_mines = 40 + #else: + #num_mines = 50 + return num_mines + ''' \ No newline at end of file diff --git a/gamefiles/mine.py b/gamefiles/mine.py index 53573cc..480292a 100644 --- a/gamefiles/mine.py +++ b/gamefiles/mine.py @@ -2,6 +2,7 @@ class Mine: character = "*" color = "green" snack=False + mine=True def __init__(self,position): diff --git a/gamefiles/minecounter.py b/gamefiles/minecounter.py new file mode 100644 index 0000000..6406dc5 --- /dev/null +++ b/gamefiles/minecounter.py @@ -0,0 +1,28 @@ + + +MAX_MINES = 50 +LEVELS = [ +[5, 10], +[50, 20], +[75, 30], +[100, 40] +] + +def num_mines(score): + for limit, n in LEVELS: + if score < limit: + return n + return MAX_MINES +''' + if score < 5: + num_mines = 10 + if 10 <= score <50: + num_mines = 20 + if 50 <= score <75: + num_mines = 30 + if 75 <= score <100: + num_mines = 40 + #else: + #num_mines = 50 + return num_mines + ''' \ No newline at end of file diff --git a/gamefiles/nav_game.py b/gamefiles/nav_game.py index 47a3d9e..fd947fd 100644 --- a/gamefiles/nav_game.py +++ b/gamefiles/nav_game.py @@ -1,7 +1,6 @@ from retro.game import Game from board import Board - -from score import num_mines +from minecounter import num_mines width = 25 height = 25 @@ -14,6 +13,6 @@ board = Board(width,height,num_snacks,num_mines) game = Game( board.get_agents(num_snacks, num_mines), state, - board_size = (width, height) + board_size = (width, height),debug=True ) game.play() \ No newline at end of file diff --git a/gamefiles/score.py b/gamefiles/score.py index f8ce62d..6406dc5 100644 --- a/gamefiles/score.py +++ b/gamefiles/score.py @@ -1,6 +1,19 @@ +MAX_MINES = 50 +LEVELS = [ +[5, 10], +[50, 20], +[75, 30], +[100, 40] +] + def num_mines(score): + for limit, n in LEVELS: + if score < limit: + return n + return MAX_MINES +''' if score < 5: num_mines = 10 if 10 <= score <50: @@ -12,4 +25,4 @@ def num_mines(score): #else: #num_mines = 50 return num_mines - \ No newline at end of file + ''' \ No newline at end of file diff --git a/gamefiles/snack.py b/gamefiles/snack.py index cb33e37..f522c8e 100644 --- a/gamefiles/snack.py +++ b/gamefiles/snack.py @@ -2,6 +2,7 @@ class Snack: character = "o" color = "red" snack=True + mine=False def __init__(self,position): diff --git a/poetry.lock b/poetry.lock index a9b0222..8eb718b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,7 +1,83 @@ # This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. -package = [] + +[[package]] +name = "ansicon" +version = "1.89.0" +description = "Python wrapper for loading Jason Hood's ANSICON" +optional = false +python-versions = "*" +files = [ + {file = "ansicon-1.89.0-py2.py3-none-any.whl", hash = "sha256:f1def52d17f65c2c9682cf8370c03f541f410c1752d6a14029f97318e4b9dfec"}, + {file = "ansicon-1.89.0.tar.gz", hash = "sha256:e4d039def5768a47e4afec8e89e83ec3ae5a26bf00ad851f914d1240b444d2b1"}, +] + +[[package]] +name = "blessed" +version = "1.20.0" +description = "Easy, practical library for making terminal apps, by providing an elegant, well-documented interface to Colors, Keyboard input, and screen Positioning capabilities." +optional = false +python-versions = ">=2.7" +files = [ + {file = "blessed-1.20.0-py2.py3-none-any.whl", hash = "sha256:0c542922586a265e699188e52d5f5ac5ec0dd517e5a1041d90d2bbf23f906058"}, + {file = "blessed-1.20.0.tar.gz", hash = "sha256:2cdd67f8746e048f00df47a2880f4d6acbcdb399031b604e34ba8f71d5787680"}, +] + +[package.dependencies] +jinxed = {version = ">=1.1.0", markers = "platform_system == \"Windows\""} +six = ">=1.9.0" +wcwidth = ">=0.1.4" + +[[package]] +name = "jinxed" +version = "1.3.0" +description = "Jinxed Terminal Library" +optional = false +python-versions = "*" +files = [ + {file = "jinxed-1.3.0-py2.py3-none-any.whl", hash = "sha256:b993189f39dc2d7504d802152671535b06d380b26d78070559551cbf92df4fc5"}, + {file = "jinxed-1.3.0.tar.gz", hash = "sha256:1593124b18a41b7a3da3b078471442e51dbad3d77b4d4f2b0c26ab6f7d660dbf"}, +] + +[package.dependencies] +ansicon = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "retro-games" +version = "1.1.0" +description = "A simple framework for Terminal-based games" +optional = false +python-versions = "<4.0,>=3.10" +files = [ + {file = "retro_games-1.1.0-py3-none-any.whl", hash = "sha256:c621117e4dd528b1e4870d897d00c4365566ab3ba965177e3996ed3c889dd9f8"}, + {file = "retro_games-1.1.0.tar.gz", hash = "sha256:2167b574f42fe1e739b7c9ec75e98a9b76df42e2166376b85559291b3dc58f82"}, +] + +[package.dependencies] +blessed = ">=1.20.0,<2.0.0" + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "53f2eabc9c26446fbcc00d348c47878e118afc2054778c3c803a0a8028af27d9" +content-hash = "2bcb10c06051310c2d2ce4f7b65ed30705765ffe70121fe098b07e32ef9307bc" diff --git a/pyproject.toml b/pyproject.toml index afe5940..ea9c20e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,7 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.10" +retro-games = "^1.1.0" [build-system]