diff --git a/README.md b/README.md
index db4c8d7..cdad5be 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,14 @@
# Rock Paper Scissors Card Game
-Play [now](https://codebymrfinchum.pyscriptapps.com/rock-paper-scissors-card-game/latest/).
+Play [now](https://codebymrfinchum.pyscriptapps.com/rock-paper-scissors-card-game/) on pyscriptapps.com or see info on [Gitlab](https://gitlab.com/CodeByMrFinchum/rock-paper-scissor-card-game).
A little game to play the classic Rock Paper Scissors game with a twist.
Instead of freely selecting between Rock, Paper, and Scissors, you get a hand of three cards, potentially with only rocks.
It is a semi-random 52-card deck with an unbalanced distribution of cards, meaning some cards are less likely to occur. For example, only 5 out of 52 cards are stones, so it is very unlikely the other player has a stone. Selecting scissors gives a higher chance of winning.
-At the moment, there are two versions: a Python version for local usage (terminal), `local.py`, and a PyScript version, `main.py`.
-The PyScript version can actually be accessed and played [online](https://codebymrfinchum.pyscriptapps.com/rock-paper-scissors-card-game/) on my [PyScript profile](https://pyscript.com/@codebymrfinchum).
+It is built with PyScript and developed on [PyScript.com](). It is available on my [PyScript profile](https://pyscript.com/@codebymrfinchum) and [Gitlab repo](https://gitlab.com/CodeByMrFinchum/rock-paper-scissor-card-game).
+
+You can also start the program local, download the repository go into the folder and do 'python3 -m http.server' and then open 'http://localhost:8000/' in your browser.
+
+## Acknowledgment
+- Help from ChatGPT
+- Icons are from Flaticon, which are free to use for personal purposes. I also provided attribution in the HTML for the used images.
diff --git a/images/card-back.png b/images/card-back.png
new file mode 100644
index 0000000..cf5f162
Binary files /dev/null and b/images/card-back.png differ
diff --git a/images/paper.png b/images/paper.png
new file mode 100644
index 0000000..70c7085
Binary files /dev/null and b/images/paper.png differ
diff --git a/images/rock-paper-scissors.png b/images/rock-paper-scissors.png
new file mode 100644
index 0000000..b837f73
Binary files /dev/null and b/images/rock-paper-scissors.png differ
diff --git a/images/rock.png b/images/rock.png
new file mode 100644
index 0000000..8c34660
Binary files /dev/null and b/images/rock.png differ
diff --git a/images/scissors.png b/images/scissors.png
new file mode 100644
index 0000000..fa6cbe6
Binary files /dev/null and b/images/scissors.png differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..e30316d
--- /dev/null
+++ b/index.html
@@ -0,0 +1,124 @@
+
+
+
+
+
+ Rock Paper Scissors Card Game
+
+
+
+
+
Rock Paper Scissors Card Game
+
+ Play Rock Paper Scissors with a twist! Use a 52-card deck with an
+ uneven distribution of cards. Both you and the AI get three cards,
+ and the AI selects randomly. The rules follow the classic game, but
+ with an added element of chance!
+
+
Select a card to play against the AI! Best out of 5 game mode.
+
+
+
+
diff --git a/src/main.py b/main.py
similarity index 76%
rename from src/main.py
rename to main.py
index 75450b3..3bc6e9b 100644
--- a/src/main.py
+++ b/main.py
@@ -6,24 +6,10 @@ class RPSGame:
self.user_score = 0
self.ai_score = 0
self.deck = self.build_deck()
- self.user_hand, self.ai_hand = self.give_cards()
+ self.refresh_hand()
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
@@ -36,6 +22,35 @@ class RPSGame:
lst.extend(["Scissors"] * n)
return lst
+ def generate_deck(self):
+ cards = [self.rock, self.paper, self.scissors]
+ deck = []
+
+ random.shuffle(cards) # This is done, so the card types are not added in the same order everytime, is scissors is last everytime it could result in scissors always being low or high since the last card just are all sofar minus 52¨
+ 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 check_deck(self, lst):
+ card_types = ["Rock", "Paper", "Scissors"]
+ for card_type in card_types:
+ if lst.count(card_type) >= 25:
+ return False
+ return True
+
+ def build_deck(self):
+ acceptable_deck = False
+ while not acceptable_deck:
+ deck = self.generate_deck()
+ acceptable_deck = self.check_deck(deck)
+ return deck
+
def give_cards(self):
return [self.deck.pop(0) for _ in range(3)], [self.deck.pop(0) for _ in range(3)]
@@ -52,10 +67,10 @@ class RPSGame:
self.user_hand, self.ai_hand = self.give_cards()
print("New cards")
print(f"AI cards: {self.ai_hand}")
+ print(f"{len(self.deck)} Cards left.")
def play_card(self, event):
index = int(event.target.getAttribute("index"))
- #print(f"Button {index} clicked!") # Debugging
if index >= len(self.user_hand):
return
@@ -80,16 +95,14 @@ class RPSGame:
pass
else:
if self.user_score < self.ai_score:
- round_result = "You lost noob D:"
+ round_result = "You lost D: Better luck next time"
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)
@@ -103,16 +116,18 @@ class RPSGame:
for i in range(3):
btn = document.querySelector(f"#card-{i}")
if i < len(self.user_hand):
- btn.innerText = self.user_hand[i]
+ card_name = self.user_hand[i].lower() # Convert "Rock" -> "rock"
+ btn.style.backgroundImage = f"url('images/{card_name}.png')"
btn.disabled = False
else:
- btn.innerText = "?"
+ btn.style.backgroundImage = "url('images/card-back.png')" # Unknown card
btn.disabled = True
def disable_buttons(self):
+ print("disable button function")
for i in range(3):
btn = document.querySelector(f"#card-{i}")
- btn.innerText = "?"
+ btn.style.backgroundImage = "url('images/card-back.png')"
btn.disabled = True
def reset_game(self, event=None):
@@ -120,13 +135,11 @@ class RPSGame:
self.user_score = 0
self.ai_score = 0
self.deck = self.build_deck()
- self.user_hand, self.ai_hand = self.give_cards()
+ self.refresh_hand()
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")
diff --git a/src/pyscript.toml b/pyscript.toml
similarity index 100%
rename from src/pyscript.toml
rename to pyscript.toml
diff --git a/src/index.html b/src/index.html
deleted file mode 100644
index 45b4a23..0000000
--- a/src/index.html
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
- Rock Paper Scissors Card Game
-
-
-
-
-
Rock Paper Scissors Card Game
-
- Play Rock Paper Scissors with a twist! Use a 52-card deck with an
- uneven distribution of cards. Both you and the AI get three cards,
- and the AI selects randomly. The rules follow the classic game, but
- with an added element of chance!
-
-
Select a card to play against the AI! Best out of 5 game mode.
-
-
Score
-
- You: 0 - AI:
- 0
-
-
-
Waiting for your move...
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/local.py b/src/local.py
deleted file mode 100644
index b6942fb..0000000
--- a/src/local.py
+++ /dev/null
@@ -1,98 +0,0 @@
-import random
-
-class RPSGame:
- def __init__(self, best_of = 3):
- self.deck = self.build_deck()
- self.user_score = 0
- self.ai_score = 0
- self.rounds_to_win = (best_of // 2) + 1
-
- 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 play_cards(self, user_hand, ai_hand):
- while user_hand and ai_hand:
- print(f"\nYour cards: {user_hand}")
-
- while True:
- try:
- user_choice = int(input(f"Select a card (1-{len(user_hand)}): ")) - 1
- if 0 <= user_choice < len(user_hand):
- break
- except ValueError:
- pass
- print("Invalid choice. Try again.")
-
- user_card = user_hand.pop(user_choice)
- ai_card = ai_hand.pop(random.randint(0, len(ai_hand) - 1))
-
- print(f"You played: {user_card}, AI played: {ai_card}")
-
- result = self.battle(user_card, ai_card)
- if result == 1:
- print("You win this round!")
- return 1
- elif result == -1:
- print("AI wins this round!")
- return -1
- else:
- print("It's a tie! Play again with remaining cards.")
-
- print("No cards left, this round is a draw.")
- return 0
-
- def play_game(self):
- while self.user_score < self.rounds_to_win and self.ai_score < self.rounds_to_win and len(self.deck) >= 6:
- user_hand, ai_hand = self.give_cards()
- round_result = self.play_cards(user_hand, ai_hand)
-
- if round_result == 1:
- self.user_score += 1
- elif round_result == -1:
- self.ai_score += 1
-
- print(f"Score - You: {self.user_score}, AI: {self.ai_score}")
-
- if self.user_score > self.ai_score:
- print("\n🎉 You won the match!")
- else:
- print("\n🤖 AI won the match!")
-
-if __name__ == "__main__":
- game = RPSGame(best_of = 3)
- game.play_game()