import random from pyscript import document class RPSGame: def __init__(self, best_of = 3): self.user_score = 0 self.ai_score = 0 self.deck = self.build_deck() self.user_hand, self.ai_hand = self.give_cards() self.rounds_to_win = (best_of // 2) + 1 self.update_ui() def build_deck(self): cards = [self.rock, self.paper, self.scissors] deck = [] random.shuffle(cards) for i in range(2): n = random.randint(5, 20) deck = cards[i](deck, n) missing_cards = 52 - len(deck) deck = cards[2](deck, missing_cards) random.shuffle(deck) return deck def rock(self, lst, n): lst.extend(["Rock"] * n) return lst def paper(self, lst, n): lst.extend(["Paper"] * n) return lst def scissors(self, lst, n): lst.extend(["Scissors"] * n) return lst def give_cards(self): return [self.deck.pop(0) for _ in range(3)], [self.deck.pop(0) for _ in range(3)] def battle(self, user_card, ai_card): if user_card == ai_card: return 0 if (user_card == "Rock" and ai_card == "Scissors") or \ (user_card == "Paper" and ai_card == "Rock") or \ (user_card == "Scissors" and ai_card == "Paper"): return 1 return -1 def refresh_hand(self): self.user_hand, self.ai_hand = self.give_cards() print("New cards") print(f"AI cards: {self.ai_hand}") def play_card(self, event): index = int(event.target.getAttribute("index")) #print(f"Button {index} clicked!") # Debugging if index >= len(self.user_hand): return user_card = self.user_hand.pop(index) ai_card = self.ai_hand.pop(random.randint(0, len(self.ai_hand) - 1)) result = self.battle(user_card, ai_card) if result == 1: self.user_score += 1 round_result = f"You win! {user_card} beats {ai_card}." self.refresh_hand() elif result == -1: self.ai_score += 1 round_result = f"AI wins! {ai_card} beats {user_card}." self.refresh_hand() else: round_result = "It's a tie! Try again" if not self.user_hand or not self.ai_hand: self.refresh_hand() if self.user_score < self.rounds_to_win and self.ai_score < self.rounds_to_win: pass else: if self.user_score < self.ai_score: round_result = "You lost noob D:" self.update_ui(round_result) self.disable_buttons() #self.reset_game() return else: round_result = "You won great :D" self.update_ui(round_result) self.disable_buttons() #self.reset_game() return self.update_ui(round_result) def update_ui(self, result_text="Waiting for your move..."): print("Update UI") document.querySelector("#user-score").innerText = str(self.user_score) document.querySelector("#ai-score").innerText = str(self.ai_score) document.querySelector("#result").innerText = result_text document.querySelector("#reset-game").disabled = False for i in range(3): btn = document.querySelector(f"#card-{i}") if i < len(self.user_hand): btn.innerText = self.user_hand[i] btn.disabled = False else: btn.innerText = "?" btn.disabled = True def disable_buttons(self): for i in range(3): btn = document.querySelector(f"#card-{i}") btn.innerText = "?" btn.disabled = True def reset_game(self, event=None): print("Game Reset") self.user_score = 0 self.ai_score = 0 self.deck = self.build_deck() self.user_hand, self.ai_hand = self.give_cards() self.deck_overview() self.update_ui("Game reset! Pick a card to start.") def deck_overview(self): #print(f"{len(self.deck)} Cards left") print(f"{self.deck.count('Rock')} Rock cards") print(f"{self.deck.count('Paper')} Paper cards") print(f"{self.deck.count('Scissors')} Scissors cards") # Start the game game = RPSGame(5) game.deck_overview()