Files
rock-paper-scissors/game.py
2025-05-02 15:26:46 +03:00

230 lines
9.6 KiB
Python

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()