Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PySide import QtCore, QtGui
- import sys
- from random import *
- from copy import *
- class Game(QtCore.QObject):
- def __init__(self):
- QtCore.QObject.__init__(self)
- self.val = ""
- self.now_val = ""
- self.error = ''
- self.stage = 0
- self.count_try = 0
- self.prev_n = ""
- self.player_name = ''
- self.results = []
- self.now_bulls = '11'
- self.now_cows = '11'
- self.bc = []
- self.prev_ans = []
- self.var = set()
- def check(self):
- if len(self.now_val) != 4 or len(set(self.now_val)) != 4 or self.now_val[0] == '0':
- return False
- else:
- for i in range(len(self.now_val)):
- if not('0' <= self.now_val[i] <= '9'):
- return False
- return True
- def read_file(self):
- file_res = open('results', 'r')
- a = ''
- b = -1
- s = file_res.readline()
- while len(s) > 3:
- s = s.split()
- a = s[0]
- for i in range(1, len(s) - 1):
- a += ' ' + s[i]
- b = int(s[-1])
- self.results.append((b, a))
- s = file_res.readline()
- self.results.sort()
- file_res.close()
- def write_file(self):
- file_res = open('results', 'w')
- for i in range(len(self.results)):
- file_res.write(str(self.results[i][1]) + " " + str(self.results[i][0]) + '\n')
- file_res.close()
- def GetResults(self):
- s = ''
- s2 = ''
- if len(self.results) == 0:
- s = 'No results\n'
- s2 = 'No results\n'
- else:
- for i in range(0, min(len(self.results), 3)):
- s += self.results[i][1] + ': ' + str(self.results[i][0]) + '\n'
- for i in range(0, len(self.results)):
- s2 += self.results[i][1] + ': ' + str(self.results[i][0]) + '\n'
- MessageBox.setInformativeText(s)
- MessageBox.setDetailedText('All results:\n\n' + s2)
- MessageBox.exec_()
- def get_ans(self):
- bulls = 0
- cows = 0
- tmp_set = set(self.val)
- for i in range(0, 4):
- if (self.now_val[i] == self.val[i]):
- bulls += 1
- elif self.now_val[i] in tmp_set:
- cows += 1
- return (bulls, cows)
- def Gen(self):
- is_good = False
- while not(is_good):
- self.now_val = str(randint(1023, 9876))
- if self.check():
- is_good = True
- self.val = self.now_val
- self.now_val = ''
- self.count_try = 0
- def SetTextVal(self, value):
- self.now_val = value
- def SetName(self, name):
- self.player_name = str(name)
- if self.player_name != '':
- stage_game = 1
- self.results.append((self.count_try, self.player_name))
- self.results.sort()
- self.write_file()
- else:
- Dialog.setVisible(True)
- def Submit(self):
- if self.check() and self.now_val != self.prev_n:
- self.error = ''
- s1 = self.get_ans()
- self.count_try += 1
- s2 = str(s1[0]) + ' bulls & ' + str(s1[1]) + ' cows'
- if (s2[0] == '4'):
- self.ReturnAns()
- else:
- self.emit(QtCore.SIGNAL("valueChanged(QString)"), s2)
- self.prev_n = self.now_val
- self.now_val = str()
- global LineEdit
- LineEdit.setText(str())
- else:
- if self.check():
- self.error = "Error: it's your \nprevious number!"
- elif self.now_val == '':
- self.error = "Error 404: number \nnot found"
- else:
- self.error = "Error: bad number"
- self.emit(QtCore.SIGNAL("valueChanged(QString)"), self.error)
- def ReturnAns(self):
- global button_submit
- global button_lose
- global LineEdit
- if self.stage == 1:
- self.Start()
- elif self.stage == 0:
- s2 = 'Answer: ' + self.val + '\n' + 'Tries: ' + str(self.count_try)
- if self.check():
- s1 = self.get_ans()
- if (s1[0] == 4):
- s2 = 'You won!\n' + s2
- self.player_name = ''
- self.stage = 2
- Dialog.show()
- else:
- s2 = 'You lost, hahaha!\n' + s2
- self.emit(QtCore.SIGNAL("valueChanged(QString)"), s2)
- button_lose.setText('New Game')
- button_submit.setDisabled(True)
- LineEdit.setDisabled(True)
- self.stage = 1
- button_start_PCgame.show()
- def Start(self):
- global button_submit
- global button_lose
- global LineEdit
- button_lose.setText('I lost!')
- button_submit.setEnabled(True)
- button_start_PCgame.hide()
- LineEdit.setEnabled(True)
- LineEdit.setText('')
- self.emit(QtCore.SIGNAL("valueChanged(QString)"), '')
- self.val = ""
- self.now_val = ""
- self.error = ''
- self.stage = 0
- self.Gen()
- print(self.val)
- def MayBeAnsPCgame(self, bulls, cows, number_ans, number):
- b1 = 0
- for i in range(0, 4):
- if number_ans[i] == number[i]:
- b1 += 1
- s = (set(number_ans) & set(number))
- c1 = len(s) - b1
- if int(bulls) == b1 and int(cows) == c1:
- return True
- return False
- def StartGenPCgame(self):
- for i in range(1023, 9877):
- if len(set(str(i))) == 4:
- self.var.add(str(i))
- def IsGoodAnsPCgame(self):
- s = list(copy(self.var))
- i = 0
- c = 0
- s1 = []
- while i < len(s):
- if not(self.MayBeAnsPCgame(self.now_bulls, self.now_cows, self.prev_ans[-1], s[i])):
- c += 1
- else:
- s1.append(s[i])
- i += 1
- if c < len(s):
- self.var = copy(set(s1))
- return True
- else:
- return False
- def ReturnAnsPCgame(self):
- self.prev_ans.append(list(self.var)[0])
- TextLabelAns.setText(' My number: ' + self.prev_ans[-1])
- if len(self.bc) > 0 and self.bc[-1][0] == 4:
- TextLabelAns.setText(' I WON!!! \n It was my next step\n to take over the world!')
- button_submit_PCgame.setDisabled(True)
- LineEditBulls.setDisabled(True)
- LineEditCows.setDisabled(True)
- button_lose_PCgame.setText('Return to menu')
- def StartPCgame(self):
- TextLabel.setText("")
- button_submit.hide()
- button_lose.hide()
- LineEdit.hide()
- TextLabel.hide()
- button_submit_PCgame.show()
- button_submit_PCgame.setEnabled(True)
- button_start_PCgame.hide()
- button_lose_PCgame.show()
- TextLabelBulls.show()
- TextLabelCows.show()
- LineEditCows.show()
- LineEditBulls.show()
- TextLabelError.show()
- self.StartGenPCgame()
- self.ReturnAnsPCgame()
- TextLabelAns.show()
- LineEditBulls.setEnabled(True)
- LineEditCows.setEnabled(True)
- def SubmitPCgame(self):
- if not(len(self.now_cows) == 1 and '0' <= self.now_cows <= '4' and len(self.now_bulls) == 1 and '0' <= self.now_bulls <= '4' and int(self.now_bulls) + int(self.now_cows) <= 4) or not(self.IsGoodAnsPCgame()):
- TextLabelError.setText('Your answer is invalid')
- return 0
- else:
- self.bc.append((int(self.now_bulls), int(self.now_cows)))
- now_cows = '11'
- now_bulls = '11'
- LineEditCows.setText('')
- LineEditBulls.setText('')
- TextLabelError.setText('')
- self.ReturnAnsPCgame()
- def SetCowsPCgame(self, cows):
- self.now_cows = cows
- def SetBullsPCgame(self, bulls):
- self.now_bulls = bulls
- def EndPCgame(self):
- button_submit.show()
- button_lose.show()
- LineEdit.show()
- TextLabel.show()
- button_submit_PCgame.hide()
- button_start_PCgame.show()
- button_lose_PCgame.hide()
- TextLabelBulls.hide()
- TextLabelCows.hide()
- LineEditCows.hide()
- LineEditBulls.hide()
- self.prev_ans = []
- self.now_bulls = 0
- self.now_cows = 0
- self.bc = []
- TextLabelError.hide()
- TextLabelError.setText('')
- TextLabelAns.setText('')
- TextLabelAns.hide()
- LineEditCows.setText('')
- LineEditBulls.setText('')
- app = QtGui.QApplication(sys.argv)
- Window = QtGui.QMainWindow()
- Window.setWindowTitle('Small game')
- Window.setGeometry(100, 100, 410, 190)
- LineEdit = QtGui.QLineEdit(Window)
- LineEdit.setGeometry(10, 10, 100, 30)
- TextLabel = QtGui.QLabel(Window)
- TextLabel.setGeometry(15, 50, 100, 60)
- MyGame = Game()
- Dialog = QtGui.QInputDialog(Window)
- Dialog.setWindowTitle('Saving results')
- MessageBox = QtGui.QMessageBox(Window)
- MessageBox.setWindowTitle('Best results')
- MessageBox.setGeometry(300, 300, 400, 400)
- MessageBox.setIcon(QtGui.QMessageBox.Information)
- MessageBox.setText('Best results\n')
- QtCore.QObject.connect(LineEdit, QtCore.SIGNAL("textChanged(QString)"), MyGame.SetTextVal)
- button_submit = QtGui.QPushButton("Submit", Window)
- button_lose = QtGui.QPushButton("New Game", Window)
- button_results = QtGui.QPushButton("Results", Window)
- MyGame.stage = 1
- Window.show()
- button_submit.setDisabled(True)
- LineEdit.setDisabled(True)
- button_submit.setGeometry(150, 10, 100, 30)
- button_lose.setGeometry(150, 60, 100, 30)
- button_results.setGeometry(280, 10, 100, 30)
- QtCore.QObject.connect(button_submit, QtCore.SIGNAL("clicked()"), MyGame.Submit)
- QtCore.QObject.connect(button_lose, QtCore.SIGNAL("clicked()"), MyGame.ReturnAns)
- QtCore.QObject.connect(button_results, QtCore.SIGNAL("clicked()"), MyGame.GetResults)
- QtCore.QObject.connect(MyGame, QtCore.SIGNAL("valueChanged(QString)"), TextLabel.setText)
- Dialog.setTextValue('Player')
- Dialog.setLabelText('Write your name, please:')
- Dialog.setGeometry(300, 300, 300, 300)
- QtCore.QObject.connect(Dialog, QtCore.SIGNAL("textValueSelected(QString)"), MyGame.SetName)
- QtCore.QObject.connect(MyGame, QtCore.SIGNAL("textChanged(QString)"), Window, QtCore.SLOT("close()"))
- button_start_PCgame = QtGui.QPushButton("Play with PC", Window)
- button_start_PCgame.setGeometry(150, 110, 100, 30)
- button_start_PCgame.show()
- QtCore.QObject.connect(button_start_PCgame, QtCore.SIGNAL("clicked()"), MyGame.StartPCgame)
- button_submit_PCgame = QtGui.QPushButton("Submit", Window)
- button_submit_PCgame.setGeometry(150, 10, 100, 30)
- QtCore.QObject.connect(button_submit_PCgame, QtCore.SIGNAL("clicked()"), MyGame.SubmitPCgame)
- button_lose_PCgame = QtGui.QPushButton("You win! :(", Window)
- button_lose_PCgame.setGeometry(150, 60, 100, 30)
- QtCore.QObject.connect(button_lose_PCgame, QtCore.SIGNAL("clicked()"), MyGame.EndPCgame)
- LineEditCows = QtGui.QLineEdit(Window)
- LineEditCows.setGeometry(70, 10, 30, 30)
- QtCore.QObject.connect(LineEditCows, QtCore.SIGNAL("textChanged(QString)"), MyGame.SetCowsPCgame)
- LineEditBulls = QtGui.QLineEdit(Window)
- LineEditBulls.setGeometry(10, 10, 30, 30)
- QtCore.QObject.connect(LineEditBulls, QtCore.SIGNAL("textChanged(QString)"), MyGame.SetBullsPCgame)
- TextLabelCows = QtGui.QLabel(Window)
- TextLabelCows.setGeometry(102, 10, 30, 30)
- TextLabelCows.setText('cows')
- TextLabelBulls = QtGui.QLabel(Window)
- TextLabelBulls.setGeometry(42, 10, 30, 30)
- TextLabelBulls.setText('bulls')
- TextLabelAns = QtGui.QLabel(Window)
- TextLabelAns.setGeometry(10, 40, 130, 60)
- TextLabelAns.setText('')
- TextLabelError = QtGui.QLabel(Window)
- TextLabelError.setGeometry(10, 100, 150, 60)
- TextLabelError.setText('')
- try:
- MyGame.read_file()
- except FileNotFoundError:
- MyGame.write_file()
- print('File "results" not found. New file was created.')
- app.exec_()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement