Simple color version. Works on windows and linux. I do not know about macs.
Requires colorama for windows
python3 -m pip install colorama
Requires colorama for windows
python3 -m pip install colorama
#! /usr/bin/env python3 # Do the imports import random as rnd import os from time import sleep as os_sleep # 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 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() 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() 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.') 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.') else: print(f'No player is the 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}') 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}') 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}') # 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}.' self.player_wins += 1 elif self.player_choice == 'paper' and computer == 'rock': winner = f'{bright_cyan}{self.player_name.title()}{reset} won! {txt2}.' self.player_wins += 1 elif self.player_choice == 'scissors' and computer == 'paper': winner = f'{bright_cyan}{self.player_name.title()}{reset} won! {txt3}.' self.player_wins += 1 elif computer == 'rock' and self.player_choice == 'scissors': winner = f'{bright_magenta}Computer{reset} won! {txt1}' self.computer_wins += 1 elif computer == 'paper' and self.player_choice == 'rock': winner = f'{bright_magenta}Computer{reset} won! {txt2}' self.computer_wins += 1 elif computer == 'scissors' and self.player_choice == 'paper': 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.' 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