From 3a2fdf30f04320258e9bb491a621714e225227ec Mon Sep 17 00:00:00 2001 From: jbayati Date: Tue, 18 Nov 2025 09:33:55 -0500 Subject: [PATCH] I didnt understand this well, I kind of understood how you did it, but most of it is confusing because I. Did. Not. Learn. ANY. OF. THIS. --- __pycache__/asteroid.cpython-311.pyc | Bin 0 -> 1281 bytes __pycache__/asteroid_spawner.cpython-311.pyc | Bin 0 -> 1573 bytes __pycache__/spaceship.cpython-311.pyc | Bin 0 -> 1360 bytes asteroid.py | 18 +++++++++++++++++ asteroid_spawner.py | 18 +++++++++++++++++ nav_game.py | 9 +++++++++ spaceship.py | 20 +++++++++++++++++++ 7 files changed, 65 insertions(+) create mode 100644 __pycache__/asteroid.cpython-311.pyc create mode 100644 __pycache__/asteroid_spawner.cpython-311.pyc create mode 100644 __pycache__/spaceship.cpython-311.pyc diff --git a/__pycache__/asteroid.cpython-311.pyc b/__pycache__/asteroid.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27d8512cc0dc22ed9dcd20d628a7d286b7628765 GIT binary patch literal 1281 zcmZuw%}X0W6rb6T7>#0VtdUx31bf(n#!#h~S`cjgfLe+@g~G6AR$WbY<788tu%ZVK zY3U(~Md>MpVlDQM(I6Q1B=qDhB|UlSn@zICrf;$@v+v_Kzj^QNx2~=Z1fot1==%af zKlw{jq{gNefz2Tj&E6sm(+z znl*ImQ8cM85vEzpjH(T0qv@RECqxG~A^Dyr;nAka&kyVZwSy}Ck%IKGs{pG826XF2 z{5I~5`k+LI$i{0t#1)G3K${BdZUtE0Mr+M7qBmgM61GHJw3=;!94h9aeU140HZF1G z76BYD=NJ%AJyZ-0T?7s#xg`k4!kOS(7Pe$twxz!e8!Y+&jTgT~j=^&3 zSsN$I&`*yI=i>HMUbyBZxaQH<+zm}#)zeCw6R@((AVxN|q%pV0j&Jta+|2B2rMv_pE5vKMqkdsN!R7F8B%$#qS)PW8K`)X=t0IIZ_#Zn}{on zH`!@VC)FI`MDlmMG4N~w2+4c~1#=MSz6cB)spo;gQmh;pJ_`(2Lg9nS_tS-`!bYV# z`04r4tG)RT+lB2)u=g^kl!MC2@DJrYIDQcvKWqN3!ULD#k#czCWcfTiaS@&l58yElI@Uv$^i@K|yB;6)Ku^)Bjs2qYN) zHFWuEP#;Y|hp_>c;=1PVy;>fQ=7^dtOz< U7*{)bFu=B|U)=WlKMoi84<;rg1^@s6 literal 0 HcmV?d00001 diff --git a/__pycache__/asteroid_spawner.cpython-311.pyc b/__pycache__/asteroid_spawner.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0535199153fb51cf1448db1756567b63d1dd3c75 GIT binary patch literal 1573 zcmZuxL2DaF6rP#gmDiGNrIbWYL~A+N1+|GqD6Mlap@!7yNj>-`T86b|W38>#+Ow-V z7HjH54sHoFH~Z*I(}eti9!r0L6c#EL0)<|hn~HPFsqf8dMdV~O`{vD?H{ZN@-y8il zGm|CI{`{ikJYt0WgOjxBBjx-yC?`Y^L0iP7bxKiZE#_) zQa6MSGLvA(g%oLH*V=E}a=kG=A3#vo;5+|VA%^rjupF{OEo33#U`v`H5GSocV7X1t zl7jC$B4}3hSoiJL{WzN#eWz>3hFXdqlfI9@7%r~e}eVA0G!%06D{nI-6vSvuY8o8@HIH%o(D;ji4%i`>$gh(7tUpIeD? zD?`GjmtGdrrw2_?tog(l522Yp1vS z`Nb%|*h~A+004y|FF_0wwSxCnwel$_CnOj%3k*`hCK(Iq4tNoKNm@;1+W8kYO9ZGe zl`MG$bRS6=B}iTdy}NWVHSgsGUHu}6Bl5CvV!tpS73R-Adr`RAGjFQ!Yrrl% zoHlU6d7S0k^+czIdY<#Wj@25iObN$F0wgA1UPFQS&xk@%Pt8jzpkEI5a|9BH2Y%;m`!BQYeA8IW$~wBSxFuNxX5qYi2j3 zw$@b+9Na2WU4&%RlY2?2@(=XSh${}OIU)7L%~enjIrYtMc1uZTJkRfA-tWD6@9nRJ zLKeaL=9BkrO-ATXAtXyVVUEhc43LEGAPYS~7T%W-I)D?e8nUDnq|0Wa5dZi@IJyGN z08v!K7OF`WuE~~EQ!M!js;QO&biz`>dxB?HT82rzy4~W6pvU;3nZ^JR$SyiZl?XAw zt6=R)T{!^M4)6gWci=VaQh*5DiI;^$Zp*I))N7HIj=9!yJ=?ckM^_*g-CF0_HP>Jk z@$3%extQOvEx*q5u~4V>M&0*BMar;_m#THQNvoS{M%(c1>LT?TzT2ucjfU-PkR98v z6VtV5wYg(nuWmcG|8aH8SR;)3%&mIKLo2N|*9ft}PDtlmT7XKT%RoHuDv(_i&Q?a+ zOfT184KK{Tz@rQLi}~MYMsuGYPS5w0y+RN65!^(kC{(i2qWuk;0SeG&VnI>)Tv32CQ#pPB={ynnfeK4AI?Fl!7!#P>Cu&CUEyW7JT(dnwn=QZ1W$IY^1QQ<%&opS;gGM$eS2lzL{+8o5&pUL7 zB$MS$z)dkKxv)Gl{OlKX_~?13pYP{iy)6R5kKG@-&sRsqYcGq}#z-k# z4ol|;3r`n@AB;+sm!--W$!9Nzvmf;rpMBMb{c37@u=I54r+d%t^`kv5q5MqJq5|X11KCY?m^-_>7*3XU?~WBoT^OU3XgL)!I!$6=fw`>X82gF{Ao7ml9c%M( hy0_Sepc5nN-2^h0F~;L;2?OkD@|V!P`5!|B{14;QL@WRR literal 0 HcmV?d00001 diff --git a/asteroid.py b/asteroid.py index 257354b..02bcf6b 100644 --- a/asteroid.py +++ b/asteroid.py @@ -2,3 +2,21 @@ # ------------ # By MWC Contributors # This module defines an asteroid agent class. +class Asteroid: + character = 'O' + + def __init__(self, position): + self.position = position + + def play_turn(self, game): + if game.turn_number % 2 == 0: + x, y = self.position + if y == HEIGHT - 1: + game.remove_agent_by_name(self.name) + 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 diff --git a/asteroid_spawner.py b/asteroid_spawner.py index 92e542d..f6f10aa 100644 --- a/asteroid_spawner.py +++ b/asteroid_spawner.py @@ -2,3 +2,21 @@ # ------------------- # By MWC Contributors # 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 \ No newline at end of file diff --git a/nav_game.py b/nav_game.py index 191d83d..26ba0f5 100644 --- a/nav_game.py +++ b/nav_game.py @@ -2,3 +2,12 @@ # ------------ # By MWC Contributors # This class implements a simple game where a spaceship avoids asteroids. +from retro.game import Game +from spaceship import Spaceship +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() diff --git a/spaceship.py b/spaceship.py index 9f3552a..3802f1c 100644 --- a/spaceship.py +++ b/spaceship.py @@ -2,3 +2,23 @@ # ------------ # By MWC Contributors # This module defines a spaceship agent class. +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"): + 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() \ No newline at end of file