Advertisement
Guest User

abcd

a guest
Oct 25th, 2014
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.00 KB | None | 0 0
  1. from PySide import QtCore, QtGui
  2. import sys
  3. from random import *
  4. from copy import *
  5.  
  6.  
  7. class Game(QtCore.QObject):
  8.     def __init__(self):
  9.         QtCore.QObject.__init__(self)
  10.         self.val = ""
  11.         self.now_val = ""
  12.         self.error = ''
  13.         self.stage = 0
  14.         self.count_try = 0
  15.         self.prev_n = ""
  16.         self.player_name = ''
  17.         self.results = []
  18.         self.now_bulls = '11'
  19.         self.now_cows = '11'
  20.         self.bc = []
  21.         self.prev_ans = []
  22.         self.var = set()
  23.  
  24.     def check(self):
  25.         if len(self.now_val) != 4 or len(set(self.now_val)) != 4 or self.now_val[0] == '0':
  26.             return False
  27.         else:
  28.             for i in range(len(self.now_val)):
  29.                 if not('0' <= self.now_val[i] <= '9'):
  30.                     return False
  31.             return True
  32.  
  33.     def read_file(self):
  34.         file_res = open('results', 'r')
  35.         a = ''
  36.         b = -1
  37.         s = file_res.readline()
  38.         while len(s) > 3:
  39.             s = s.split()
  40.             a = s[0]
  41.             for i in range(1, len(s) - 1):
  42.                 a += ' ' + s[i]
  43.             b = int(s[-1])
  44.             self.results.append((b, a))
  45.             s = file_res.readline()
  46.         self.results.sort()
  47.         file_res.close()
  48.  
  49.     def write_file(self):
  50.         file_res = open('results', 'w')
  51.         for i in range(len(self.results)):
  52.             file_res.write(str(self.results[i][1]) + " " + str(self.results[i][0]) + '\n')
  53.         file_res.close()
  54.  
  55.     def GetResults(self):
  56.         s = ''
  57.         s2 = ''
  58.         if len(self.results) == 0:
  59.             s = 'No results\n'
  60.             s2 = 'No results\n'
  61.         else:
  62.             for i in range(0, min(len(self.results), 3)):
  63.                 s += self.results[i][1] + ':    ' + str(self.results[i][0]) + '\n'
  64.             for i in range(0, len(self.results)):
  65.                 s2 += self.results[i][1] + ':    ' + str(self.results[i][0]) + '\n'
  66.         MessageBox.setInformativeText(s)
  67.         MessageBox.setDetailedText('All results:\n\n' + s2)
  68.         MessageBox.exec_()
  69.  
  70.     def get_ans(self):
  71.         bulls = 0
  72.         cows = 0
  73.         tmp_set = set(self.val)
  74.         for i in range(0, 4):
  75.             if (self.now_val[i] == self.val[i]):
  76.                 bulls += 1
  77.             elif self.now_val[i] in tmp_set:
  78.                 cows += 1
  79.         return (bulls, cows)
  80.  
  81.     def Gen(self):
  82.         is_good = False
  83.         while not(is_good):
  84.             self.now_val = str(randint(1023, 9876))
  85.             if self.check():
  86.                 is_good = True
  87.                 self.val = self.now_val
  88.                 self.now_val = ''
  89.         self.count_try = 0
  90.  
  91.     def SetTextVal(self, value):
  92.         self.now_val = value
  93.  
  94.     def SetName(self, name):
  95.         self.player_name = str(name)
  96.         if self.player_name != '':
  97.             stage_game = 1
  98.             self.results.append((self.count_try, self.player_name))
  99.             self.results.sort()
  100.             self.write_file()
  101.         else:
  102.             Dialog.setVisible(True)
  103.  
  104.     def Submit(self):
  105.         if self.check() and self.now_val != self.prev_n:
  106.             self.error = ''
  107.             s1 = self.get_ans()
  108.             self.count_try += 1
  109.             s2 = str(s1[0]) + ' bulls & ' + str(s1[1]) + ' cows'
  110.             if (s2[0] == '4'):
  111.                 self.ReturnAns()
  112.             else:
  113.                 self.emit(QtCore.SIGNAL("valueChanged(QString)"), s2)
  114.             self.prev_n = self.now_val
  115.             self.now_val = str()
  116.             global LineEdit
  117.             LineEdit.setText(str())
  118.         else:
  119.             if self.check():
  120.                 self.error = "Error: it's your \nprevious number!"
  121.             elif self.now_val == '':
  122.                 self.error = "Error 404: number \nnot found"
  123.             else:
  124.                 self.error = "Error: bad number"
  125.             self.emit(QtCore.SIGNAL("valueChanged(QString)"), self.error)
  126.  
  127.     def ReturnAns(self):
  128.         global button_submit
  129.         global button_lose
  130.         global LineEdit
  131.         if self.stage == 1:
  132.             self.Start()
  133.         elif self.stage == 0:
  134.             s2 = 'Answer: ' + self.val + '\n' + 'Tries: ' + str(self.count_try)
  135.             if self.check():
  136.                 s1 = self.get_ans()
  137.                 if (s1[0] == 4):
  138.                     s2 = 'You won!\n' + s2
  139.                     self.player_name = ''
  140.                     self.stage = 2
  141.                     Dialog.show()
  142.             else:
  143.                 s2 = 'You lost, hahaha!\n' + s2
  144.             self.emit(QtCore.SIGNAL("valueChanged(QString)"), s2)
  145.             button_lose.setText('New Game')
  146.             button_submit.setDisabled(True)
  147.             LineEdit.setDisabled(True)
  148.             self.stage = 1
  149.             button_start_PCgame.show()
  150.  
  151.     def Start(self):
  152.         global button_submit
  153.         global button_lose
  154.         global LineEdit
  155.         button_lose.setText('I lost!')
  156.         button_submit.setEnabled(True)
  157.         button_start_PCgame.hide()
  158.         LineEdit.setEnabled(True)
  159.         LineEdit.setText('')
  160.         self.emit(QtCore.SIGNAL("valueChanged(QString)"), '')
  161.         self.val = ""
  162.         self.now_val = ""
  163.         self.error = ''
  164.         self.stage = 0
  165.         self.Gen()
  166.         print(self.val)
  167.  
  168.     def MayBeAnsPCgame(self, bulls, cows, number_ans, number):
  169.         b1 = 0
  170.         for i in range(0, 4):
  171.             if number_ans[i] == number[i]:
  172.                 b1 += 1
  173.         s = (set(number_ans) & set(number))
  174.         c1 = len(s) - b1
  175.         if int(bulls) == b1 and int(cows) == c1:
  176.             return True
  177.         return False
  178.  
  179.     def StartGenPCgame(self):
  180.         for i in range(1023, 9877):
  181.             if len(set(str(i))) == 4:
  182.                 self.var.add(str(i))
  183.  
  184.     def IsGoodAnsPCgame(self):
  185.         s = list(copy(self.var))
  186.         i = 0
  187.         c = 0
  188.         s1 = []
  189.         while i < len(s):
  190.             if not(self.MayBeAnsPCgame(self.now_bulls, self.now_cows, self.prev_ans[-1], s[i])):
  191.                 c += 1
  192.             else:
  193.                 s1.append(s[i])
  194.             i += 1
  195.         if c < len(s):
  196.             self.var = copy(set(s1))
  197.             return True
  198.         else:
  199.             return False
  200.  
  201.     def ReturnAnsPCgame(self):
  202.         self.prev_ans.append(list(self.var)[0])
  203.         TextLabelAns.setText(' My number:  ' + self.prev_ans[-1])
  204.         if len(self.bc) > 0 and self.bc[-1][0] == 4:
  205.             TextLabelAns.setText(' I WON!!! \n It was my next step\n to take over the world!')
  206.             button_submit_PCgame.setDisabled(True)
  207.             LineEditBulls.setDisabled(True)
  208.             LineEditCows.setDisabled(True)
  209.             button_lose_PCgame.setText('Return to menu')
  210.  
  211.     def StartPCgame(self):
  212.         TextLabel.setText("")
  213.         button_submit.hide()
  214.         button_lose.hide()
  215.         LineEdit.hide()
  216.         TextLabel.hide()
  217.         button_submit_PCgame.show()
  218.         button_submit_PCgame.setEnabled(True)
  219.         button_start_PCgame.hide()
  220.         button_lose_PCgame.show()
  221.         TextLabelBulls.show()
  222.         TextLabelCows.show()
  223.         LineEditCows.show()
  224.         LineEditBulls.show()
  225.         TextLabelError.show()
  226.         self.StartGenPCgame()
  227.         self.ReturnAnsPCgame()
  228.         TextLabelAns.show()
  229.         LineEditBulls.setEnabled(True)
  230.         LineEditCows.setEnabled(True)
  231.  
  232.     def SubmitPCgame(self):
  233.         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()):
  234.             TextLabelError.setText('Your answer is invalid')
  235.             return 0
  236.         else:
  237.             self.bc.append((int(self.now_bulls), int(self.now_cows)))
  238.             now_cows = '11'
  239.             now_bulls = '11'
  240.             LineEditCows.setText('')
  241.             LineEditBulls.setText('')
  242.             TextLabelError.setText('')
  243.             self.ReturnAnsPCgame()
  244.  
  245.     def SetCowsPCgame(self, cows):
  246.         self.now_cows = cows
  247.  
  248.     def SetBullsPCgame(self, bulls):
  249.         self.now_bulls = bulls
  250.  
  251.     def EndPCgame(self):
  252.         button_submit.show()
  253.         button_lose.show()
  254.         LineEdit.show()
  255.         TextLabel.show()
  256.         button_submit_PCgame.hide()
  257.         button_start_PCgame.show()
  258.         button_lose_PCgame.hide()
  259.         TextLabelBulls.hide()
  260.         TextLabelCows.hide()
  261.         LineEditCows.hide()
  262.         LineEditBulls.hide()
  263.         self.prev_ans = []
  264.         self.now_bulls = 0
  265.         self.now_cows = 0
  266.         self.bc = []
  267.         TextLabelError.hide()
  268.         TextLabelError.setText('')
  269.         TextLabelAns.setText('')
  270.         TextLabelAns.hide()
  271.         LineEditCows.setText('')
  272.         LineEditBulls.setText('')
  273.  
  274.  
  275. app = QtGui.QApplication(sys.argv)
  276. Window = QtGui.QMainWindow()
  277. Window.setWindowTitle('Small game')
  278. Window.setGeometry(100, 100, 410, 190)
  279. LineEdit = QtGui.QLineEdit(Window)
  280. LineEdit.setGeometry(10, 10, 100, 30)
  281. TextLabel = QtGui.QLabel(Window)
  282. TextLabel.setGeometry(15, 50, 100, 60)
  283. MyGame = Game()
  284. Dialog = QtGui.QInputDialog(Window)
  285. Dialog.setWindowTitle('Saving results')
  286. MessageBox = QtGui.QMessageBox(Window)
  287. MessageBox.setWindowTitle('Best results')
  288. MessageBox.setGeometry(300, 300, 400, 400)
  289. MessageBox.setIcon(QtGui.QMessageBox.Information)
  290. MessageBox.setText('Best results\n')
  291. QtCore.QObject.connect(LineEdit, QtCore.SIGNAL("textChanged(QString)"), MyGame.SetTextVal)
  292. button_submit = QtGui.QPushButton("Submit", Window)
  293. button_lose = QtGui.QPushButton("New Game", Window)
  294. button_results = QtGui.QPushButton("Results", Window)
  295. MyGame.stage = 1
  296. Window.show()
  297. button_submit.setDisabled(True)
  298. LineEdit.setDisabled(True)
  299. button_submit.setGeometry(150, 10, 100, 30)
  300. button_lose.setGeometry(150, 60, 100, 30)
  301. button_results.setGeometry(280, 10, 100, 30)
  302. QtCore.QObject.connect(button_submit, QtCore.SIGNAL("clicked()"), MyGame.Submit)
  303. QtCore.QObject.connect(button_lose, QtCore.SIGNAL("clicked()"), MyGame.ReturnAns)
  304. QtCore.QObject.connect(button_results, QtCore.SIGNAL("clicked()"), MyGame.GetResults)
  305. QtCore.QObject.connect(MyGame, QtCore.SIGNAL("valueChanged(QString)"), TextLabel.setText)
  306. Dialog.setTextValue('Player')
  307. Dialog.setLabelText('Write your name, please:')
  308. Dialog.setGeometry(300, 300, 300, 300)
  309. QtCore.QObject.connect(Dialog, QtCore.SIGNAL("textValueSelected(QString)"), MyGame.SetName)
  310. QtCore.QObject.connect(MyGame, QtCore.SIGNAL("textChanged(QString)"), Window, QtCore.SLOT("close()"))
  311.  
  312. button_start_PCgame = QtGui.QPushButton("Play with PC", Window)
  313. button_start_PCgame.setGeometry(150, 110, 100, 30)
  314. button_start_PCgame.show()
  315. QtCore.QObject.connect(button_start_PCgame, QtCore.SIGNAL("clicked()"), MyGame.StartPCgame)
  316. button_submit_PCgame = QtGui.QPushButton("Submit", Window)
  317. button_submit_PCgame.setGeometry(150, 10, 100, 30)
  318. QtCore.QObject.connect(button_submit_PCgame, QtCore.SIGNAL("clicked()"), MyGame.SubmitPCgame)
  319. button_lose_PCgame = QtGui.QPushButton("You win!  :(", Window)
  320. button_lose_PCgame.setGeometry(150, 60, 100, 30)
  321. QtCore.QObject.connect(button_lose_PCgame, QtCore.SIGNAL("clicked()"), MyGame.EndPCgame)
  322. LineEditCows = QtGui.QLineEdit(Window)
  323. LineEditCows.setGeometry(70, 10, 30, 30)
  324. QtCore.QObject.connect(LineEditCows, QtCore.SIGNAL("textChanged(QString)"), MyGame.SetCowsPCgame)
  325. LineEditBulls = QtGui.QLineEdit(Window)
  326. LineEditBulls.setGeometry(10, 10, 30, 30)
  327. QtCore.QObject.connect(LineEditBulls, QtCore.SIGNAL("textChanged(QString)"), MyGame.SetBullsPCgame)
  328. TextLabelCows = QtGui.QLabel(Window)
  329. TextLabelCows.setGeometry(102, 10, 30, 30)
  330. TextLabelCows.setText('cows')
  331. TextLabelBulls = QtGui.QLabel(Window)
  332. TextLabelBulls.setGeometry(42, 10, 30, 30)
  333. TextLabelBulls.setText('bulls')
  334. TextLabelAns = QtGui.QLabel(Window)
  335. TextLabelAns.setGeometry(10, 40, 130, 60)
  336. TextLabelAns.setText('')
  337. TextLabelError = QtGui.QLabel(Window)
  338. TextLabelError.setGeometry(10, 100, 150, 60)
  339. TextLabelError.setText('')
  340.  
  341. try:
  342.     MyGame.read_file()
  343. except FileNotFoundError:
  344.     MyGame.write_file()
  345.     print('File "results" not found. New file was created.')
  346.  
  347. app.exec_()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement