Ejemplo n.º 1
0
 def startNewGame(self):
     try:
         self.setLocalScore()
     except:
         pass  #printLastError()
     self.score = SCORE()
     self.score.reset()
     self.nextRound()
     try:
         self.countMaxRolling.setLabel(
             str(self.score.maxRolling) + "[CR]/[CR]16")
     except:
         pass
     xbmc.executebuiltin("XBMC.Notification(Yahrzee,New Game,4000,%s)" %
                         TROPHYGOLD)
Ejemplo n.º 2
0
 def startNewGame(self):
     try: self.setLocalScore()
     except: pass#printLastError()
     self.score = SCORE()
     self.score.reset()
     self.nextRound()
     try: self.countMaxRolling.setLabel(str(self.score.maxRolling)+"[CR]/[CR]16")
     except: pass
     xbmc.executebuiltin("XBMC.Notification(Yahrzee,New Game,4000,%s)" % TROPHYGOLD)
Ejemplo n.º 3
0
class YAHTZEE(xbmcgui.Window):
    def __init__(self):
        self.setCoordinateResolution(6)

        self.startNewGame()

        self.addControl(xbmcgui.ControlImage(0, 0, 720, 576, BG00))
        self.addControl(xbmcgui.ControlImage(-100, 95, 920, 360, BG01))
        self.addControl(
            xbmcgui.ControlLabel(200,
                                 63,
                                 0,
                                 0,
                                 "xbox media center",
                                 'special12',
                                 alignment=0x00000001))
        self.addControl(
            xbmcgui.ControlLabel(207, 63, 0, 0, __script__, 'special13'))
        self.logo = xbmcgui.ControlImage(550, 40, 74, 74, BG04)
        self.addControl(self.logo)

        self.countMaxRolling = xbmcgui.ControlLabel(115,
                                                    472,
                                                    90,
                                                    0,
                                                    "",
                                                    'special12',
                                                    alignment=0x00000002 +
                                                    0x00000004)
        self.addControl(self.countMaxRolling)
        self.countMaxRolling.setLabel(
            str(self.score.maxRolling) + "[CR]/[CR]16")

        # EXTRA BUTTON DICE
        self.addControl(
            xbmcgui.ControlLabel(50,
                                 415,
                                 90,
                                 0,
                                 ROLL,
                                 'special13',
                                 '0xeeFF0000',
                                 alignment=0x00000002 + 0x00000004))
        self.btn_dice_ex = xbmcgui.ControlButton(50,
                                                 430,
                                                 90,
                                                 90,
                                                 "",
                                                 font="font13",
                                                 textColor='0xeeFF0000',
                                                 focusTexture=BG02,
                                                 noFocusTexture=BG03,
                                                 alignment=0x00000002 +
                                                 0x00000004)
        self.addControl(self.btn_dice_ex)
        self.dummy = xbmcgui.ControlButton(50,
                                           430,
                                           90,
                                           90,
                                           "",
                                           focusTexture="",
                                           noFocusTexture="")
        self.addControl(self.dummy)

        # GROUP OF RADIO BUTTON ROLL (EXTRA BUTTON DICE)
        self.roll_1 = xbmcgui.ControlImage(59, 520, 22, 22, BGRADIO)
        self.addControl(self.roll_1)
        self.roll_2 = xbmcgui.ControlImage(84, 520, 22, 22, BGRADIO)
        self.addControl(self.roll_2)
        self.roll_3 = xbmcgui.ControlImage(109, 520, 22, 22, BGRADIO)
        self.addControl(self.roll_3)

        # GROUP OF BUTTON DICE
        self.btn_dice_1 = xbmcgui.ControlButton(180,
                                                430,
                                                90,
                                                90,
                                                "",
                                                font="font13",
                                                focusTexture=BG02,
                                                noFocusTexture=BG03,
                                                alignment=0x00000002 +
                                                0x00000004)
        self.addControl(self.btn_dice_1)
        self.btn_dice_2 = xbmcgui.ControlButton(275,
                                                430,
                                                90,
                                                90,
                                                "",
                                                font="font13",
                                                focusTexture=BG02,
                                                noFocusTexture=BG03,
                                                alignment=0x00000002 +
                                                0x00000004)
        self.addControl(self.btn_dice_2)
        self.btn_dice_3 = xbmcgui.ControlButton(370,
                                                430,
                                                90,
                                                90,
                                                "",
                                                font="font13",
                                                focusTexture=BG02,
                                                noFocusTexture=BG03,
                                                alignment=0x00000002 +
                                                0x00000004)
        self.addControl(self.btn_dice_3)
        self.btn_dice_4 = xbmcgui.ControlButton(465,
                                                430,
                                                90,
                                                90,
                                                "",
                                                font="font13",
                                                focusTexture=BG02,
                                                noFocusTexture=BG03,
                                                alignment=0x00000002 +
                                                0x00000004)
        self.addControl(self.btn_dice_4)
        self.btn_dice_5 = xbmcgui.ControlButton(560,
                                                430,
                                                90,
                                                90,
                                                "",
                                                font="font13",
                                                focusTexture=BG02,
                                                noFocusTexture=BG03,
                                                alignment=0x00000002 +
                                                0x00000004)
        self.addControl(self.btn_dice_5)

        # GROUP OF RADIO BUTTON DICE
        self.dice_1Hold = xbmcgui.ControlImage(214, 520, 22, 22, BGNORADIO)
        self.addControl(self.dice_1Hold)
        self.dice_2Hold = xbmcgui.ControlImage(309, 520, 22, 22, BGNORADIO)
        self.addControl(self.dice_2Hold)
        self.dice_3Hold = xbmcgui.ControlImage(404, 520, 22, 22, BGNORADIO)
        self.addControl(self.dice_3Hold)
        self.dice_4Hold = xbmcgui.ControlImage(499, 520, 22, 22, BGNORADIO)
        self.addControl(self.dice_4Hold)
        self.dice_5Hold = xbmcgui.ControlImage(594, 520, 22, 22, BGNORADIO)
        self.addControl(self.dice_5Hold)

        # GROUP OF BUTTON SCORE
        self.upperScore = xbmcgui.ControlList(87,
                                              120,
                                              270,
                                              350,
                                              font="font13",
                                              textColor="0xFFFFFFFF",
                                              selectedColor="0xFFFF9600",
                                              buttonFocusTexture=BG05,
                                              buttonTexture=BG06,
                                              itemTextXOffset=-10,
                                              itemHeight=28)
        self.addControl(self.upperScore)

        self.lowerScore = xbmcgui.ControlList(363,
                                              120,
                                              270,
                                              350,
                                              font="font13",
                                              textColor="0xFFFFFFFF",
                                              selectedColor="0xFFFF9600",
                                              buttonFocusTexture=BG05,
                                              buttonTexture=BG06,
                                              itemTextXOffset=-10,
                                              itemHeight=28)
        self.addControl(self.lowerScore)

        # EXTRA DICE
        self.dice_ex = xbmcgui.ControlImage(CHEXDICE[0], CHEXDICE[1],
                                            CHEXDICE[2], CHEXDICE[3],
                                            DICEBG % self.dice.ex)
        self.addControl(self.dice_ex)
        # GROUP OF DICE
        self.dice_1 = xbmcgui.ControlImage(CH01DICE[0], CH01DICE[1],
                                           CH01DICE[2], CH01DICE[3],
                                           DICEBG % self.dice.d1)
        self.addControl(self.dice_1)
        self.dice_2 = xbmcgui.ControlImage(CH02DICE[0], CH02DICE[1],
                                           CH02DICE[2], CH02DICE[3],
                                           DICEBG % self.dice.d2)
        self.addControl(self.dice_2)
        self.dice_3 = xbmcgui.ControlImage(CH03DICE[0], CH03DICE[1],
                                           CH03DICE[2], CH03DICE[3],
                                           DICEBG % self.dice.d3)
        self.addControl(self.dice_3)
        self.dice_4 = xbmcgui.ControlImage(CH04DICE[0], CH04DICE[1],
                                           CH04DICE[2], CH04DICE[3],
                                           DICEBG % self.dice.d4)
        self.addControl(self.dice_4)
        self.dice_5 = xbmcgui.ControlImage(CH05DICE[0], CH05DICE[1],
                                           CH05DICE[2], CH05DICE[3],
                                           DICEBG % self.dice.d5)
        self.addControl(self.dice_5)

        self.setNavigationOnDice()
        self.setHoldForNewGame()
        self.setScoreSection()
        self.setColorDice()

    def showAnimation(self):
        #self.diffXzoom = ANIMZOOM*(50 - CHEXDICE[0])
        #self.diffYzoom = ANIMZOOM*( 0 - CHEXDICE[1])
        #self.diffXzoom = ANIMZOOM*(random.choice(range(-360, 360)) - CHEXDICE[0])
        #self.diffYzoom = ANIMZOOM*(random.choice(range(-288, 288)) - CHEXDICE[1])
        self.diffXzoom = ANIMZOOM * (random.choice(range(-720, 720)))
        self.diffYzoom = ANIMZOOM * (random.choice(range(-576, 576)))
        self.diffWzoom = ANIMZOOM * (CHEXDICE[2] - 1)
        self.diffHzoom = ANIMZOOM * (CHEXDICE[3] - 1)
        if not MULTICOLORONROLLING: self.setMultiColor()
        for zoompos in range(STEP, -1, -1):
            self.zoomAnimation(zoompos)
            if MULTICOLORONROLLING: self.setMultiColor()
            time.sleep(0.01)

    def zoomAnimation(self, pct):
        elmt_stepX = float(self.diffXzoom) / float(STEP)
        elmt_stepY = float(self.diffYzoom) / float(STEP)
        elmt_stepW = float(self.diffWzoom) / float(STEP)
        elmt_stepH = float(self.diffHzoom) / float(STEP)
        deltaX = int(pct * elmt_stepX)
        deltaY = int(pct * elmt_stepY)
        deltaW = int(pct * elmt_stepW)
        deltaH = int(pct * elmt_stepH)
        if not self.dice_1HoldOn:
            self.dice_1.setPosition(CH01DICE[0] + deltaX, CH01DICE[1] + deltaY)
            self.dice_1.setWidth(CH01DICE[2] - deltaW)
            self.dice_1.setHeight(CH01DICE[3] - deltaH)
            self.dice.d1 = str(random.choice(self.randomDice))
            self.dice_1.setImage(DICEBG % self.dice.d1)
        if not self.dice_2HoldOn:
            self.dice_2.setPosition(CH02DICE[0] + deltaX, CH02DICE[1] + deltaY)
            self.dice_2.setWidth(CH02DICE[2] - deltaW)
            self.dice_2.setHeight(CH02DICE[3] - deltaH)
            self.dice.d2 = str(random.choice(self.randomDice))
            self.dice_2.setImage(DICEBG % self.dice.d2)
        if not self.dice_3HoldOn:
            self.dice_3.setPosition(CH03DICE[0] + deltaX, CH03DICE[1] + deltaY)
            self.dice_3.setWidth(CH03DICE[2] - deltaW)
            self.dice_3.setHeight(CH03DICE[3] - deltaH)
            self.dice.d3 = str(random.choice(self.randomDice))
            self.dice_3.setImage(DICEBG % self.dice.d3)
        if not self.dice_4HoldOn:
            self.dice_4.setPosition(CH04DICE[0] + deltaX, CH04DICE[1] + deltaY)
            self.dice_4.setWidth(CH04DICE[2] - deltaW)
            self.dice_4.setHeight(CH04DICE[3] - deltaH)
            self.dice.d4 = str(random.choice(self.randomDice))
            self.dice_4.setImage(DICEBG % self.dice.d4)
        if not self.dice_5HoldOn:
            self.dice_5.setPosition(CH05DICE[0] + deltaX, CH05DICE[1] + deltaY)
            self.dice_5.setWidth(CH05DICE[2] - deltaW)
            self.dice_5.setHeight(CH05DICE[3] - deltaH)
            self.dice.d5 = str(random.choice(self.randomDice))
            self.dice_5.setImage(DICEBG % self.dice.d5)
        if self.rollDice == 3:
            self.dice_ex.setPosition(CHEXDICE[0] + deltaX,
                                     CHEXDICE[1] + deltaY)
            self.dice_ex.setWidth(CHEXDICE[2] - deltaW)
            self.dice_ex.setHeight(CHEXDICE[3] - deltaH)
            self.dice.ex = str(random.choice(self.randomDice))
            self.dice_ex.setImage(DICEBG % self.dice.ex)

    def setNavigationOnDice(self):
        self.groupID = self.btn_dice_ex.getId()
        self.btn_dice_ex.setNavigation(self.btn_dice_ex, self.btn_dice_ex,
                                       self.btn_dice_5, self.btn_dice_1)
        self.btn_dice_1.setNavigation(self.btn_dice_1, self.btn_dice_1,
                                      self.btn_dice_ex, self.btn_dice_2)
        self.btn_dice_2.setNavigation(self.btn_dice_2, self.btn_dice_2,
                                      self.btn_dice_1, self.btn_dice_3)
        self.btn_dice_3.setNavigation(self.btn_dice_3, self.btn_dice_3,
                                      self.btn_dice_2, self.btn_dice_4)
        self.btn_dice_4.setNavigation(self.btn_dice_4, self.btn_dice_4,
                                      self.btn_dice_3, self.btn_dice_5)
        self.btn_dice_5.setNavigation(self.btn_dice_5, self.btn_dice_5,
                                      self.btn_dice_4, self.btn_dice_ex)
        self.setFocus(self.btn_dice_ex)

    def setNavigationOnScore(self):
        self.groupID = self.upperScore.getId()
        self.upperScore.setNavigation(self.upperScore, self.upperScore,
                                      self.lowerScore, self.lowerScore)
        self.lowerScore.setNavigation(self.lowerScore, self.lowerScore,
                                      self.upperScore, self.upperScore)
        self.setFocus(self.upperScore)

    def startNewGame(self):
        try:
            self.setLocalScore()
        except:
            pass  #printLastError()
        self.score = SCORE()
        self.score.reset()
        self.nextRound()
        try:
            self.countMaxRolling.setLabel(
                str(self.score.maxRolling) + "[CR]/[CR]16")
        except:
            pass
        xbmc.executebuiltin("XBMC.Notification(Yahrzee,New Game,4000,%s)" %
                            TROPHYGOLD)

    def nextRound(self):
        if self.score.maxRolling > 0:
            self.dice = DICE()
            self.randomDice = self.dice.choiceDice(6)
            self.dice.d1 = str(random.choice(self.randomDice))
            self.dice.d2 = str(random.choice(self.randomDice))
            self.dice.d3 = str(random.choice(self.randomDice))
            self.dice.d4 = str(random.choice(self.randomDice))
            self.dice.d5 = str(random.choice(self.randomDice))
            self.dice.ex = str(random.choice(self.randomDice))
            self.rollDice = 3
            self.rollDiceIsStarted = 0
            try:
                self.setHoldForNewGame()
            except:
                pass
        if self.score.maxRolling <= 0:
            xbmc.executebuiltin(
                "XBMC.Notification(Game Over,X New Game,4000,%s)" % XBUT)

    def setHoldForNewGame(self):
        self.dice_1HoldOn = 0
        self.dice_2HoldOn = 0
        self.dice_3HoldOn = 0
        self.dice_4HoldOn = 0
        self.dice_5HoldOn = 0
        self.roll_1.setImage(BGRADIO)
        self.roll_2.setImage(BGRADIO)
        self.roll_3.setImage(BGRADIO)
        self.dice_1Hold.setImage(BGNORADIO)
        self.dice_2Hold.setImage(BGNORADIO)
        self.dice_3Hold.setImage(BGNORADIO)
        self.dice_4Hold.setImage(BGNORADIO)
        self.dice_5Hold.setImage(BGNORADIO)

    def setScoreSection(self):
        self.setScoreUpperSection()
        self.setScoreLowerSection()

    def setScoreUpperSection(self):
        self.upperScore.reset()
        listlabel = [
            self.score.current["uppersection"]["Aces"],
            self.score.current["uppersection"]["Twos"],
            self.score.current["uppersection"]["Threes"],
            self.score.current["uppersection"]["Fours"],
            self.score.current["uppersection"]["Fives"],
            self.score.current["uppersection"]["Sixes"],
            self.score.current["uppersection"]["SubTotal"],
            self.score.current["uppersection"]["Bonus"],
            self.score.current["uppersection"]["Total Upper"]
        ]
        [
            self.upperScore.addItem(
                xbmcgui.ListItem(label=str(l), label2=str(l2)))
            for l, l2 in zip(NAMEOFUPPERSECTION, listlabel)
        ]

    def setScoreLowerSection(self):
        self.lowerScore.reset()
        listlabel = [
            self.score.current["lowersection"]["3 of kind"],
            self.score.current["lowersection"]["4 of kind"],
            self.score.current["lowersection"]["Full House"],
            self.score.current["lowersection"]["Sm. Straight"],
            self.score.current["lowersection"]["Lg. Straight"],
            self.score.current["lowersection"]["Yahtzee"],
            self.score.current["lowersection"]["Chance"],
            self.score.current["lowersection"]["Yahtzee Bonus"],
            self.score.current["lowersection"]["Total Lower"],
            self.score.current["lowersection"]["Grand Total"]
        ]
        [
            self.lowerScore.addItem(
                xbmcgui.ListItem(label=str(l), label2=str(l2)))
            for l, l2 in zip(NAMEOFLOWERSECTION, listlabel)
        ]

    def allDice(self):
        return [
            self.dice.ex, self.dice.d1, self.dice.d2, self.dice.d3,
            self.dice.d4, self.dice.d5
        ]

    def onActionScore(self, action):
        if self.getFocus(
        ) == self.upperScore and self.upperScore.getSelectedPosition() != -1:
            alldice = self.allDice()
            self.setScoreLowerSection()
            if self.upperScore.getSelectedPosition() == 6:
                self.upperScore.selectItem(0)
            elif self.upperScore.getSelectedPosition() == 8:
                self.upperScore.selectItem(5)
            if self.upperScore.getSelectedPosition() == 0:
                if self.score.current["uppersection"][
                        "Aces"] == self.score.default["uppersection"]["Aces"]:
                    self.upperScore.getSelectedItem().setLabel2(
                        self.score.singleXDice("1", alldice))
            elif self.upperScore.getSelectedPosition() == 1:
                if self.score.current["uppersection"][
                        "Twos"] == self.score.default["uppersection"]["Twos"]:
                    self.upperScore.getSelectedItem().setLabel2(
                        self.score.singleXDice("2", alldice))
            elif self.upperScore.getSelectedPosition() == 2:
                if self.score.current["uppersection"][
                        "Threes"] == self.score.default["uppersection"][
                            "Threes"]:
                    self.upperScore.getSelectedItem().setLabel2(
                        self.score.singleXDice("3", alldice))
            elif self.upperScore.getSelectedPosition() == 3:
                if self.score.current["uppersection"][
                        "Fours"] == self.score.default["uppersection"][
                            "Fours"]:
                    self.upperScore.getSelectedItem().setLabel2(
                        self.score.singleXDice("4", alldice))
            elif self.upperScore.getSelectedPosition() == 4:
                if self.score.current["uppersection"][
                        "Fives"] == self.score.default["uppersection"][
                            "Fives"]:
                    self.upperScore.getSelectedItem().setLabel2(
                        self.score.singleXDice("5", alldice))
            elif self.upperScore.getSelectedPosition() == 5:
                if self.score.current["uppersection"][
                        "Sixes"] == self.score.default["uppersection"][
                            "Sixes"]:
                    self.upperScore.getSelectedItem().setLabel2(
                        self.score.singleXDice("6", alldice))

        elif self.getFocus(
        ) == self.lowerScore and self.lowerScore.getSelectedPosition() != -1:
            alldice = self.allDice()
            self.setScoreUpperSection()
            if self.lowerScore.getSelectedPosition() == 7:
                self.lowerScore.selectItem(0)
            elif self.lowerScore.getSelectedPosition() == 9:
                self.lowerScore.selectItem(6)
            if self.lowerScore.getSelectedPosition() == 0:
                if self.score.current["lowersection"][
                        "3 of kind"] == self.score.default["lowersection"][
                            "3 of kind"]:
                    self.lowerScore.getSelectedItem().setLabel2(
                        self.score.ofKind(3, alldice))
            elif self.lowerScore.getSelectedPosition() == 1:
                if self.score.current["lowersection"][
                        "4 of kind"] == self.score.default["lowersection"][
                            "4 of kind"]:
                    self.lowerScore.getSelectedItem().setLabel2(
                        self.score.ofKind(4, alldice))
            elif self.lowerScore.getSelectedPosition() == 2:
                if self.score.current["lowersection"][
                        "Full House"] == self.score.default["lowersection"][
                            "Full House"]:
                    self.lowerScore.getSelectedItem().setLabel2(
                        self.score.fullHouse(alldice))
            elif self.lowerScore.getSelectedPosition() == 3:
                if self.score.current["lowersection"][
                        "Sm. Straight"] == self.score.default["lowersection"][
                            "Sm. Straight"]:
                    self.lowerScore.getSelectedItem().setLabel2(
                        self.score.smStraight(alldice))
            elif self.lowerScore.getSelectedPosition() == 4:
                if self.score.current["lowersection"][
                        "Lg. Straight"] == self.score.default["lowersection"][
                            "Lg. Straight"]:
                    self.lowerScore.getSelectedItem().setLabel2(
                        self.score.lgStraight(alldice))
            elif self.lowerScore.getSelectedPosition() == 5:
                sc, sd = self.score.current["lowersection"][
                    "Yahtzee"], self.score.default["lowersection"]["Yahtzee"]
                if (sc == sd) | (sc != sd) & (not sc == "0"):
                    self.lowerScore.getSelectedItem().setLabel2(
                        self.score.yahtzee(alldice))
            elif self.lowerScore.getSelectedPosition() == 6:
                if self.score.current["lowersection"][
                        "Chance"] == self.score.default["lowersection"][
                            "Chance"]:
                    self.lowerScore.getSelectedItem().setLabel2(
                        self.score.chance(alldice))

    def onAction(self, action):
        if action == 10:
            try:
                self.setLocalScore()
            except:
                pass  #printLastError()
            self.close()
        if (action == 18) & (not self.rollDiceIsStarted):
            self.startNewGame()
            self.setNavigationOnDice()
            self.setScoreSection()
        if (action == 34) & (not self.rollDiceIsStarted):
            self.showLocalHiScore()
        if (action == 117) & (not self.rollDiceIsStarted):
            self.setScoreSection()
            if self.groupID == self.btn_dice_ex.getId():
                self.setNavigationOnScore()
            elif self.groupID == self.upperScore.getId():
                self.setNavigationOnDice()
        try:
            self.onActionScore(action)
        except:
            printLastError()

    def onControlScore(self, control):
        if (control == self.upperScore) & (self.rollDice != 3):
            if self.score.maxRolling <= 0:
                xbmc.executebuiltin(
                    "XBMC.Notification(Game Over,X New Game,4000,%s)" % XBUT)
            else:
                alldice = self.allDice()
                if self.upperScore.getSelectedPosition() == 0:
                    if self.score.current["uppersection"][
                            "Aces"] == self.score.default["uppersection"][
                                "Aces"]:
                        value = self.score.singleXDice("1", alldice)
                        self.score.current["uppersection"]["Aces"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 1:
                    if self.score.current["uppersection"][
                            "Twos"] == self.score.default["uppersection"][
                                "Twos"]:
                        value = self.score.singleXDice("2", alldice)
                        self.score.current["uppersection"]["Twos"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 2:
                    if self.score.current["uppersection"][
                            "Threes"] == self.score.default["uppersection"][
                                "Threes"]:
                        value = self.score.singleXDice("3", alldice)
                        self.score.current["uppersection"]["Threes"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 3:
                    if self.score.current["uppersection"][
                            "Fours"] == self.score.default["uppersection"][
                                "Fours"]:
                        value = self.score.singleXDice("4", alldice)
                        self.score.current["uppersection"]["Fours"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 4:
                    if self.score.current["uppersection"][
                            "Fives"] == self.score.default["uppersection"][
                                "Fives"]:
                        value = self.score.singleXDice("5", alldice)
                        self.score.current["uppersection"]["Fives"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 5:
                    if self.score.current["uppersection"][
                            "Sixes"] == self.score.default["uppersection"][
                                "Sixes"]:
                        value = self.score.singleXDice("6", alldice)
                        self.score.current["uppersection"]["Sixes"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                else:
                    pass

        if (control == self.lowerScore) & (self.rollDice != 3):
            if self.score.maxRolling <= 0:
                xbmc.executebuiltin(
                    "XBMC.Notification(Game Over,X New Game,4000,%s)" % XBUT)
            else:
                alldice = self.allDice()
                if self.lowerScore.getSelectedPosition() == 0:
                    if self.score.current["lowersection"][
                            "3 of kind"] == self.score.default["lowersection"][
                                "3 of kind"]:
                        value = self.score.ofKind(3, alldice)
                        self.score.current["lowersection"]["3 of kind"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 1:
                    if self.score.current["lowersection"][
                            "4 of kind"] == self.score.default["lowersection"][
                                "4 of kind"]:
                        value = self.score.ofKind(4, alldice)
                        self.score.current["lowersection"]["4 of kind"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 2:
                    if self.score.current["lowersection"][
                            "Full House"] == self.score.default[
                                "lowersection"]["Full House"]:
                        value = self.score.fullHouse(alldice)
                        self.score.current["lowersection"][
                            "Full House"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 3:
                    if self.score.current["lowersection"][
                            "Sm. Straight"] == self.score.default[
                                "lowersection"]["Sm. Straight"]:
                        value = self.score.smStraight(alldice)
                        self.score.current["lowersection"][
                            "Sm. Straight"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 4:
                    if self.score.current["lowersection"][
                            "Lg. Straight"] == self.score.default[
                                "lowersection"]["Lg. Straight"]:
                        value = self.score.lgStraight(alldice)
                        self.score.current["lowersection"][
                            "Lg. Straight"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 5:
                    sc, sd = self.score.current["lowersection"][
                        "Yahtzee"], self.score.default["lowersection"][
                            "Yahtzee"]
                    if (sc == sd) | (sc != sd) & (
                            "[ ]" in self.score.current["lowersection"]
                        ["Yahtzee Bonus"]) & (not sc == "0"):
                        value = self.score.yahtzee(alldice)
                        if (value == "0") & (sc == sd):
                            self.score.current["lowersection"][
                                "Yahtzee Bonus"] = str("[0] [0] [0]")
                            self.score.current["lowersection"][
                                "Yahtzee"] = value
                            self.score.maxRolling -= 3
                        elif (value == sc) | (
                            (value == "0") &
                            (sc == "50")) | ((value == "0") &
                                             (sc == "150")) | ((value == "0") &
                                                               (sc == "250")):
                            self.score.lossYahtzeeBonus()
                        elif ((value == "50") & (sc == sd)) | (
                            (value == "150") & (sc == "50")) | (
                                (value == "250") &
                                (sc == "150")) | ((value == "350") &
                                                  (sc == "250")):
                            self.score.current["lowersection"][
                                "Yahtzee"] = value
                            self.lowerScore.getSelectedItem().setLabel2(value)
                            self.score.markYahtzeeBonus()
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 6:
                    if self.score.current["lowersection"][
                            "Chance"] == self.score.default["lowersection"][
                                "Chance"]:
                        value = self.score.chance(alldice)
                        self.score.current["lowersection"]["Chance"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                else:
                    pass

    def setFinally(self):
        self.score.totalUpper()
        self.score.totalLower()
        self.score.grandTotal()
        self.score.decreaseMaxRolling()
        self.countMaxRolling.setLabel(
            str(self.score.maxRolling) + "[CR]/[CR]16")
        self.nextRound()
        self.setScoreSection()
        self.setNavigationOnDice()

    def onControl(self, control):
        if control == self.dummy: pass
        if (control == self.btn_dice_ex) & (not self.rollDiceIsStarted):
            numdice = 5 - int(
                sum([
                    self.dice_1HoldOn, self.dice_2HoldOn, self.dice_3HoldOn,
                    self.dice_4HoldOn, self.dice_5HoldOn
                ]))
            if not numdice <= 0:
                self.randomDice = self.dice.choiceDice(numdice)
                if self.rollDice > 0:
                    self.rollDiceIsStarted = 1
                    self.setFocus(self.dummy)
                    gameSounds(ROLLINGDICE)
                    try:
                        self.showAnimation()
                    except:
                        printLastError()
                    self.rollDiceIsStarted = 0
                    xbmc.sleep(500)
                    self.playSpecial()
                    self.setFocus(self.btn_dice_ex)
            self.rollDice -= 1
            if self.rollDice <= -1:
                self.setNavigationOnScore()
            elif self.rollDice == 2:
                self.roll_3.setImage(BGNORADIO)
            elif self.rollDice == 1:
                self.roll_2.setImage(BGNORADIO)
            elif self.rollDice == 0:
                self.roll_1.setImage(BGNORADIO)
                gameSounds(APPLO)
                self.setNavigationOnScore()
                if self.score.current["uppersection"][
                        "Aces"] == self.score.default["uppersection"]["Aces"]:
                    self.upperScore.getSelectedItem().setLabel2(
                        self.score.singleXDice("1", self.allDice()))
        if self.rollDice != 3:
            if control == self.btn_dice_1:
                if self.dice_1HoldOn:
                    self.dice_1Hold.setImage(BGNORADIO)
                    self.dice_1HoldOn = 0
                else:
                    self.dice_1Hold.setImage(BGRADIO)
                    self.dice_1HoldOn = 1
            if control == self.btn_dice_2:
                if self.dice_2HoldOn:
                    self.dice_2Hold.setImage(BGNORADIO)
                    self.dice_2HoldOn = 0
                else:
                    self.dice_2Hold.setImage(BGRADIO)
                    self.dice_2HoldOn = 1
            if control == self.btn_dice_3:
                if self.dice_3HoldOn:
                    self.dice_3Hold.setImage(BGNORADIO)
                    self.dice_3HoldOn = 0
                else:
                    self.dice_3Hold.setImage(BGRADIO)
                    self.dice_3HoldOn = 1
            if control == self.btn_dice_4:
                if self.dice_4HoldOn:
                    self.dice_4Hold.setImage(BGNORADIO)
                    self.dice_4HoldOn = 0
                else:
                    self.dice_4Hold.setImage(BGRADIO)
                    self.dice_4HoldOn = 1
            if control == self.btn_dice_5:
                if self.dice_5HoldOn:
                    self.dice_5Hold.setImage(BGNORADIO)
                    self.dice_5HoldOn = 0
                else:
                    self.dice_5Hold.setImage(BGRADIO)
                    self.dice_5HoldOn = 1
        else:
            pass
        try:
            self.onControlScore(control)
        except:
            printLastError()

    def playSpecial(self):
        snd = None
        alldice = self.allDice()
        if alldice.count("6") == 5: snd = BABY
        if alldice.count("5") == 5: snd = BABY
        if alldice.count("4") == 5: snd = BABY
        if alldice.count("3") == 5: snd = BABY
        if alldice.count("2") == 5: snd = BABY
        if alldice.count("1") == 5: snd = BABY
        if alldice.count("6") == 6: snd = YABBA
        if alldice.count("5") == 6: snd = YABBA
        if alldice.count("4") == 6: snd = YABBA
        if alldice.count("3") == 6: snd = YABBA
        if alldice.count("2") == 6: snd = YABBA
        if alldice.count("1") == 6: snd = YABBA
        if snd: gameSounds(snd)

    def setLocalScore(self, perfect=""):
        if self.score.maxRolling <= 0 and not self.score.isSameDict():
            if self.score.current["lowersection"]["Grand Total"] == "714":
                perfect = "*"
                self.dice_ex.setImage(TROPHYGOLD)
                xbmcgui.Dialog().ok("Perfect Game 714", "Great job %s" % name)
            keyboard = xbmc.Keyboard(
                "", "If you want to save current score enter your name.")
            keyboard.doModal()
            if keyboard.isConfirmed():
                f = open(os.path.join(CWD, "Hi-Score.txt"), "a")
                f.write(perfect + "%s, %s, %s\n" %
                        (self.score.current["lowersection"]["Grand Total"],
                         keyboard.getText(), time.ctime()))
                f.close()

    def showLocalHiScore(self):
        if os.path.exists(os.path.join(CWD, "Hi-Score.txt")):
            scorelist = file(os.path.join(CWD, "Hi-Score.txt"),
                             "r").read().split('\n')[:-1]
            scorelist.sort(key=lambda x: int(x.split(",")[0]), reverse=True)
            if len(scorelist) > 0:
                xbmcgui.Dialog().select("Yahtzee Hi-Score", scorelist)

    def setColorDice(self):
        ucd = userColorDice()
        ucd.doModal()
        color = ucd.colorDice
        self.multi = ucd.multiColor
        del ucd
        if self.multi: self.setMultiColor()
        elif color:
            self.dice_1.setColorDiffuse(color)
            self.dice_2.setColorDiffuse(color)
            self.dice_3.setColorDiffuse(color)
            self.dice_4.setColorDiffuse(color)
            self.dice_5.setColorDiffuse(color)
        self.dice_ex.setColorDiffuse('0xaaAA0000')
        self.logo.setColorDiffuse('0x80FFFFFF')

    def setMultiColor(self):
        if self.multi:
            self.dice.changeColorDice(self.multi)
            if not self.dice_1HoldOn:
                self.dice_1.setColorDiffuse(random.choice(self.multi))
            if not self.dice_2HoldOn:
                self.dice_2.setColorDiffuse(random.choice(self.multi))
            if not self.dice_3HoldOn:
                self.dice_3.setColorDiffuse(random.choice(self.multi))
            if not self.dice_4HoldOn:
                self.dice_4.setColorDiffuse(random.choice(self.multi))
            if not self.dice_5HoldOn:
                self.dice_5.setColorDiffuse(random.choice(self.multi))
Ejemplo n.º 4
0
class YAHTZEE(xbmcgui.Window):
    def __init__(self):
        self.setCoordinateResolution(6)

        self.startNewGame()

        self.addControl(xbmcgui.ControlImage(0,0,720,576, BG00))
        self.addControl(xbmcgui.ControlImage(-100,95,920,360, BG01))
        self.addControl(xbmcgui.ControlLabel(200,63,0,0, "xbox media center", 'special12', alignment=0x00000001))
        self.addControl(xbmcgui.ControlLabel(207,63,0,0, __script__, 'special13'))
        self.logo = xbmcgui.ControlImage(550,40,74,74, BG04)
        self.addControl(self.logo)

        self.countMaxRolling =  xbmcgui.ControlLabel(115,472,90,0, "", 'special12', alignment=0x00000002+0x00000004)
        self.addControl(self.countMaxRolling)
        self.countMaxRolling.setLabel(str(self.score.maxRolling)+"[CR]/[CR]16")

        # EXTRA BUTTON DICE
        self.addControl(xbmcgui.ControlLabel(50,415,90,0, ROLL, 'special13', '0xeeFF0000', alignment=0x00000002+0x00000004))
        self.btn_dice_ex = xbmcgui.ControlButton(50,430,90,90, "", font="font13", textColor='0xeeFF0000',
            focusTexture=BG02, noFocusTexture=BG03, alignment=0x00000002+0x00000004)
        self.addControl(self.btn_dice_ex)
        self.dummy = xbmcgui.ControlButton(50,430,90,90, "", focusTexture="", noFocusTexture="")
        self.addControl(self.dummy)

        # GROUP OF RADIO BUTTON ROLL (EXTRA BUTTON DICE)
        self.roll_1 = xbmcgui.ControlImage(59,520,22,22, BGRADIO)
        self.addControl(self.roll_1)
        self.roll_2 = xbmcgui.ControlImage(84,520,22,22, BGRADIO)
        self.addControl(self.roll_2)
        self.roll_3 = xbmcgui.ControlImage(109,520,22,22, BGRADIO)
        self.addControl(self.roll_3)

        # GROUP OF BUTTON DICE
        self.btn_dice_1 = xbmcgui.ControlButton(180,430,90,90, "", font="font13",
            focusTexture=BG02, noFocusTexture=BG03, alignment=0x00000002+0x00000004)
        self.addControl(self.btn_dice_1)
        self.btn_dice_2 = xbmcgui.ControlButton(275,430,90,90, "", font="font13",
            focusTexture=BG02, noFocusTexture=BG03, alignment=0x00000002+0x00000004)
        self.addControl(self.btn_dice_2)
        self.btn_dice_3 = xbmcgui.ControlButton(370,430,90,90, "", font="font13",
            focusTexture=BG02, noFocusTexture=BG03, alignment=0x00000002+0x00000004)
        self.addControl(self.btn_dice_3)
        self.btn_dice_4 = xbmcgui.ControlButton(465,430,90,90, "", font="font13",
            focusTexture=BG02, noFocusTexture=BG03, alignment=0x00000002+0x00000004)
        self.addControl(self.btn_dice_4)
        self.btn_dice_5 = xbmcgui.ControlButton(560,430,90,90, "", font="font13",
            focusTexture=BG02, noFocusTexture=BG03, alignment=0x00000002+0x00000004)
        self.addControl(self.btn_dice_5)

        # GROUP OF RADIO BUTTON DICE
        self.dice_1Hold = xbmcgui.ControlImage(214,520,22,22, BGNORADIO)
        self.addControl(self.dice_1Hold)
        self.dice_2Hold = xbmcgui.ControlImage(309,520,22,22, BGNORADIO)
        self.addControl(self.dice_2Hold)
        self.dice_3Hold = xbmcgui.ControlImage(404,520,22,22, BGNORADIO)
        self.addControl(self.dice_3Hold)
        self.dice_4Hold = xbmcgui.ControlImage(499,520,22,22, BGNORADIO)
        self.addControl(self.dice_4Hold)
        self.dice_5Hold = xbmcgui.ControlImage(594,520,22,22, BGNORADIO)
        self.addControl(self.dice_5Hold)

        # GROUP OF BUTTON SCORE
        self.upperScore = xbmcgui.ControlList(
            87,120,270,350, font = "font13",
            textColor = "0xFFFFFFFF", selectedColor = "0xFFFF9600",
            buttonFocusTexture = BG05,
            buttonTexture = BG06,
            itemTextXOffset = -10, itemHeight = 28)
        self.addControl(self.upperScore)

        self.lowerScore = xbmcgui.ControlList(
            363,120,270,350, font = "font13",
            textColor = "0xFFFFFFFF", selectedColor = "0xFFFF9600",
            buttonFocusTexture = BG05,
            buttonTexture = BG06,
            itemTextXOffset = -10, itemHeight = 28)
        self.addControl(self.lowerScore)

        # EXTRA DICE
        self.dice_ex = xbmcgui.ControlImage(CHEXDICE[0], CHEXDICE[1], CHEXDICE[2], CHEXDICE[3], DICEBG % self.dice.ex)
        self.addControl(self.dice_ex)
        # GROUP OF DICE
        self.dice_1  = xbmcgui.ControlImage(CH01DICE[0], CH01DICE[1], CH01DICE[2], CH01DICE[3], DICEBG % self.dice.d1)
        self.addControl(self.dice_1)
        self.dice_2  = xbmcgui.ControlImage(CH02DICE[0], CH02DICE[1], CH02DICE[2], CH02DICE[3], DICEBG % self.dice.d2)
        self.addControl(self.dice_2)
        self.dice_3  = xbmcgui.ControlImage(CH03DICE[0], CH03DICE[1], CH03DICE[2], CH03DICE[3], DICEBG % self.dice.d3)
        self.addControl(self.dice_3)
        self.dice_4  = xbmcgui.ControlImage(CH04DICE[0], CH04DICE[1], CH04DICE[2], CH04DICE[3], DICEBG % self.dice.d4)
        self.addControl(self.dice_4)
        self.dice_5  = xbmcgui.ControlImage(CH05DICE[0], CH05DICE[1], CH05DICE[2], CH05DICE[3], DICEBG % self.dice.d5)
        self.addControl(self.dice_5)

        self.setNavigationOnDice()
        self.setHoldForNewGame()
        self.setScoreSection()
        self.setColorDice()

    def showAnimation(self):
        #self.diffXzoom = ANIMZOOM*(50 - CHEXDICE[0])
        #self.diffYzoom = ANIMZOOM*( 0 - CHEXDICE[1])
        #self.diffXzoom = ANIMZOOM*(random.choice(range(-360, 360)) - CHEXDICE[0])
        #self.diffYzoom = ANIMZOOM*(random.choice(range(-288, 288)) - CHEXDICE[1])
        self.diffXzoom = ANIMZOOM*(random.choice(range(-720, 720)))
        self.diffYzoom = ANIMZOOM*(random.choice(range(-576, 576)))
        self.diffWzoom = ANIMZOOM*(CHEXDICE[2] - 1)
        self.diffHzoom = ANIMZOOM*(CHEXDICE[3] - 1)
        if not MULTICOLORONROLLING: self.setMultiColor()
        for zoompos in range(STEP, -1, -1):
            self.zoomAnimation(zoompos)
            if MULTICOLORONROLLING: self.setMultiColor()
            time.sleep(0.01)

    def zoomAnimation(self, pct):
        elmt_stepX = float(self.diffXzoom)/float(STEP)
        elmt_stepY = float(self.diffYzoom)/float(STEP)
        elmt_stepW = float(self.diffWzoom)/float(STEP)
        elmt_stepH = float(self.diffHzoom)/float(STEP)
        deltaX     = int(pct*elmt_stepX)
        deltaY     = int(pct*elmt_stepY)
        deltaW     = int(pct*elmt_stepW)
        deltaH     = int(pct*elmt_stepH)
        if not self.dice_1HoldOn:
            self.dice_1.setPosition(CH01DICE[0]+deltaX, CH01DICE[1]+deltaY)
            self.dice_1.setWidth(   CH01DICE[2]-deltaW)
            self.dice_1.setHeight(  CH01DICE[3]-deltaH)
            self.dice.d1 = str(random.choice(self.randomDice))
            self.dice_1.setImage(DICEBG % self.dice.d1)
        if not self.dice_2HoldOn:
            self.dice_2.setPosition(CH02DICE[0]+deltaX, CH02DICE[1]+deltaY)
            self.dice_2.setWidth(   CH02DICE[2]-deltaW)
            self.dice_2.setHeight(  CH02DICE[3]-deltaH)
            self.dice.d2 = str(random.choice(self.randomDice))
            self.dice_2.setImage(DICEBG % self.dice.d2)
        if not self.dice_3HoldOn:
            self.dice_3.setPosition(CH03DICE[0]+deltaX, CH03DICE[1]+deltaY)
            self.dice_3.setWidth(   CH03DICE[2]-deltaW)
            self.dice_3.setHeight(  CH03DICE[3]-deltaH)
            self.dice.d3 = str(random.choice(self.randomDice))
            self.dice_3.setImage(DICEBG % self.dice.d3)
        if not self.dice_4HoldOn:
            self.dice_4.setPosition(CH04DICE[0]+deltaX, CH04DICE[1]+deltaY)
            self.dice_4.setWidth(   CH04DICE[2]-deltaW)
            self.dice_4.setHeight(  CH04DICE[3]-deltaH)
            self.dice.d4 = str(random.choice(self.randomDice))
            self.dice_4.setImage(DICEBG % self.dice.d4)
        if not self.dice_5HoldOn:
            self.dice_5.setPosition(CH05DICE[0]+deltaX, CH05DICE[1]+deltaY)
            self.dice_5.setWidth(   CH05DICE[2]-deltaW)
            self.dice_5.setHeight(  CH05DICE[3]-deltaH)
            self.dice.d5 = str(random.choice(self.randomDice))
            self.dice_5.setImage(DICEBG % self.dice.d5)
        if self.rollDice == 3:
            self.dice_ex.setPosition(CHEXDICE[0]+deltaX, CHEXDICE[1]+deltaY)
            self.dice_ex.setWidth(   CHEXDICE[2]-deltaW)
            self.dice_ex.setHeight(  CHEXDICE[3]-deltaH)
            self.dice.ex = str(random.choice(self.randomDice))
            self.dice_ex.setImage(DICEBG % self.dice.ex)

    def setNavigationOnDice(self):
        self.groupID = self.btn_dice_ex.getId()
        self.btn_dice_ex.setNavigation(self.btn_dice_ex, self.btn_dice_ex, self.btn_dice_5,  self.btn_dice_1)
        self.btn_dice_1.setNavigation( self.btn_dice_1,  self.btn_dice_1,  self.btn_dice_ex, self.btn_dice_2)
        self.btn_dice_2.setNavigation( self.btn_dice_2,  self.btn_dice_2,  self.btn_dice_1,  self.btn_dice_3)
        self.btn_dice_3.setNavigation( self.btn_dice_3,  self.btn_dice_3,  self.btn_dice_2,  self.btn_dice_4)
        self.btn_dice_4.setNavigation( self.btn_dice_4,  self.btn_dice_4,  self.btn_dice_3,  self.btn_dice_5)
        self.btn_dice_5.setNavigation( self.btn_dice_5,  self.btn_dice_5,  self.btn_dice_4,  self.btn_dice_ex)
        self.setFocus(self.btn_dice_ex)

    def setNavigationOnScore(self):
        self.groupID = self.upperScore.getId()
        self.upperScore.setNavigation(self.upperScore, self.upperScore, self.lowerScore, self.lowerScore)
        self.lowerScore.setNavigation(self.lowerScore, self.lowerScore, self.upperScore, self.upperScore)
        self.setFocus(self.upperScore)

    def startNewGame(self):
        try: self.setLocalScore()
        except: pass#printLastError()
        self.score = SCORE()
        self.score.reset()
        self.nextRound()
        try: self.countMaxRolling.setLabel(str(self.score.maxRolling)+"[CR]/[CR]16")
        except: pass
        xbmc.executebuiltin("XBMC.Notification(Yahrzee,New Game,4000,%s)" % TROPHYGOLD)

    def nextRound(self):
        if self.score.maxRolling > 0:
            self.dice = DICE()
            self.randomDice = self.dice.choiceDice(6)
            self.dice.d1 = str(random.choice(self.randomDice))
            self.dice.d2 = str(random.choice(self.randomDice))
            self.dice.d3 = str(random.choice(self.randomDice))
            self.dice.d4 = str(random.choice(self.randomDice))
            self.dice.d5 = str(random.choice(self.randomDice))
            self.dice.ex = str(random.choice(self.randomDice))
            self.rollDice = 3
            self.rollDiceIsStarted = 0
            try: self.setHoldForNewGame()
            except: pass
        if self.score.maxRolling <= 0:
            xbmc.executebuiltin("XBMC.Notification(Game Over,X New Game,4000,%s)" % XBUT)

    def setHoldForNewGame(self):
        self.dice_1HoldOn = 0
        self.dice_2HoldOn = 0
        self.dice_3HoldOn = 0
        self.dice_4HoldOn = 0
        self.dice_5HoldOn = 0
        self.roll_1.setImage(BGRADIO)
        self.roll_2.setImage(BGRADIO)
        self.roll_3.setImage(BGRADIO)
        self.dice_1Hold.setImage(BGNORADIO)
        self.dice_2Hold.setImage(BGNORADIO)
        self.dice_3Hold.setImage(BGNORADIO)
        self.dice_4Hold.setImage(BGNORADIO)
        self.dice_5Hold.setImage(BGNORADIO)

    def setScoreSection(self):
        self.setScoreUpperSection()
        self.setScoreLowerSection()

    def setScoreUpperSection(self):
        self.upperScore.reset()
        listlabel = [self.score.current["uppersection"]["Aces"], self.score.current["uppersection"]["Twos"],
                     self.score.current["uppersection"]["Threes"], self.score.current["uppersection"]["Fours"],
                     self.score.current["uppersection"]["Fives"], self.score.current["uppersection"]["Sixes"],
                     self.score.current["uppersection"]["SubTotal"], self.score.current["uppersection"]["Bonus"],
                     self.score.current["uppersection"]["Total Upper"]]
        [self.upperScore.addItem(xbmcgui.ListItem(label=str(l), label2=str(l2))) for l, l2 in zip(NAMEOFUPPERSECTION, listlabel)]

    def setScoreLowerSection(self):
        self.lowerScore.reset()
        listlabel = [self.score.current["lowersection"]["3 of kind"], self.score.current["lowersection"]["4 of kind"],
                     self.score.current["lowersection"]["Full House"], self.score.current["lowersection"]["Sm. Straight"],
                     self.score.current["lowersection"]["Lg. Straight"], self.score.current["lowersection"]["Yahtzee"],
                     self.score.current["lowersection"]["Chance"], self.score.current["lowersection"]["Yahtzee Bonus"],
                     self.score.current["lowersection"]["Total Lower"], self.score.current["lowersection"]["Grand Total"]]
        [self.lowerScore.addItem(xbmcgui.ListItem(label=str(l), label2=str(l2))) for l, l2 in zip(NAMEOFLOWERSECTION, listlabel)]

    def allDice(self):
        return [self.dice.ex, self.dice.d1, self.dice.d2, self.dice.d3, self.dice.d4, self.dice.d5]

    def onActionScore(self, action):
        if self.getFocus() == self.upperScore and self.upperScore.getSelectedPosition() != -1:
            alldice = self.allDice()
            self.setScoreLowerSection()
            if   self.upperScore.getSelectedPosition() == 6: self.upperScore.selectItem(0)
            elif self.upperScore.getSelectedPosition() == 8: self.upperScore.selectItem(5)
            if self.upperScore.getSelectedPosition() == 0:
                if self.score.current["uppersection"]["Aces"] == self.score.default["uppersection"]["Aces"]:
                    self.upperScore.getSelectedItem().setLabel2(self.score.singleXDice("1", alldice))
            elif self.upperScore.getSelectedPosition() == 1:
                if self.score.current["uppersection"]["Twos"] == self.score.default["uppersection"]["Twos"]:
                    self.upperScore.getSelectedItem().setLabel2(self.score.singleXDice("2", alldice))
            elif self.upperScore.getSelectedPosition() == 2:
                if self.score.current["uppersection"]["Threes"] == self.score.default["uppersection"]["Threes"]:
                    self.upperScore.getSelectedItem().setLabel2(self.score.singleXDice("3", alldice))
            elif self.upperScore.getSelectedPosition() == 3:
                if self.score.current["uppersection"]["Fours"] == self.score.default["uppersection"]["Fours"]:
                    self.upperScore.getSelectedItem().setLabel2(self.score.singleXDice("4", alldice))
            elif self.upperScore.getSelectedPosition() == 4:
                if self.score.current["uppersection"]["Fives"] == self.score.default["uppersection"]["Fives"]:
                    self.upperScore.getSelectedItem().setLabel2(self.score.singleXDice("5", alldice))
            elif self.upperScore.getSelectedPosition() == 5:
                if self.score.current["uppersection"]["Sixes"] == self.score.default["uppersection"]["Sixes"]:
                    self.upperScore.getSelectedItem().setLabel2(self.score.singleXDice("6", alldice))

        elif self.getFocus() == self.lowerScore and self.lowerScore.getSelectedPosition() != -1:
            alldice = self.allDice()
            self.setScoreUpperSection()
            if   self.lowerScore.getSelectedPosition() == 7: self.lowerScore.selectItem(0)
            elif self.lowerScore.getSelectedPosition() == 9: self.lowerScore.selectItem(6)
            if self.lowerScore.getSelectedPosition() == 0:
                if self.score.current["lowersection"]["3 of kind"] == self.score.default["lowersection"]["3 of kind"]:
                    self.lowerScore.getSelectedItem().setLabel2(self.score.ofKind(3, alldice))
            elif self.lowerScore.getSelectedPosition() == 1:
                if self.score.current["lowersection"]["4 of kind"] == self.score.default["lowersection"]["4 of kind"]:
                    self.lowerScore.getSelectedItem().setLabel2(self.score.ofKind(4, alldice))
            elif self.lowerScore.getSelectedPosition() == 2:
                if self.score.current["lowersection"]["Full House"] == self.score.default["lowersection"]["Full House"]:
                    self.lowerScore.getSelectedItem().setLabel2(self.score.fullHouse(alldice))
            elif self.lowerScore.getSelectedPosition() == 3:
                if self.score.current["lowersection"]["Sm. Straight"] == self.score.default["lowersection"]["Sm. Straight"]:
                    self.lowerScore.getSelectedItem().setLabel2(self.score.smStraight(alldice))
            elif self.lowerScore.getSelectedPosition() == 4:
                if self.score.current["lowersection"]["Lg. Straight"] == self.score.default["lowersection"]["Lg. Straight"]:
                    self.lowerScore.getSelectedItem().setLabel2(self.score.lgStraight(alldice))
            elif self.lowerScore.getSelectedPosition() == 5:
                sc, sd = self.score.current["lowersection"]["Yahtzee"], self.score.default["lowersection"]["Yahtzee"]
                if (sc == sd)|(sc != sd)&(not sc == "0"):
                    self.lowerScore.getSelectedItem().setLabel2(self.score.yahtzee(alldice))
            elif self.lowerScore.getSelectedPosition() == 6:
                if self.score.current["lowersection"]["Chance"] == self.score.default["lowersection"]["Chance"]:
                    self.lowerScore.getSelectedItem().setLabel2(self.score.chance(alldice))

    def onAction(self, action):
        if action == 10:
            try: self.setLocalScore()
            except: pass#printLastError()
            self.close()
        if (action == 18)&(not self.rollDiceIsStarted):
            self.startNewGame()
            self.setNavigationOnDice()
            self.setScoreSection()
        if (action == 34)&(not self.rollDiceIsStarted):
            self.showLocalHiScore()
        if (action == 117)&(not self.rollDiceIsStarted):
            self.setScoreSection()
            if self.groupID == self.btn_dice_ex.getId(): self.setNavigationOnScore()
            elif self.groupID == self.upperScore.getId(): self.setNavigationOnDice()
        try: self.onActionScore(action)
        except: printLastError()

    def onControlScore(self, control):
        if (control == self.upperScore)&(self.rollDice != 3):
            if self.score.maxRolling <= 0:
                xbmc.executebuiltin("XBMC.Notification(Game Over,X New Game,4000,%s)" % XBUT)
            else:
                alldice = self.allDice()
                if self.upperScore.getSelectedPosition() == 0:
                    if self.score.current["uppersection"]["Aces"] == self.score.default["uppersection"]["Aces"]:
                        value = self.score.singleXDice("1", alldice)
                        self.score.current["uppersection"]["Aces"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 1:
                    if self.score.current["uppersection"]["Twos"] == self.score.default["uppersection"]["Twos"]:
                        value = self.score.singleXDice("2", alldice)
                        self.score.current["uppersection"]["Twos"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 2:
                    if self.score.current["uppersection"]["Threes"] == self.score.default["uppersection"]["Threes"]:
                        value = self.score.singleXDice("3", alldice)
                        self.score.current["uppersection"]["Threes"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 3:
                    if self.score.current["uppersection"]["Fours"] == self.score.default["uppersection"]["Fours"]:
                        value = self.score.singleXDice("4", alldice)
                        self.score.current["uppersection"]["Fours"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 4:
                    if self.score.current["uppersection"]["Fives"] == self.score.default["uppersection"]["Fives"]:
                        value = self.score.singleXDice("5", alldice)
                        self.score.current["uppersection"]["Fives"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.upperScore.getSelectedPosition() == 5:
                    if self.score.current["uppersection"]["Sixes"] == self.score.default["uppersection"]["Sixes"]:
                        value = self.score.singleXDice("6", alldice)
                        self.score.current["uppersection"]["Sixes"] = value
                        self.upperScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                else: pass

        if (control == self.lowerScore)&(self.rollDice != 3):
            if self.score.maxRolling <= 0:
                xbmc.executebuiltin("XBMC.Notification(Game Over,X New Game,4000,%s)" % XBUT)
            else:
                alldice = self.allDice()
                if self.lowerScore.getSelectedPosition() == 0:
                    if self.score.current["lowersection"]["3 of kind"] == self.score.default["lowersection"]["3 of kind"]:
                        value = self.score.ofKind(3, alldice)
                        self.score.current["lowersection"]["3 of kind"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 1:
                    if self.score.current["lowersection"]["4 of kind"] == self.score.default["lowersection"]["4 of kind"]:
                        value = self.score.ofKind(4, alldice)
                        self.score.current["lowersection"]["4 of kind"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 2:
                    if self.score.current["lowersection"]["Full House"] == self.score.default["lowersection"]["Full House"]:
                        value = self.score.fullHouse(alldice)
                        self.score.current["lowersection"]["Full House"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 3:
                    if self.score.current["lowersection"]["Sm. Straight"] == self.score.default["lowersection"]["Sm. Straight"]:
                        value = self.score.smStraight(alldice)
                        self.score.current["lowersection"]["Sm. Straight"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 4:
                    if self.score.current["lowersection"]["Lg. Straight"] == self.score.default["lowersection"]["Lg. Straight"]:
                        value = self.score.lgStraight(alldice)
                        self.score.current["lowersection"]["Lg. Straight"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 5:
                    sc, sd = self.score.current["lowersection"]["Yahtzee"], self.score.default["lowersection"]["Yahtzee"]
                    if (sc == sd)|(sc != sd)&("[ ]" in self.score.current["lowersection"]["Yahtzee Bonus"])&(not sc == "0"):
                        value = self.score.yahtzee(alldice)
                        if (value == "0")&(sc == sd):
                            self.score.current["lowersection"]["Yahtzee Bonus"] = str("[0] [0] [0]")
                            self.score.current["lowersection"]["Yahtzee"] = value
                            self.score.maxRolling -= 3
                        elif (value == sc)|((value == "0")&(sc == "50"))|((value == "0")&(sc == "150"))|((value == "0")&(sc == "250")):
                            self.score.lossYahtzeeBonus()
                        elif ((value == "50")&(sc == sd))|((value == "150")&(sc == "50"))|((value == "250")&(sc == "150"))|((value == "350")&(sc == "250")):
                            self.score.current["lowersection"]["Yahtzee"] = value
                            self.lowerScore.getSelectedItem().setLabel2(value)
                            self.score.markYahtzeeBonus()
                        self.setFinally()
                elif self.lowerScore.getSelectedPosition() == 6:
                    if self.score.current["lowersection"]["Chance"] == self.score.default["lowersection"]["Chance"]:
                        value = self.score.chance(alldice)
                        self.score.current["lowersection"]["Chance"] = value
                        self.lowerScore.getSelectedItem().setLabel2(value)
                        self.setFinally()
                else: pass

    def setFinally(self):
        self.score.totalUpper()
        self.score.totalLower()
        self.score.grandTotal()
        self.score.decreaseMaxRolling()
        self.countMaxRolling.setLabel(str(self.score.maxRolling)+"[CR]/[CR]16")
        self.nextRound()
        self.setScoreSection()
        self.setNavigationOnDice()

    def onControl(self, control):
        if control == self.dummy: pass
        if (control == self.btn_dice_ex)&(not self.rollDiceIsStarted):
            numdice = 5-int(sum([self.dice_1HoldOn, self.dice_2HoldOn, self.dice_3HoldOn, self.dice_4HoldOn, self.dice_5HoldOn]))
            if not numdice <= 0:
                self.randomDice = self.dice.choiceDice(numdice)
                if self.rollDice > 0:
                    self.rollDiceIsStarted = 1
                    self.setFocus(self.dummy)
                    gameSounds(ROLLINGDICE)
                    try: self.showAnimation()
                    except: printLastError()
                    self.rollDiceIsStarted = 0
                    xbmc.sleep(500)
                    self.playSpecial()
                    self.setFocus(self.btn_dice_ex)
            self.rollDice -= 1
            if self.rollDice <= -1:
                self.setNavigationOnScore()
            elif self.rollDice == 2:
                self.roll_3.setImage(BGNORADIO)
            elif self.rollDice == 1:
                self.roll_2.setImage(BGNORADIO)
            elif self.rollDice == 0:
                self.roll_1.setImage(BGNORADIO)
                gameSounds(APPLO)
                self.setNavigationOnScore()
                if self.score.current["uppersection"]["Aces"] == self.score.default["uppersection"]["Aces"]:
                    self.upperScore.getSelectedItem().setLabel2(self.score.singleXDice("1", self.allDice()))
        if self.rollDice != 3:
            if control == self.btn_dice_1:
                if self.dice_1HoldOn:
                    self.dice_1Hold.setImage(BGNORADIO)
                    self.dice_1HoldOn = 0
                else:
                    self.dice_1Hold.setImage(BGRADIO)
                    self.dice_1HoldOn = 1
            if control == self.btn_dice_2:
                if self.dice_2HoldOn:
                    self.dice_2Hold.setImage(BGNORADIO)
                    self.dice_2HoldOn = 0
                else:
                    self.dice_2Hold.setImage(BGRADIO)
                    self.dice_2HoldOn = 1
            if control == self.btn_dice_3:
                if self.dice_3HoldOn:
                    self.dice_3Hold.setImage(BGNORADIO)
                    self.dice_3HoldOn = 0
                else:
                    self.dice_3Hold.setImage(BGRADIO)
                    self.dice_3HoldOn = 1
            if control == self.btn_dice_4:
                if self.dice_4HoldOn:
                    self.dice_4Hold.setImage(BGNORADIO)
                    self.dice_4HoldOn = 0
                else:
                    self.dice_4Hold.setImage(BGRADIO)
                    self.dice_4HoldOn = 1
            if control == self.btn_dice_5:
                if self.dice_5HoldOn:
                    self.dice_5Hold.setImage(BGNORADIO)
                    self.dice_5HoldOn = 0
                else:
                    self.dice_5Hold.setImage(BGRADIO)
                    self.dice_5HoldOn = 1
        else: pass
        try: self.onControlScore(control)
        except: printLastError()

    def playSpecial(self):
        snd = None
        alldice = self.allDice()
        if alldice.count("6") == 5: snd = BABY
        if alldice.count("5") == 5: snd = BABY
        if alldice.count("4") == 5: snd = BABY
        if alldice.count("3") == 5: snd = BABY
        if alldice.count("2") == 5: snd = BABY
        if alldice.count("1") == 5: snd = BABY
        if alldice.count("6") == 6: snd = YABBA
        if alldice.count("5") == 6: snd = YABBA
        if alldice.count("4") == 6: snd = YABBA
        if alldice.count("3") == 6: snd = YABBA
        if alldice.count("2") == 6: snd = YABBA
        if alldice.count("1") == 6: snd = YABBA
        if snd: gameSounds(snd)

    def setLocalScore(self, perfect=""):
        if self.score.maxRolling <= 0 and not self.score.isSameDict():
            if self.score.current["lowersection"]["Grand Total"] == "714":
                perfect="*"
                self.dice_ex.setImage(TROPHYGOLD)
                xbmcgui.Dialog().ok("Perfect Game 714", "Great job %s" % name)
            keyboard = xbmc.Keyboard("", "If you want to save current score enter your name.")
            keyboard.doModal()
            if keyboard.isConfirmed():
                f = open(os.path.join(CWD, "Hi-Score.txt"), "a")
                f.write(perfect+"%s, %s, %s\n" % (self.score.current["lowersection"]["Grand Total"], keyboard.getText(), time.ctime()))
                f.close()

    def showLocalHiScore(self):
        if os.path.exists(os.path.join(CWD, "Hi-Score.txt")):
            scorelist = file(os.path.join(CWD, "Hi-Score.txt"), "r").read().split('\n')[:-1]
            scorelist.sort(key=lambda x: int(x.split(",")[0]), reverse=True)
            if len(scorelist) > 0: xbmcgui.Dialog().select("Yahtzee Hi-Score", scorelist)

    def setColorDice(self):
        ucd = userColorDice()
        ucd.doModal()
        color = ucd.colorDice
        self.multi = ucd.multiColor
        del ucd
        if self.multi: self.setMultiColor()
        elif color:
            self.dice_1.setColorDiffuse(color)
            self.dice_2.setColorDiffuse(color)
            self.dice_3.setColorDiffuse(color)
            self.dice_4.setColorDiffuse(color)
            self.dice_5.setColorDiffuse(color)
        self.dice_ex.setColorDiffuse('0xaaAA0000')
        self.logo.setColorDiffuse('0x80FFFFFF')

    def setMultiColor(self):
        if self.multi:
            self.dice.changeColorDice(self.multi)
            if not self.dice_1HoldOn: self.dice_1.setColorDiffuse(random.choice(self.multi))
            if not self.dice_2HoldOn: self.dice_2.setColorDiffuse(random.choice(self.multi))
            if not self.dice_3HoldOn: self.dice_3.setColorDiffuse(random.choice(self.multi))
            if not self.dice_4HoldOn: self.dice_4.setColorDiffuse(random.choice(self.multi))
            if not self.dice_5HoldOn: self.dice_5.setColorDiffuse(random.choice(self.multi))