From 48b75eb0ecae11462e78eb8b2716f14d9a7cb853 Mon Sep 17 00:00:00 2001 From: Supratik Bhowal Date: Sun, 5 Jan 2025 16:51:15 +0530 Subject: [PATCH 1/3] Adding HANGMAN GAME --- src/apps/pages/programs/Games/hangman.py | 149 +++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 src/apps/pages/programs/Games/hangman.py diff --git a/src/apps/pages/programs/Games/hangman.py b/src/apps/pages/programs/Games/hangman.py new file mode 100644 index 00000000..15255e0e --- /dev/null +++ b/src/apps/pages/programs/Games/hangman.py @@ -0,0 +1,149 @@ +import random +import streamlit as st + +HANGMAN_FIGURES = [ + """ + ------ + | | + O | + /|\\ | + / \\ | + | + ========= + """, + """ + ------ + | | + O | + /|\\ | + / | + | + ========= + """, + """ + ------ + | | + O | + /|\\ | + | + | + ========= + """, + """ + ------ + | | + O | + /| | + | + | + ========= + """, + """ + ------ + | | + O | + | | + | + | + ========= + """, + """ + ------ + | | + O | + | + | + | + ========= + """, + """ + ------ + | | + | + | + | + | + ========= + """, +] + +def get_new_word(): + words = ["python", "hangman", "programming", "developer", + "keyboard", "algorithm", "function", "variable", + "iteration", "debugging", "constant", "indentation", + "machine learning", "backend", "frontend", "deep learning", + "tensorflow", "blockchain", "quantum", "data science"] + return random.choice(words) + +def initialize_game_state(): + st.session_state.word = get_new_word() + st.session_state.guessed_word = ["_"] * len(st.session_state.word) + st.session_state.guessed_letters = set() + st.session_state.attempts = 6 + st.session_state.game_over = False + st.session_state.message = "Welcome to Hangman Game!" + st.session_state.guess = "" + st.session_state.play_again_triggered = False + st.session_state.hint_used = False + +def check_guess(guess): + if not guess or len(guess) != 1 or not guess.isalpha(): + return "Please enter a single alphabetic letter." + if guess in st.session_state.guessed_letters: + return f"You already guessed '{guess}'. Try a different letter." + + st.session_state.guessed_letters.add(guess) + + if guess in st.session_state.word: + for i, letter in enumerate(st.session_state.word): + if letter == guess: + st.session_state.guessed_word[i] = guess + return f"Good job! '{guess}' is in the word." + else: + st.session_state.attempts -= 1 + return f"Wrong guess! You have {st.session_state.attempts} attempts left." + +def give_hint(): + if not st.session_state.hint_used: + hint_letter = random.choice([letter for letter in st.session_state.word if letter != "_"]) + for i, letter in enumerate(st.session_state.word): + if letter == hint_letter: + st.session_state.guessed_word[i] = hint_letter + st.session_state.hint_used = True + return f"Here's your hint: The letter '{hint_letter}' is in the word." + else: + return "You've already used your hint." + +def hangman(): + st.title("Hangman Game") + + if "word" not in st.session_state: + initialize_game_state() + + st.write(st.session_state.message) + st.write("Word:", " ".join(st.session_state.guessed_word)) + + st.code(HANGMAN_FIGURES[st.session_state.attempts], language="text") + + if not st.session_state.game_over: + st.session_state.guess = st.text_input("Guess a letter:", value=st.session_state.guess, key="guess_input").lower() + + if st.button("Submit Guess"): + st.session_state.message = check_guess(st.session_state.guess) + st.session_state.guess = "" + + if "_" not in st.session_state.guessed_word: + st.session_state.message = f"\nCongratulations! You've guessed the word correctly: {st.session_state.word}" + st.session_state.game_over = True + elif st.session_state.attempts == 0: + st.session_state.message = f"\nYou've run out of attempts! The word was: {st.session_state.word}" + st.session_state.game_over = True + + if st.button("Get a Hint"): + hint_message = give_hint() + st.session_state.message = hint_message + + if st.session_state.game_over: + if st.session_state.play_again_triggered or st.button("Play Again"): + st.session_state.play_again_triggered = True + initialize_game_state() \ No newline at end of file From 2218fbd69291d3c9768a932ce9fd03cc92e820a0 Mon Sep 17 00:00:00 2001 From: Supratik Bhowal Date: Sun, 5 Jan 2025 17:17:19 +0530 Subject: [PATCH 2/3] Update hangman.py Added Comments to the Hangman file --- src/apps/pages/programs/Games/hangman.py | 25 +++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/apps/pages/programs/Games/hangman.py b/src/apps/pages/programs/Games/hangman.py index 15255e0e..a7c5d7ba 100644 --- a/src/apps/pages/programs/Games/hangman.py +++ b/src/apps/pages/programs/Games/hangman.py @@ -65,9 +65,10 @@ | ========= """, -] +] # Hangman figure for every mistake def get_new_word(): + # Selects a random word from a predefined list of words for the game words = ["python", "hangman", "programming", "developer", "keyboard", "algorithm", "function", "variable", "iteration", "debugging", "constant", "indentation", @@ -76,9 +77,10 @@ def get_new_word(): return random.choice(words) def initialize_game_state(): + # Initializes or resets the game state by defining necessary session variables. st.session_state.word = get_new_word() - st.session_state.guessed_word = ["_"] * len(st.session_state.word) - st.session_state.guessed_letters = set() + st.session_state.guessed_word = ["_"] * len(st.session_state.word) # Placeholder for guessed letters. + st.session_state.guessed_letters = set() # Tracks guessed letters to avoid repeats. st.session_state.attempts = 6 st.session_state.game_over = False st.session_state.message = "Welcome to Hangman Game!" @@ -87,6 +89,7 @@ def initialize_game_state(): st.session_state.hint_used = False def check_guess(guess): + # Validates the guess and updates the game state accordingly. if not guess or len(guess) != 1 or not guess.isalpha(): return "Please enter a single alphabetic letter." if guess in st.session_state.guessed_letters: @@ -95,6 +98,7 @@ def check_guess(guess): st.session_state.guessed_letters.add(guess) if guess in st.session_state.word: + # Update the guessed word if the letter is correct. for i, letter in enumerate(st.session_state.word): if letter == guess: st.session_state.guessed_word[i] = guess @@ -104,6 +108,7 @@ def check_guess(guess): return f"Wrong guess! You have {st.session_state.attempts} attempts left." def give_hint(): + # Provides a hint by revealing a random letter in the word. if not st.session_state.hint_used: hint_letter = random.choice([letter for letter in st.session_state.word if letter != "_"]) for i, letter in enumerate(st.session_state.word): @@ -120,30 +125,36 @@ def hangman(): if "word" not in st.session_state: initialize_game_state() - st.write(st.session_state.message) - st.write("Word:", " ".join(st.session_state.guessed_word)) + st.write(st.session_state.message) # Displays the current status message. + st.write("Word:", " ".join(st.session_state.guessed_word)) # Displays the partially guessed word. - st.code(HANGMAN_FIGURES[st.session_state.attempts], language="text") + st.code(HANGMAN_FIGURES[st.session_state.attempts], language="text") # Displays the current hangman figure. if not st.session_state.game_over: + # Text input for guessing a letter. st.session_state.guess = st.text_input("Guess a letter:", value=st.session_state.guess, key="guess_input").lower() if st.button("Submit Guess"): + # Process the submitted guess and update the game state. st.session_state.message = check_guess(st.session_state.guess) st.session_state.guess = "" if "_" not in st.session_state.guessed_word: + # Checks if the entire word has been guessed correctly. st.session_state.message = f"\nCongratulations! You've guessed the word correctly: {st.session_state.word}" st.session_state.game_over = True elif st.session_state.attempts == 0: + # Ends the game if the player runs out of attempts. st.session_state.message = f"\nYou've run out of attempts! The word was: {st.session_state.word}" st.session_state.game_over = True if st.button("Get a Hint"): + # Provides a hint to the player. hint_message = give_hint() st.session_state.message = hint_message if st.session_state.game_over: + # Handles the "Play Again" functionality. if st.session_state.play_again_triggered or st.button("Play Again"): st.session_state.play_again_triggered = True - initialize_game_state() \ No newline at end of file + initialize_game_state() From a6ea88abeb334a18855f45f4b9b879c808381be7 Mon Sep 17 00:00:00 2001 From: Supratik Bhowal Date: Sun, 5 Jan 2025 17:55:42 +0530 Subject: [PATCH 3/3] Update hangman.py removed all un-necessary comments. --- src/apps/pages/programs/Games/hangman.py | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/apps/pages/programs/Games/hangman.py b/src/apps/pages/programs/Games/hangman.py index a7c5d7ba..b2f76efe 100644 --- a/src/apps/pages/programs/Games/hangman.py +++ b/src/apps/pages/programs/Games/hangman.py @@ -65,10 +65,9 @@ | ========= """, -] # Hangman figure for every mistake +] def get_new_word(): - # Selects a random word from a predefined list of words for the game words = ["python", "hangman", "programming", "developer", "keyboard", "algorithm", "function", "variable", "iteration", "debugging", "constant", "indentation", @@ -79,8 +78,8 @@ def get_new_word(): def initialize_game_state(): # Initializes or resets the game state by defining necessary session variables. st.session_state.word = get_new_word() - st.session_state.guessed_word = ["_"] * len(st.session_state.word) # Placeholder for guessed letters. - st.session_state.guessed_letters = set() # Tracks guessed letters to avoid repeats. + st.session_state.guessed_word = ["_"] * len(st.session_state.word) + st.session_state.guessed_letters = set() st.session_state.attempts = 6 st.session_state.game_over = False st.session_state.message = "Welcome to Hangman Game!" @@ -98,7 +97,6 @@ def check_guess(guess): st.session_state.guessed_letters.add(guess) if guess in st.session_state.word: - # Update the guessed word if the letter is correct. for i, letter in enumerate(st.session_state.word): if letter == guess: st.session_state.guessed_word[i] = guess @@ -125,36 +123,30 @@ def hangman(): if "word" not in st.session_state: initialize_game_state() - st.write(st.session_state.message) # Displays the current status message. - st.write("Word:", " ".join(st.session_state.guessed_word)) # Displays the partially guessed word. + st.write(st.session_state.message) + st.write("Word:", " ".join(st.session_state.guessed_word)) - st.code(HANGMAN_FIGURES[st.session_state.attempts], language="text") # Displays the current hangman figure. + st.code(HANGMAN_FIGURES[st.session_state.attempts], language="text") if not st.session_state.game_over: - # Text input for guessing a letter. st.session_state.guess = st.text_input("Guess a letter:", value=st.session_state.guess, key="guess_input").lower() if st.button("Submit Guess"): - # Process the submitted guess and update the game state. st.session_state.message = check_guess(st.session_state.guess) st.session_state.guess = "" if "_" not in st.session_state.guessed_word: - # Checks if the entire word has been guessed correctly. st.session_state.message = f"\nCongratulations! You've guessed the word correctly: {st.session_state.word}" st.session_state.game_over = True elif st.session_state.attempts == 0: - # Ends the game if the player runs out of attempts. st.session_state.message = f"\nYou've run out of attempts! The word was: {st.session_state.word}" st.session_state.game_over = True if st.button("Get a Hint"): - # Provides a hint to the player. hint_message = give_hint() st.session_state.message = hint_message if st.session_state.game_over: - # Handles the "Play Again" functionality. if st.session_state.play_again_triggered or st.button("Play Again"): st.session_state.play_again_triggered = True initialize_game_state()