Implemented UI #10

Merged
KylerOlsen merged 11 commits from kyler/ui into master 2025-04-25 10:27:48 -06:00
3 changed files with 37 additions and 3 deletions
Showing only changes of commit b3c6ec9e48 - Show all commits

View File

@ -51,6 +51,9 @@ class Game:
self.__player.new_verse(text) self.__player.new_verse(text)
elif packet_id == 3: elif packet_id == 3:
self.__player.guess_incorrect() self.__player.guess_incorrect()
elif packet_id == 7:
url = network_utilities.unpack_string(self.__server)
self.__player.guess_partial_correct(url)
elif packet_id == 4: elif packet_id == 4:
self.__player.guess_correct() self.__player.guess_correct()
elif packet_id == 5: elif packet_id == 5:
@ -125,6 +128,10 @@ class Player:
if self.__game is not None: if self.__game is not None:
self.__ui.guess_incorrect() self.__ui.guess_incorrect()
def guess_partial_correct(self, url):
if self.__game is not None:
self.__ui.guess_partial_correct(url)
def guess_correct(self): def guess_correct(self):
if self.__game is not None: if self.__game is not None:
self.__ui.guess_correct() self.__ui.guess_correct()

View File

@ -17,6 +17,7 @@ class Game:
__library: Library __library: Library
__current_url: str __current_url: str
__current_url_parts: list[str]
__clients: list[Player] __clients: list[Player]
__round_points: list[int] __round_points: list[int]
__total_scores: list[int] __total_scores: list[int]
@ -27,6 +28,7 @@ class Game:
def __init__(self, library: Library): def __init__(self, library: Library):
self.__library = library self.__library = library
self.__current_url = "" self.__current_url = ""
self.__current_url_parts = []
self.__clients = [] self.__clients = []
self.__round_points = [] self.__round_points = []
self.__total_scores = [] self.__total_scores = []
@ -58,18 +60,27 @@ class Game:
def new_verse(self, url: str, text: str): def new_verse(self, url: str, text: str):
for player in self.__clients: for player in self.__clients:
self.__current_url = url self.__current_url = url
self.__current_url_parts = url.strip('/').split('/')
player.new_verse(text) player.new_verse(text)
def guess_reference(self, url: str, player: Player): def guess_reference(self, url: str, player: Player):
if self.__active and not self.__finished: if self.__active and not self.__finished:
if url == self.__current_url: if url == self.__current_url:
player.guess_correct() player.guess_correct()
self.__round_points[self.__clients.index(player)] = 4
for i, points in enumerate(self.__round_points): for i, points in enumerate(self.__round_points):
self.__total_scores[i] += points self.__total_scores[i] += points
self.__clients[i].verse_guessed( self.__clients[i].verse_guessed(
points, self.__current_url, player.name) points, self.__current_url, player.name)
else: else:
player.guess_incorrect() partially_correct = []
for player_url, current_url in zip(url.strip('/').split('/'), self.__current_url_parts):
if player_url == current_url:
partially_correct.append(current_url)
if partially_correct:
player.guess_partial_correct(f"/{'/'.join(partially_correct)}")
self.__round_points[self.__clients.index(player)] = len(partially_correct)
else: player.guess_incorrect()
def end_game(self): def end_game(self):
self.__finished = True self.__finished = True
@ -121,6 +132,12 @@ class Player:
data = network_utilities.pack_varint(3) data = network_utilities.pack_varint(3)
self.__client.send(data) self.__client.send(data)
def guess_partial_correct(self, url):
print(f">> (7) guess_partial_correct({url})")
data = network_utilities.pack_varint(7)
data += network_utilities.pack_string(url)
self.__client.send(data)
def guess_correct(self): def guess_correct(self):
print(">> (4) guess_correct()") print(">> (4) guess_correct()")
data = network_utilities.pack_varint(4) data = network_utilities.pack_varint(4)

14
ui.py
View File

@ -42,6 +42,10 @@ class UI:
print(val, end='', flush=True) print(val, end='', flush=True)
return None return None
def __reset(self):
self.__buffer = ""
print()
def loop(self): def loop(self):
while not self.__game_over: while not self.__game_over:
self.__player.update() self.__player.update()
@ -84,6 +88,7 @@ class UI:
print(f"{name} Joined the Game") print(f"{name} Joined the Game")
def new_verse(self, text: str): def new_verse(self, text: str):
self.__reset()
self.__in_game = True self.__in_game = True
self.__verse = text self.__verse = text
print(self.__verse) print(self.__verse)
@ -92,6 +97,11 @@ class UI:
print("That guess was incorrect.") print("That guess was incorrect.")
print(self.__verse) print(self.__verse)
def guess_partial_correct(self, url):
try: ref = convert_url(url)
except Exception: ref = url.upper().replace('/','.').strip('.')
print(f"That guess was partially correct: {ref}")
def guess_correct(self): def guess_correct(self):
print("That guess was correct!") print("That guess was correct!")
@ -99,14 +109,14 @@ class UI:
try: ref = convert_url(url) try: ref = convert_url(url)
except Exception: ref = url.upper().replace('/','.').strip('.') except Exception: ref = url.upper().replace('/','.').strip('.')
print( print(
f"The verse has been guessed by {player}.\n" f"\nThe verse has been guessed by {player}.\n"
f"The reference is {ref}.\n" f"The reference is {ref}.\n"
f"You have been awarded {points} points for your guess." f"You have been awarded {points} points for your guess."
) )
def game_over(self, players: list[str], scores: list[int]): def game_over(self, players: list[str], scores: list[int]):
self.__game_over = True self.__game_over = True
print("--- THANKS FOR PLAYING! ---") print("\n--- THANKS FOR PLAYING! ---")
for player, score in players, scores: for player, score in players, scores:
if player == self.__player.name: if player == self.__player.name:
print(f" * {player}: {score} *") print(f" * {player}: {score} *")