Jun-27-2020, 10:25 PM
I've added speech to the game. A little slower but, I think it's kinda cool.
Requires espeak to be installed.
pip install espeak
Requires espeak to be installed.
pip install espeak
#! /usr/bin/env python3 # Do the imports import random as rnd import os from time import sleep as os_sleep from subprocess import call # Check if the os is *nix or windows # if it's windows import colorama and initiate if os.name == 'nt': import colorama colorama.init() else: pass # Define some basic ansi colors red = '\033[31m' yellow = '\033[33m' cyan = '\033[36m' blue = '\033[34m' magenta = '\033[35m' green = '\033[32m' bright_red = '\033[91m' bright_yellow = '\033[33;1m' bright_cyan = '\033[36;1m' bright_blue = '\033[34;1m' bright_magenta = '\033[35;1m' bright_green = '\033[32;1m' # Other ansi sequences underline = '\033[4m' bold = '\033[1m' # Resets all ansi to system default reset = '\033[0m' class Game: def __init__(self): # Set some default options self.player_wins = 0 self.computer_wins = 0 self.ties = 0 self.games_played = 0 self.player_name = '' # Define our choices self.options = ['rock', 'paper', 'scissors'] # Clears the screen so we do not have cluttered text self.clear() # Display the game title print(f'{underline}{bright_blue}Rock Paper Scissors{reset}\n') # Start the game loop call(['espeak', 'What is your name?']) while True: try: # Check if we have a player name. If not ask for one. if not self.player_name: self.player_name = input("What's your name?: ").lower() # This throws an error if player does not enter a name. if not self.player_name: self.clear() call(['espeak', 'Please enter a name.']) print(f'{bright_red}Error!{reset}: {bright_yellow}Please enter a player name.{reset}') continue # Welcome the player to the game and do a countdown to game start else: self.clear() print(f'Hello {bright_cyan}{self.player_name.title()}{reset}! Welcome to the {bright_blue}Rock Paper Scissors{reset} Game!') call(['espeak', f'Hello {self.player_name}! Welcome to rock paper and scissors!']) # i = 10 # while i > 0: # print(f'Hello {bright_cyan}{self.player_name.title()}{reset}! Welcome to the {bright_blue}Rock Paper Scissors{reset} Game!') # print(f'Game starting in {bright_yellow}{i}{reset}') # i -= 1 # os_sleep(1) # self.clear() # Everything is ok up to this point. Start the game print(f'\n{yellow}Type "q" or "quit" without quotes to exit game.{reset}\n') print(f'{bright_blue}Choices: {", ".join(self.options).title()}{reset}') self.player_choice = input(f'Player Choice: ').lower() # Player enter q or qiut to exit the game if self.player_choice == 'q' or self.player_choice == 'quit': self.clear() # Check for the overall winner if self.player_wins > self.computer_wins: total = self.convert(self.player_wins, self.computer_wins, self.ties) print(f'{bright_cyan}{self.player_name.title()}{reset} is the overall winner.') print(f'{bright_cyan}{self.player_name.title()}{reset} won {total} of the games played.') call(['espeak', f'{self.player_name} is the overall winner. {self.player_name} won {total} of played games.']) elif self.computer_wins > self.player_wins: total = self.convert(self.computer_wins, self.player_wins, self.ties) print(f'{bright_magenta}Computer{reset} is the overall winner.') print(f'{bright_magenta}Computer{reset} won {total} of the games played.') call(['espeak', f'Computer is the over all winner. Computer won {total} of played games.']) else: print(f'No player is the overall winner.') call(['espeak', 'There is no overall winner.']) print(f'{bright_green}Games Played{reset}: {self.games_played}\n') print(f'{bright_yellow}Thanks for playing{reset} {bright_cyan}{self.player_name.title()}{bright_yellow}!{reset}') call(['espeak', f'Thanks for playing {self.player_name}.']) os.sys.exit() # Setup some errors if wrong input is entered if self.player_choice.replace('.', '').isdigit(): self.clear() print(f'{bright_red}Error!: {bright_yellow}Numbers are not allowed.{reset}') call(['espeak', 'Numbers are not allowed']) continue elif self.player_choice not in self.options: self.clear() print(f'{bright_red}Error!: {bright_yellow}Please use only the given choices.{reset}') call(['espeak', 'Please use only the given choices.']) # No errors continue to play else: self.clear() print(self.play()) # Throw an exception if any unknown errors except ValueError as error: print(f'{bright_red}Error!{reset}: {yellow}{error}{reset}') # Show scores print() self.score() # This function is used to clear the screen of cluttered text def clear(self): # Check if the os is windows or not if os.name == 'nt': _ = os.system('cls') else: _ = os.system('clear') def play(self): # Get the computer's choice computer = self.computer() self.games_played += 1 # Print out what each has chosen print(f'\n{bright_cyan}{self.player_name.title()}{reset} Chose: {self.player_choice.title()}') print(f'{bright_magenta}Computer{reset} Chose: {computer.title()}\n') txt1 = 'Rock Crushes Scissors' txt2 = 'Paper Covers Rock' txt3 = 'Scissors Cuts Paper' # Check to see who won and return if self.player_choice == 'rock' and computer == 'scissors': winner = f'{bright_cyan}{self.player_name.title()}{reset} won! {txt1}.' call(['espeak', f'{txt1}. {self.player_name} wins.']) self.player_wins += 1 elif self.player_choice == 'paper' and computer == 'rock': winner = f'{bright_cyan}{self.player_name.title()}{reset} won! {txt2}.' call(['espeak', f'{txt2}. {self.player_name} wins.']) self.player_wins += 1 elif self.player_choice == 'scissors' and computer == 'paper': winner = f'{bright_cyan}{self.player_name.title()}{reset} won! {txt3}.' call(['espeak', f'{txt3}. {self.player_name} wins.']) self.player_wins += 1 elif computer == 'rock' and self.player_choice == 'scissors': winner = f'{bright_magenta}Computer{reset} won! {txt1}' call(['espeak', f'{txt1}. Computer wins.']) self.computer_wins += 1 elif computer == 'paper' and self.player_choice == 'rock': winner = f'{bright_magenta}Computer{reset} won! {txt2}' call(['espeak', f'{txt2}. Computer wins.']) self.computer_wins += 1 elif computer == 'scissors' and self.player_choice == 'paper': call(['espeak', f'{txt3}. Computer wins.']) winner = f'{bright_magenta}Computer{reset} won! {txt3}' self.computer_wins += 1 else: winner = f'{bright_cyan}{self.player_name.title()}{reset} and {bright_magenta}Computer{reset} have tied.\nThere is no winner.' call(['espeak', f'{self.player_name} and computer have tied.']) self.ties += 1 return winner # Get a random choice for the computer and return def computer(self): self.computer_choice = rnd.choice(self.options) return self.computer_choice # Displays the score/wins def score(self): print(f'{cyan}Score{reset}:') print(f'{bright_cyan}{self.player_name.title()}{reset}: {self.player_wins} | {bright_magenta}Computer{reset}: {self.computer_wins} | {bright_yellow}Ties{reset}: {self.ties}') print() # Convert wins into percentages def convert(self, num1, num2, num3): total = num1 / (num1 + num2 + num3) return format(total, '.0%') def main(): Game() if __name__ == '__main__': main()
I welcome all feedback.
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags