diff --git a/game.py b/game.py new file mode 100644 index 0000000..382549e --- /dev/null +++ b/game.py @@ -0,0 +1,229 @@ +import random + +texts = { + "ru": { + "welcome": "Добро пожаловать в игру Камень, Ножницы, Бумага!", + "main_menu_title": "--- Главное меню ---", + "main_menu_play": "1 - Начать новую игру", + "main_menu_language": "2 - Выбрать язык", + "main_menu_exit": "3 - Выйти из игры", + "main_menu_prompt": "Введите номер пункта меню: ", + "invalid_menu_input": "Неверный ввод. Пожалуйста, введите 1, 2 или 3.", + "exit_game": "Выход из игры. До свидания!", + "start_game": "\n--- Начинаем игру ---", + "choose_move": "Выберите ваш ход:", + "move_rock": "1 - Камень", + "move_scissors": "2 - Ножницы", + "move_paper": "3 - Бумага", + "move_back_to_menu": "0 - Вернуться в главное меню", + "move_prompt": "Введите номер вашего выбора: ", + "invalid_move_input": "Неверный ввод. Пожалуйста, введите 1, 2, 3 или 0.", + "returning_to_menu": "Возвращаемся в главное меню...", + "computer_chose": "Компьютер выбрал: {}", + "tie": "Ничья!", + "player_wins_round": "Вы выиграли раунд!", + "computer_wins_round": "Компьютер выиграл раунд!", + "score": "Счет: Игрок {} - Компьютер {}", + "invalid_integer_input": "Неверный ввод. Пожалуйста, введите целое число.", + "error_occurred": "Произошла ошибка: {}", + "language_menu_title": "\n--- Выбор языка ---", + "language_menu_russian": "1 - Русский", + "language_menu_english": "2 - English", + "language_menu_back": "0 - Назад в главное меню", + "language_menu_prompt": "Выберите язык: ", + "language_set_russian": "Язык установлен на Русский.", + "language_set_english": "Language set to English.", + "invalid_language_input": "Неверный ввод. Пожалуйста, введите 1, 2 или 0." + }, + "en": { + "welcome": "Welcome to the Rock, Paper, Scissors Game!", + "main_menu_title": "--- Main Menu ---", + "main_menu_play": "1 - Start New Game", + "main_menu_language": "2 - Select Language", + "main_menu_exit": "3 - Exit Game", + "main_menu_prompt": "Enter menu item number: ", + "invalid_menu_input": "Invalid input. Please enter 1, 2 or 3.", + "exit_game": "Exiting game. Goodbye!", + "start_game": "\n--- Starting Game ---", + "choose_move": "Choose your move:", + "move_rock": "1 - Rock", + "move_scissors": "2 - Scissors", + "move_paper": "3 - Paper", + "move_back_to_menu": "0 - Back to Main Menu", + "move_prompt": "Enter the number of your choice: ", + "invalid_move_input": "Invalid input. Please enter 1, 2, 3 or 0.", + "returning_to_menu": "Returning to main menu...", + "computer_chose": "Computer chose: {}", + "tie": "Tie!", + "player_wins_round": "You won the round!", + "computer_wins_round": "Computer won the round!", + "score": "Score: Player {} - Computer {}", + "invalid_integer_input": "Invalid input. Please enter an integer.", + "error_occurred": "An error occurred: {}", + "language_menu_title": "\n--- Language Selection ---", + "language_menu_russian": "1 - Русский", + "language_menu_english": "2 - English", + "language_menu_back": "0 - Back to Main Menu", + "language_menu_prompt": "Select language: ", + "language_set_russian": "Язык установлен на Русский.", + "language_set_english": "Language set to English.", + "invalid_language_input": "Invalid input. Please enter 1, 2 or 0." + } +} + +# Default language +current_language = "en" + +def get_text(key): + """Helper function to get text in the current language.""" + return texts[current_language].get(key, key) # Return key itself if not found + +def get_player_choice_from_number(choice_number): + """ + Converts the number choice to its string representation. + 1 -> rock + 2 -> scissors + 3 -> paper + """ + if choice_number == 1: + return "камень" if current_language == "ru" else "rock" + elif choice_number == 2: + return "ножницы" if current_language == "ru" else "scissors" + elif choice_number == 3: + return "бумага" if current_language == "ru" else "paper" + else: + return None # Invalid number + +def play_game(): + """ + Logic for a single round of the Rock, Paper, Scissors game. + """ + choices = ["камень", "ножницы", "бумага"] if current_language == "ru" else ["rock", "scissors", "paper"] + + player_score = 0 + computer_score = 0 + + print(get_text("start_game")) + + while True: + # Display the number-choice mapping before each turn + print(get_text("choose_move")) + print(get_text("move_rock")) + print(get_text("move_scissors")) + print(get_text("move_paper")) + print(get_text("move_back_to_menu")) + + try: + # Get player input as a number + player_input = int(input(get_text("move_prompt"))) + + # Check if player wants to return to main menu + if player_input == 0: + print(get_text("returning_to_menu")) + return # Exit the play_game function + + # Get player choice string from the number + # We need to map the number to the *current language's* word for the move + player_choice_str = get_player_choice_from_number(player_input) + + # Validate player input number + if player_choice_str is None: + print(get_text("invalid_move_input")) + continue # Ask for input again + + # Get computer choice (always from the base list for logic comparison) + computer_choice_base = random.choice(["камень", "ножницы", "бумага"]) + + # Get the computer choice string in the current language for display + computer_choice_str = get_player_choice_from_number(["камень", "ножницы", "бумага"].index(computer_choice_base) + 1) + + print(get_text("computer_chose").format(computer_choice_str)) + + # Determine the winner using the base (language-agnostic) choices for logic + if player_choice_str == computer_choice_base: + print(get_text("tie")) + elif (player_choice_str == "камень" and computer_choice_base == "ножницы") or \ + (player_choice_str == "ножницы" and computer_choice_base == "бумага") or \ + (player_choice_str == "бумага" and computer_choice_base == "камень"): + print(get_text("player_wins_round")) + player_score += 1 + else: + print(get_text("computer_wins_round")) + computer_score += 1 + + # Display current score + print(get_text("score").format(player_score, computer_score)) + print() # Add an empty line for better readability + + except ValueError: + # Handle non-integer input + print(get_text("invalid_integer_input")) + except Exception as e: + print(get_text("error_occurred").format(e)) + + +def language_menu(): + """ + Menu for selecting the game language. + """ + global current_language # Declare that we are modifying the global variable + + while True: + print(get_text("language_menu_title")) + print(get_text("language_menu_russian")) + print(get_text("language_menu_english")) + print(get_text("language_menu_back")) + + try: + menu_choice = int(input(get_text("language_menu_prompt"))) + + if menu_choice == 1: + current_language = "ru" + print(get_text("language_set_russian")) + elif menu_choice == 2: + current_language = "en" + print(get_text("language_set_english")) + elif menu_choice == 0: + print(get_text("returning_to_menu")) + break # Exit language menu + else: + print(get_text("invalid_language_input")) + + except ValueError: + print(get_text("invalid_integer_input")) + except Exception as e: + print(get_text("error_occurred").format(e)) + + +def main_menu(): + """ + Main menu of the game. + """ + print(get_text("welcome")) + + while True: + print(get_text("main_menu_title")) + print(get_text("main_menu_play")) + print(get_text("main_menu_language")) + print(get_text("main_menu_exit")) + + try: + menu_choice = int(input(get_text("main_menu_prompt"))) + + if menu_choice == 1: + play_game() # Start the game + elif menu_choice == 2: + language_menu() # Go to language selection + elif menu_choice == 3: + print(get_text("exit_game")) + break # Exit the main menu loop + else: + print(get_text("invalid_menu_input")) + except ValueError: + print(get_text("invalid_integer_input")) + except Exception as e: + print(get_text("error_occurred").format(e)) + +# Start the main menu when the script runs +if __name__ == "__main__": + main_menu()