Here my version of the game with PyQt5. Still need a few tweaks.
If you try it, you shouldn't have to remove the image parts. It gets them from the web.
If you try let me know what you think please.
If you try it, you shouldn't have to remove the image parts. It gets them from the web.
If you try let me know what you think please.
#! /usr/bin/env python3 import sys import os from PyQt5 import QtCore, QtWidgets, QtGui,QtMultimedia from PyQt5.QtGui import QImage, QPixmap, QFont from PyQt5.QtWidgets import QMessageBox import requests import random as rnd from PyQt5.QtMultimedia import QSound from playsound import playsound class Login(QtWidgets.QWidget): switch_window = QtCore.pyqtSignal(str) def __init__(self): QtWidgets.QWidget.__init__(self) self.setWindowTitle('Login') self.setGeometry(320, 100, 300, 150) self.setFixedSize(300,150) layout = QtWidgets.QGridLayout() # Logo image self.logo_img = 'http://gaming-rat.com/ratt2b.png' self.image = QImage() self.image.loadFromData(requests.get(self.logo_img).content) self.logo_label = QtWidgets.QLabel() self.logo_label.setPixmap(QPixmap(self.image)) self.grat_label = QtWidgets.QLabel('Gaming Rat') self.grat_label.setStyleSheet('color:rgb(25,10,100); font:18px Bold') # Entry field self.name = QtWidgets.QLineEdit() self.name.setPlaceholderText('Enter Player Name') self.name.returnPressed.connect(self.login) # Submit Button self.button = QtWidgets.QPushButton('Submit') self.button.setStyleSheet('color:rgb(0,155,0)') self.button.clicked.connect(self.login) # Exit button self.close_btn = QtWidgets.QPushButton('Exit') self.close_btn.setStyleSheet('color:rgb(255,0,0)') self.close_btn.clicked.connect(os.sys.exit) # Add widgets to layout layout.addWidget(self.logo_label,0,0) layout.addWidget(self.grat_label,0,1) layout.addWidget(self.name,1,0,1,3) layout.addWidget(self.button,2,0) layout.addWidget(self.close_btn,2,2) self.setLayout(layout) def login(self): switch_window = QtCore.pyqtSignal(str) name = self.name.text().strip().title() if not name: QMessageBox.warning(self, 'Error! Field is empty', 'You must enter a player name.') elif len(name) > 8 or len(name) < 5: QMessageBox.warning(self, 'Name Error!', 'Player name must be between 5 and 8 charcters in length.') else: self.player = Player() self.player.name = name self.switch_window.emit(name) class MainWindow(QtWidgets.QWidget): def __init__(self, name): self.computer = Player() self.computer.name = 'Computer' self.player = Player() self.player.name = name QtWidgets.QWidget.__init__(self) self.setWindowTitle('Rock, Paper, & Scissors') self.resize(500, 286) self.setFixedSize(500,286) self.rps = 'http://gaming-rat.com/rps.png' self.myimg = QImage() self.myimg.loadFromData(requests.get(self.rps).content) self.header = QtWidgets.QLabel(self) self.header.setPixmap(QPixmap(self.myimg)) self.header.setGeometry(QtCore.QRect(10, 10, 481, 61)) font = QtGui.QFont() font.setPointSize(26) font.setBold(True) font.setWeight(75) self.header.setFont(font) self.header.setStyleSheet("color:rgb(150, 50,50);padding:8;") self.header.setFrameShape(QtWidgets.QFrame.StyledPanel) self.header.setFrameShadow(QtWidgets.QFrame.Sunken) self.header.setLineWidth(1) self.header.setAlignment(QtCore.Qt.AlignCenter) self.players = QtWidgets.QLabel(self) self.players.setGeometry(QtCore.QRect(10, 70, 221, 31)) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.players.setFont(font) self.players.setStyleSheet("color:rgb(100,10,30);") self.players.setFrameShape(QtWidgets.QFrame.StyledPanel) self.players.setFrameShadow(QtWidgets.QFrame.Sunken) self.players.setText("Player Name") self.wins = QtWidgets.QLabel(self) self.wins.setGeometry(QtCore.QRect(230, 70, 51, 31)) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.wins.setFont(font) self.wins.setStyleSheet("color:rgb(100,10,30);") self.wins.setFrameShape(QtWidgets.QFrame.StyledPanel) self.wins.setFrameShadow(QtWidgets.QFrame.Sunken) self.wins.setText("Wins") self.loss = QtWidgets.QLabel(self) self.loss.setGeometry(QtCore.QRect(280, 70, 61, 31)) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.loss.setFont(font) self.loss.setStyleSheet("color:rgb(100,10,30);") self.loss.setFrameShape(QtWidgets.QFrame.StyledPanel) self.loss.setFrameShadow(QtWidgets.QFrame.Sunken) self.loss.setText("Losses") self.win_eff = QtWidgets.QLabel(self) self.win_eff.setGeometry(QtCore.QRect(340, 70, 71, 31)) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.win_eff.setFont(font) self.win_eff.setStyleSheet("color:rgb(100,10,30);") self.win_eff.setFrameShape(QtWidgets.QFrame.StyledPanel) self.win_eff.setFrameShadow(QtWidgets.QFrame.Sunken) self.win_eff.setText("Win Eff.") self.loss_eff = QtWidgets.QLabel(self) self.loss_eff.setGeometry(QtCore.QRect(410, 70, 81, 31)) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.loss_eff.setFont(font) self.loss_eff.setStyleSheet("color:rgb(100,10,30);") self.loss_eff.setFrameShape(QtWidgets.QFrame.StyledPanel) self.loss_eff.setFrameShadow(QtWidgets.QFrame.Sunken) self.loss_eff.setText('Loose Eff.') self.player_name = QtWidgets.QLabel(self) self.player_name.setGeometry(QtCore.QRect(10, 100, 221, 31)) font = QtGui.QFont() self.player_name.setFont(font) font.setWeight(75) self.player_name.setStyleSheet("color:blue;font-size:10pt;padding-left:5px") self.player_name.setFrameShape(QtWidgets.QFrame.StyledPanel) self.player_name.setFrameShadow(QtWidgets.QFrame.Sunken) self.player_name.setText(self.player.name) self.computer_name = QtWidgets.QLabel(self) self.computer_name.setGeometry(QtCore.QRect(10, 130, 221, 31)) font = QtGui.QFont() self.computer_name.setFont(font) font.setWeight(75) self.computer_name.setStyleSheet("color: purple; font-size:10pt;padding-left:5px") self.computer_name.setFrameShape(QtWidgets.QFrame.StyledPanel) self.computer_name.setFrameShadow(QtWidgets.QFrame.Sunken) self.computer_name.setText(self.computer.name) self.player_wins = QtWidgets.QLabel(self) self.player_wins.setGeometry(QtCore.QRect(230, 100, 51, 31)) font = QtGui.QFont() font.setWeight(75) self.player_wins.setFont(font) self.player_wins.setStyleSheet("color:blue;font-size:10pt;padding-left:5px") self.player_wins.setFrameShape(QtWidgets.QFrame.StyledPanel) self.player_wins.setFrameShadow(QtWidgets.QFrame.Sunken) self.player_wins.setText('0') self.computer_wins = QtWidgets.QLabel(self) self.computer_wins.setGeometry(QtCore.QRect(230, 130, 51, 31)) font = QtGui.QFont() font.setWeight(75) self.computer_wins.setFont(font) self.computer_wins.setStyleSheet("color:purple;font-size:10pt;padding-left:5px") self.computer_wins.setFrameShape(QtWidgets.QFrame.StyledPanel) self.computer_wins.setFrameShadow(QtWidgets.QFrame.Sunken) self.computer_wins.setText('0') self.player_losses = QtWidgets.QLabel(self) self.player_losses.setGeometry(QtCore.QRect(280, 100, 61, 31)) font = QtGui.QFont() font.setWeight(75) self.player_losses.setFont(font) self.player_losses.setStyleSheet("color:blue;font-size:10pt;padding-left:5px") self.player_losses.setFrameShape(QtWidgets.QFrame.StyledPanel) self.player_losses.setFrameShadow(QtWidgets.QFrame.Sunken) self.player_losses.setText('0') self.computer_losses = QtWidgets.QLabel(self) self.computer_losses.setGeometry(QtCore.QRect(280, 130, 61, 31)) font = QtGui.QFont() font.setWeight(75) self.computer_losses.setFont(font) self.computer_losses.setStyleSheet("color:purple;font-size:10pt;padding-left:5px") self.computer_losses.setFrameShape(QtWidgets.QFrame.StyledPanel) self.computer_losses.setFrameShadow(QtWidgets.QFrame.Sunken) self.computer_losses.setText('0') self.player_win_eff = QtWidgets.QLabel(self) self.player_win_eff.setGeometry(QtCore.QRect(340, 100, 71, 31)) font = QtGui.QFont() font.setWeight(75) self.player_win_eff.setFont(font) self.player_win_eff.setStyleSheet("color:blue;font-size:10pt;padding-left:5px") self.player_win_eff.setFrameShape(QtWidgets.QFrame.StyledPanel) self.player_win_eff.setFrameShadow(QtWidgets.QFrame.Sunken) self.player_win_eff.setText("0%") self.computer_win_eff = QtWidgets.QLabel(self) self.computer_win_eff.setGeometry(QtCore.QRect(340, 130, 71, 31)) font = QtGui.QFont() font.setWeight(75) self.computer_win_eff.setFont(font) self.computer_win_eff.setStyleSheet("color:purple;font-size:10pt;padding-left:5px") self.computer_win_eff.setFrameShape(QtWidgets.QFrame.StyledPanel) self.computer_win_eff.setFrameShadow(QtWidgets.QFrame.Sunken) self.computer_win_eff.setText("0%") self.player_loss_eff = QtWidgets.QLabel(self) self.player_loss_eff.setGeometry(QtCore.QRect(410, 100, 81, 31)) font = QtGui.QFont() font.setWeight(75) self.player_loss_eff.setFont(font) self.player_loss_eff.setStyleSheet("color:blue;font-size:10pt;padding-left:5px") self.player_loss_eff.setFrameShape(QtWidgets.QFrame.StyledPanel) self.player_loss_eff.setFrameShadow(QtWidgets.QFrame.Sunken) self.player_loss_eff.setText("0%") self.computer_loss_eff = QtWidgets.QLabel(self) self.computer_loss_eff.setGeometry(QtCore.QRect(410, 130, 81, 31)) font = QtGui.QFont() font.setWeight(75) self.computer_loss_eff.setFont(font) self.computer_loss_eff.setStyleSheet("color:purple;font-size:10pt;padding-left:5px") self.computer_loss_eff.setFrameShape(QtWidgets.QFrame.StyledPanel) self.computer_loss_eff.setFrameShadow(QtWidgets.QFrame.Sunken) self.computer_loss_eff.setText("0%") self.messages = QtWidgets.QLabel(self) self.messages.setGeometry(QtCore.QRect(10, 160, 331, 31)) font = QtGui.QFont() font.setWeight(50) self.messages.setFont(font) self.messages.setStyleSheet("color:black;font-size:9pt;padding-left:5px") self.messages.setFrameShape(QtWidgets.QFrame.StyledPanel) self.messages.setFrameShadow(QtWidgets.QFrame.Sunken) self.messages.setText("Status:") self.games_played = QtWidgets.QLabel(self) self.games_played.setGeometry(QtCore.QRect(340, 160, 151, 31)) font = QtGui.QFont() font.setWeight(50) self.games_played.setFont(font) self.games_played.setStyleSheet("color:black;font-size:9pt;padding-left:5px") self.games_played.setFrameShape(QtWidgets.QFrame.StyledPanel) self.games_played.setFrameShadow(QtWidgets.QFrame.Sunken) self.games_played.setText("Games Played:") self.scissors = QtWidgets.QPushButton(self) self.scissors.setGeometry(QtCore.QRect(230, 200, 89, 25)) self.scissors.setText("Scissors") self.scissors.clicked.connect(self.scissorsbtn) self.rock = QtWidgets.QPushButton(self) self.rock.setGeometry(QtCore.QRect(10, 200, 89, 25)) self.rock.setText("Rock") self.rock.clicked.connect(self.rockbtn) self.paper = QtWidgets.QPushButton(self) self.paper.setGeometry(QtCore.QRect(120, 200, 89, 25)) self.paper.setText("Paper") self.paper.clicked.connect(self.paperbtn) self.exit_btn = QtWidgets.QPushButton(self) self.exit_btn.setGeometry(QtCore.QRect(400, 200, 89, 25)) self.exit_btn.setStyleSheet("color: red") self.exit_btn.setText("Exit") self.exit_btn.clicked.connect(os.sys.exit) self.creator = QtWidgets.QLabel(self) self.creator.setGeometry(QtCore.QRect(290, 250, 201, 21)) font = QtGui.QFont() font.setPointSize(9) self.creator.setFont(font) self.creator.setFrameShape(QtWidgets.QFrame.NoFrame) self.creator.setText("Create by menator01 - 6/05/2020") # Logo image self.logo_img = 'http://gaming-rat.com/ratt2b.png' self.image = QImage() self.image.loadFromData(requests.get(self.logo_img).content) self.ratt_img = QtWidgets.QLabel(self) self.ratt_img.setGeometry(QtCore.QRect(10, 230, 61, 51)) self.ratt_img.setText("") self.ratt_img.setPixmap(QtGui.QPixmap(self.image)) self.ratt_img.setScaledContents(True) self.ratt_img.setAlignment(QtCore.Qt.AlignCenter) def play(self, player_choice): options = ['rock', 'paper', 'scissors'] msg = '' computer_choice = rnd.choice(options) self.player.name = f'<font color="blue">{self.player.name}</font>' self.computer.name = f'<font color="purple">{self.computer.name}</font>' msg1 = 'Rock Crushes Scissors' msg2 = 'Paper Covers Rock' msg3 = 'Scissors Cuts Paper' msg4 = 'It\'s a tie!' if player_choice == 'rock' and computer_choice == 'scissors': msg = msg1 self.messages.setText(f'Status: <font color="brown">{msg}</font> {self.player.name} <font color="brown">won!</font>') self.player.wins += 1 self.player_wins.setText(f'{self.player.wins}') self.computer.loss += 1 self.computer_losses.setText(f'{self.computer.loss}') elif player_choice == 'paper' and computer_choice == 'rock': msg = msg2 self.messages.setText(f'Status: <font color="brown">{msg}</font> {self.player.name} <font color="brown">won!</font>') self.player.wins += 1 self.player_wins.setText(f'{self.player.wins}') self.computer.loss += 1 self.computer_losses.setText(f'{self.computer.loss}') elif player_choice == 'scissors' and computer_choice == 'paper': msg = msg3 self.messages.setText(f'Status: <font color="brown">{msg}</font> {self.player.name} <font color="brown">won!</font>') self.player.wins += 1 self.player_wins.setText(f'{self.player.wins}') self.computer.loss += 1 self.computer_losses.setText(f'{self.computer.loss}') elif computer_choice == 'rock' and player_choice == 'scissors': msg = msg1 self.messages.setText(f'Status: <font color="brown">{msg}</font> {self.computer.name} <font color="brown">won!</font>') self.computer.wins += 1 self.computer_wins.setText(f'{self.computer.wins}') self.player.loss += 1 self.player_losses.setText(f'{self.player.loss}') elif computer_choice == 'paper' and player_choice == 'rock': msg = msg2 self.messages.setText(f'Status: <font color="brown">{msg}</font> {self.computer.name} <font color="brown">won!</font>') self.computer.wins += 1 self.computer_wins.setText(f'{self.computer.wins}') self.player.loss += 1 self.player_losses.setText(f'{self.player.loss}') elif computer_choice == 'scissors' and player_choice == 'paper': msg = msg3 self.messages.setText(f'Status: <font color="brown">{msg}</font> {self.computer.name} <font color="brown">won!</font>') self.computer.wins += 1 self.computer_wins.setText(f'{self.computer.wins}') self.player.loss += 1 self.player_losses.setText(f'{self.player.loss}') else: msg = msg4 self.messages.setText(f'Status: <font color="brown">{msg}</font> Both players chose {player_choice.title()}') self.player.ties += 1 self.computer.ties += 1 self.player.games_played += 1 self.computer.games_played += 1 self.games_played.setText(f'Games Played: <font color="saddlebrown">{self.player.games_played}</font>') playerwin_eff = self.get_percentage(self.player.wins, self.player.games_played) self.player_win_eff.setText(f'{playerwin_eff}') playerloss_eff = self.get_percentage(self.player.loss, self.player.games_played) self.player_loss_eff.setText(f'{playerloss_eff}') computerwin_eff = self.get_percentage(self.computer.wins, self.computer.games_played) self.computer_win_eff.setText(f'{computerwin_eff}') computerloss_eff = self.get_percentage(self.computer.loss, self.computer.games_played) self.computer_loss_eff.setText(f'{computerloss_eff}') # Sound file = 'http://gaming-rat.com/sound/beep.wav' playsound(file) # QSound.play('beep.wav') def rockbtn(self): self.play(player_choice='rock') def paperbtn(self): self.play(player_choice='paper') def scissorsbtn(self): self.play(player_choice='scissors') def get_percentage(self, num1, num2): try: total = num1/num2 return format(total, '.0%') except ZeroDivisionError: return format(0, '.0%') class Player: player_name = '' wins = 0 loss = 0 ties = 0 games_played = 0 class Controller: def __init__(self): pass def show_login(self): self.login = Login() self.login.switch_window.connect(self.show_main) self.login.show() def show_main(self, name): self.window = MainWindow(name) self.login.close() self.window.show() def main(): app = QtWidgets.QApplication(sys.argv) controller = Controller() controller.show_login() file = 'http://gaming-rat.com/sound/beep.wav' playsound(file) sys.exit(app.exec_()) 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
Download my project scripts
The only dumb question, is one that doesn't get asked.
My Github
How to post code using bbtags
Download my project scripts