def __init__(self, cfg): super(fbBoxScoreWidget, self ).__init__(cfg) self.ui = Ui_footballBoxScoreGame() self.ui.setupUi(self) self.fbQuestion = fbBoxScore() self.done = False
class fbBoxScoreWidget(gameWidget): def __init__(self, cfg): super(fbBoxScoreWidget, self ).__init__(cfg) self.ui = Ui_footballBoxScoreGame() self.ui.setupUi(self) self.fbQuestion = fbBoxScore() self.done = False def startGame(self): if self.runState == 0: self.curScore = 0 self.questionsAsked = 0 self.homeAnswer = None self.awayAnswer = None self.homeTry = None self.awayTry = None self.correct = 0 self.wrong = 0 self.runState = 1 self.gameType = 0 self.bonus = 1 self.ui.checkBtn.pressed.connect(self.checkAnswer) self.setupNextQuestion() elif self.runState == 2: if not self.done: self.done = True return def setupNextQuestion(self): self.curScore = self.cfg['maxTime']*self.cfg['pointsPerSec'] self.startTime = time.time() nextq = self.fbQuestion.getNextQuestion(self.cfg) self.gameType = random.randrange(2) self.ui.gameInfoLabel.setText('%s at %s on %s at %s' % (nextq.awayTeam, nextq.homeTeam, nextq.gameDate.strftime('%b %d, %Y'), nextq.gameTime)) try: self.ui.scoreTable.cellChanged.disconnect() except: pass self.ui.scoreTable.setVerticalHeaderLabels([nextq.homeTeam, nextq.awayTeam]) if self.gameType == 0: self.ui.stackedWidget.setCurrentIndex(0) self.ui.instrTxt.setText('Enter the missing score') hq = random.randrange(0,4) aq = random.randrange(0,4) for q in range(4): if q != hq: self.ui.scoreTable.item(0,q).setText('%d' % nextq.homeScores[q]) else: self.ui.scoreTable.item(0,q).setText('') self.homeAnswer = nextq.homeScores[q] if q != aq: self.ui.scoreTable.item(1,q).setText('%d' % nextq.awayScores[q]) else: self.ui.scoreTable.item(1,q).setText('') self.awayAnswer = nextq.awayScores[q] elif self.gameType == 3: self.ui.stackedWidget.setCurrentIndex(0) self.ui.instrTxt.setText('Enter scores that add up to the final') for q in range(4): self.ui.scoreTable.item(0,q).setText('') self.ui.scoreTable.item(1,q).setText('') self.homeAnswer = nextq.homeFinalScore self.awayAnswer = nextq.awayFinalScore elif self.gameType == 1: self.ui.stackedWidget.setCurrentIndex(1) if random.randrange(2)==0: team = nextq.awayTeam score = nextq.awayFinalScore else: team = nextq.homeTeam score = nextq.homeFinalScore self.ui.singleScoreLabel.setText('%s: %d' % (team, score)) self.homeAnswer = score self.ui.fieldGoalSpin.setValue(0) self.ui.safetySpin.setValue(0) self.ui.TD6spin.setValue(0) self.ui.TD7spin.setValue(0) self.ui.TD8spin.setValue(0) self.ui.scoreTable.item(0,4).setText('%d' % nextq.homeFinalScore) self.ui.scoreTable.item(1,4).setText('%d' % nextq.awayFinalScore) self.homeTry = None self.awayTry = None self.bonus = 1. self.ui.scoreTable.cellChanged.connect(self.checkCell) def checkCell(self, row, col): self.ui.feedbackLabel.setText('') try: val = int(self.ui.scoreTable.item(row, col).text()) except: return if self.gameType == 0: if row == 0: self.homeTry = val elif row == 1: self.awayTry = val def checkAnswer(self): if self.runState != 1: return if self.gameType == 0: if self.homeTry is None or self.awayTry is None: return self.finalizeAnswer() elif self.gameType == 3: homeVals = [] awayVals = [] homeAns = 0 awayAns = 0 for col in range(4): try: valH = int(self.ui.scoreTable.item(0, col).text()) valA = int(self.ui.scoreTable.item(1, col).text()) except: return homeAns += valH awayAns += valA self.homeTry = homeAns self.awayTry = awayAns self.finalizeAnswer() elif self.gameType == 1: scoreTry = 3*self.ui.fieldGoalSpin.value() + 6*self.ui.TD6spin.value() + 7*self.ui.TD7spin.value() + 8*self.ui.TD8spin.value() + 2*self.ui.safetySpin.value() if self.ui.fieldGoalSpin.value() > 0: self.bonus += 0.1 if self.ui.safetySpin.value() > 0: self.bonus += 0.1 if self.ui.TD8spin.value() > 0: self.bonus += 0.1 if self.ui.TD7spin.value() > 0: self.bonus += 0.1 if self.ui.TD6spin.value() > 0: self.bonus += 0.1 if scoreTry == self.homeAnswer: self.ui.feedbackLabel.setText('Great!') self.correctAnswer() else: self.ui.feedbackLabel.setText('Nice try!') self.wrongAnswer() self.timer.stop() self.questionsAsked += 1 if self.questionsAsked < self.cfg['numQuestions']: self.setupNextQuestion() else: self.finish() def finalizeAnswer(self): if self.homeAnswer == self.homeTry and self.awayAnswer == self.awayTry: self.ui.feedbackLabel.setText('Great!') self.correctAnswer() elif self.homeAnswer != self.homeTry and self.awayAnswer == self.awayTry: self.ui.feedbackLabel.setText('Nice try! The missing %s score was %d' % (self.fbQuestion.homeTeam, self.homeAnswer)) self.wrongAnswer() elif self.homeAnswer == self.homeTry and self.awayAnswer != self.awayTry: self.ui.feedbackLabel.setText('Nice try! The missing %s score was %d' % (self.fbQuestion.awayTeam, self.awayAnswer)) self.wrongAnswer() else: self.ui.feedbackLabel.setText('Nice try! The missing scores were %d and %d' % (self.homeAnswer, self.awayAnswer)) self.wrongAnswer() def correctAnswer(self): self.correct += 1 t = self.cfg['maxTime'] if self.cfg['level'] > 5: t -= time.time() - self.startTime pts = max(self.cfg['minPoints'], int(t*self.cfg['pointsPerSec'])) self.totalScore += pts*self.bonus self.updateScore[int].emit(self.totalScore) pal = self.ui.feedbackLabel.palette() pal.setColor(self.ui.feedbackLabel.foregroundRole(), QColor(0,255,0)) self.ui.feedbackLabel.setPalette(pal) def wrongAnswer(self): self.wrong += 1 pal = self.ui.feedbackLabel.palette() pal.setColor(self.ui.feedbackLabel.foregroundRole(), QColor(255,0,0)) self.ui.feedbackLabel.setPalette(pal) def finishGame(self): fnt = self.ui.feedbackLabel.font() fnt.setPointSize(20) self.ui.feedbackLabel.setFont(fnt) self.ui.feedbackLabel.setText('Great Job! You got %d/%d right!' % (self.correct, self.correct+self.wrong)) pal = self.ui.feedbackLabel.palette() pal.setColor(self.ui.feedbackLabel.foregroundRole(), QColor(0,0,255)) self.ui.feedbackLabel.setPalette(pal) self.runState = 2