Example #1
0
    def throwForPowerpoints(self):
        playerLabelTemplate = Text("PLAYER NAME",
                                   200,
                                   200,
                                   400,
                                   100,
                                   txtSize=50)
        ppLabelTemplate = Text("+1k", 200, 500, 600, 100, txtSize=50)

        i = 0
        for playerIndex in self.selectedPlayers:
            dice = self.randomizer()
            x = 200 + 400 * i
            self.pages[self.PHASE_GET_POWERPOINTS].add(
                playerLabelTemplate.copy(x=x,
                                         txt=self.playerNames[playerIndex]))
            img = self.files.getImage("dice" + str(dice))
            self.pages[self.PHASE_GET_POWERPOINTS].add(Image(
                img, x, 400, True))
            if (dice >= 5):
                pp = self.getPlayerPowerpoints(
                    playerIndex) + 1  #Give an extra powerpoint to the player
                self.setPlayerPowerpoints(playerIndex, pp)
                self.pages[self.PHASE_GET_POWERPOINTS].add(
                    ppLabelTemplate.copy(x=x))
            i += 1
Example #2
0
    def __init__(self):
        self.toMainMenu = False
        self.pages = [Page()]
        self.mainPage = Page()
        self.pages[0].add(self.mainPage)

        def onBackClick(button):
            self.toMainMenu = True

        #page items
        self.backButton = Button(960, 900, onClick=onBackClick, txt='Terug')
        self.titleText = Text('Credits',
                              960,
                              150,
                              960,
                              150,
                              txtColor=(255, 255, 255),
                              txtSize=100)
        self.bodyText = Text(
            'de Legende van Habam -Digital Companion-\neen project voor de Hogeschool Rotterdam, opleiding Informatica\nhttps://www.hogeschoolrotterdam.nl/\n(c) 2019 INF1C Groep 1\n\nOntwikkeld door:\nMahmoud Arab\nHakan Dalama\nAudi van Gog\nBastiaan te Veldhuis\n\nMet dank aan:\nAron van den Eng\nGert-Jan den Heijer\nAstrid van Duuren\n\nGemaakt met Python in Processing 3',
            960,
            540,
            1960,
            700,
            txtColor=(255, 255, 255),
            txtSize=32)
        #to add items
        self.pages[0].add(self.backButton)
        self.pages[0].add(self.titleText)
        self.pages[0].add(self.bodyText)
Example #3
0
    def __init__(self, spelverloop):
        self.spelverloop = spelverloop
        self.page = Page()
        self.page.add(
            Text("Spelverloop",
                 500,
                 100,
                 500,
                 80,
                 txtSize=40,
                 txtColor=(255, 255, 255)))  #header
        self.currentDayText = Text("Dag 1",
                                   500,
                                   140,
                                   500,
                                   80,
                                   txtSize=32,
                                   txtColor=(240, 240, 240))
        self.page.add(self.currentDayText)

        self.goBackToMainMenu = False

        def onNextTurnClick(button):
            self.spelverloop.nextTurn()

        def onBackClick(button):
            self.goBackToMainMenu = True

        self.page.add(
            Button(500, 500, txt="Volgende beurt", onClick=onNextTurnClick))
        self.page.add(Button(500, 600, txt="Terug", onClick=onBackClick))

        self.turnLabelValues = {
            Turn.PLAYER_1: "Speler 1",
            Turn.PLAYER_2: "Speler 2",
            Turn.PLAYER_3: "Speler 3",
            Turn.PLAYER_4: "Speler 4",
            Turn.ACTIONCARD: "Pak een\nactiekaart",
            Turn.ENEMIES: "Tegenstanders\n gaan vooruit",
            Turn.GET_GRAIN: "Krijg\n graan",
            Turn.GET_RESOURCES: "Krijg\n resources"
        }

        self.turnLabels = [
            Text(self.turnLabelValues[i],
                 100 + 120 * i,
                 300,
                 200,
                 50,
                 txtSize=20,
                 txtColor=(self.TURN_COLOR_DEFAULT)) for i in range(Turn.END)
        ]

        for label in self.turnLabels:
            self.page.add(label)
 def __init__(self):
     self.toMainMenu = False
     self.pages = [Page()]
     self.mainPage = Page()
     self.pages[0].add(self.mainPage)
     def onBackClick(button):
         self.toMainMenu = True
     #page items
     self.backButton = Button(960, 700, onClick = onBackClick, txt = 'Terug')
     self.titleText = Text("Spelernamen", 960, 150, 960, 150, txtColor=(255,255,255), txtSize = 100)
     self.p1name = TextField(960, 300, placeHolder = 'Speler 1')
     self.p2name = TextField(960, 380, placeHolder = 'Speler 2')
     self.p3name = TextField(960, 460, placeHolder = 'Speler 3')
     self.p4name = TextField(960, 540, placeHolder = 'Speler 4')
     #to add items
     self.pages[0].add(self.backButton)
     self.pages[0].add(self.titleText)
     self.pages[0].add(self.p1name)
     self.pages[0].add(self.p2name)
     self.pages[0].add(self.p3name)
     self.pages[0].add(self.p4name)
Example #5
0
    def fight(self):
        MAX_DICES_PLAYER = 2
        MAX_DICES_ENEMY = 2

        playerPPDictOrig = dict()  #powerpoints without effects
        playerPPDict = dict(
        )  #amount of powerpoints of each player [int per key]
        playerEyesDict = dict(
        )  #eyes of thrown dices per player [int array per key]
        playerTotalDict = dict()  #Powerpoints + thrown eyes per player
        playerTotal = 0  #Sum of playerTotalDict

        playerPPStrings = ["", "", "", ""]

        for i in self.selectedPlayers:
            playerPPDictOrig[i] = self.getPlayerPowerpoints(i)
            playerEffects = self.effecten[i]
            if self.EFFECT_MUL_2PP in playerEffects and self.EFFECT_ADD_2PP in playerEffects:
                playerPPDict[i] = playerPPDictOrig[i] * 2 + 2
                playerPPStrings[i] = str(
                    playerPPDictOrig[i]) + "k x 2 + 2 = " + str(
                        playerPPDict[i]) + "k"
            elif self.EFFECT_MUL_2PP in playerEffects:
                playerPPDict[i] = playerPPDictOrig[i] * 2
                playerPPStrings[i] = str(
                    playerPPDictOrig[i]) + "k x 2 = " + str(
                        playerPPDict[i]) + "k"
            elif self.EFFECT_ADD_2PP in playerEffects:
                playerPPDict[i] = playerPPDictOrig[i] + 2
                playerPPStrings[i] = str(
                    playerPPDictOrig[i]) + "k + 2 = " + str(
                        playerPPDict[i]) + "k"
            else:
                playerPPDict[i] = playerPPDictOrig[i]
                playerPPStrings[i] = str(playerPPDict[i]) + "k"

            playerEyesDict[i] = [
                random.randint(1, 6) for _ in range(MAX_DICES_PLAYER)
            ]
            playerTotalDict[i] = playerPPDict[i] + max(
                playerEyesDict[i]
            )  #Get the highest thrown die + player powerpoints
            playerTotal += playerTotalDict[i]
        enemyPP = self.getEnemyPowerpoints(self.enemy)

        enemyDices = [random.randint(1, 6) for _ in range(MAX_DICES_ENEMY)]
        enemyEyes = max(enemyDices)

        enemyTotal = enemyPP + enemyEyes

        resultText = ""
        self.backButton.enabled = True
        self.getPPButton.enabled = False
        if (playerTotal > enemyTotal):  #GEWONNEN
            resultText = ["Je hebt gewonnen!", "Jullie hebben gewonnen!"
                          ][len(self.selectedPlayers) > 1]
            self.tellers.win_points += 1
            self.resetButton.enabled = False
            self.getPPButton.enabled = True
        elif (playerTotal < enemyTotal):  #VERLOREN
            resultText = ["Je hebt verloren!", "Jullie hebben verloren!"
                          ][len(self.selectedPlayers) > 1]
            self.resetButton.enabled = True
            playersToRemove = set()
            for i in self.selectedPlayers:
                if self.getPlayerPowerpoints(i) >= 0:
                    self.setPlayerPowerpoints(i,
                                              self.getPlayerPowerpoints(i) - 1)
                if self.getPlayerPowerpoints(i) < 0:
                    if (self.EFFECT_EXTRA_TRY in self.effecten[i]):
                        self.effecten[i].remove(
                            self.EFFECT_EXTRA_TRY
                        )  #Je mag het maar 1 keer gebruiken
                        self.setPlayerPowerpoints(i, 0)
                    else:
                        playerEffects = self.effecten[i]
                        if (self.EFFECT_OUT_2DAYS in playerEffects):
                            self.setPlayerPowerpoints(
                                i, -self.RESPAWN_LESS_WAIT_TIME
                            )  #Met effectkaart 14 hoeft de speler maar 2 dagen te wachten
                        else:
                            self.setPlayerPowerpoints(
                                i, -self.RESPAWN_WAIT_TIME
                            )  #De speler mag voor een paar dagen niet meedoen
                        playersToRemove.add(i)

            for i in playersToRemove:
                self.selectedPlayers.remove(i)

            if (len(self.selectedPlayers) == 0):
                self.backButton.enabled = True
                self.resetButton.enabled = False
        else:  #GELIJKSPEL
            resultText = "Gelijkspel!"
            self.resetButton.enabled = True
        self.headers[self.PHASE_RESULT].txt = resultText

        print("---FIGHT---")
        print("playerPPDict", playerPPDict)
        print("playerEyesDict", playerEyesDict)
        print("playerTotalDict", playerTotalDict)
        print("playerTotal", playerTotal)
        print("enemyTotal", enemyTotal)

        self.resultValuesPage.clear()

        y = 250
        for playerIndex in playerEyesDict:
            x = 960 - 500
            playerText = Text(self.playerNames[playerIndex] + " (" +
                              playerPPStrings[playerIndex] + ")",
                              x + 100,
                              y,
                              400,
                              64,
                              txtSize=24,
                              txtColor=(255, 255, 255))
            self.resultValuesPage.add(playerText)
            for dice in playerEyesDict[playerIndex]:
                img = self.files.getImage("dice" + str(dice))
                self.resultValuesPage.add(Image(img, x, y))
                x += 100
            y += 132

        for i in range(len(enemyDices)):
            img = self.files.getImage("dice" + str(enemyDices[i]))
            self.resultValuesPage.add(Image(img, 960 + 400 + 100 * i, 250))
        self.resultValuesPage.add(
            Text(self.tiers[self.enemy] + " (" + str(enemyPP) + ")",
                 960 + 400 + 100,
                 250,
                 400,
                 64,
                 txtSize=24,
                 txtColor=(255, 255, 255)))
Example #6
0
    def __init__(self, playerNames, tellers, files):
        self.pages = [Page() for i in range(self.PHASE_END + 1)]
        self.resultValuesPage = Page()
        self.pages[self.PHASE_RESULT].add(self.resultValuesPage)
        self.playerNames = playerNames
        self.tellers = tellers
        self.files = files

        self.selectedPlayers = set()  #Player index 0-3 (player 1 - 4)
        self.enemy = 0  #Enemy tier index 0-3 (low tier, mid tier, high tier, final boss)

        self.effecten = [
            set(), set(), set(), set()
        ]  #Effecten van verkregen effectkaarten van elk speler
        self.availableEffects = [[self.EFFECT_ADD_2PP, "+2k"],
                                 [self.EFFECT_MUL_2PP, "x2k"],
                                 [self.EFFECT_OUT_2DAYS, ""],
                                 [self.EFFECT_EXTRA_TRY, ""]]

        #----BUTTON EVENTS-----
        def onPlayerClick(button):
            self.player = button.playerIndex

            if (button.playerIndex in self.selectedPlayers):
                self.selectedPlayers.remove(button.playerIndex)
                button.bgColor = Button.bgColor
                button.bgColorCurrent = Button.bgColor
            else:
                self.selectedPlayers.add(button.playerIndex)
                button.bgColor = Button.bgColorHover
                button.bgColorCurrent = Button.bgColorHover

            self.playerNextButton.enabled = len(self.selectedPlayers) > 0

        def onEffectClick(button):
            player = button.playerIndex
            effect = button.effect

            if (effect in self.effecten[player]):
                self.effecten[player].remove(effect)
                button.bgColor = Button.bgColor
                button.bgColorCurrent = Button.bgColor
            else:
                self.effecten[player].add(effect)
                button.bgColor = Button.bgColorPressed
                button.bgColorCurrent = Button.bgColorPressed

        def onNextClick(button):
            if (len(self.selectedPlayers) > 0):
                if (len(self.selectedPlayers) > 1):
                    self.headers[
                        self.
                        PHASE_CHOOSE_ENEMY].txt = "Jullie vechten tegen..."
                else:
                    self.headers[
                        self.PHASE_CHOOSE_ENEMY].txt = "Je vecht tegen..."
                self.phase = self.PHASE_CHOOSE_ENEMY
                print("effecten:", self.effecten)

        def onEnemyClick(button):
            self.phase = self.PHASE_RESULT
            self.enemy = button.enemyIndex
            self.fight()

        def onBackClick(button):
            self.phase = self.PHASE_END

        def onBackToPlayersClick(button):
            self.phase = self.PHASE_CHOOSE_PLAYER

        def onResetClick(button):
            self.fight()

        #If the user clicks on the button of this event, a page will be displayed where he/she can can throw a dice to get a powerpoint.
        def onGetPowerpointsClick(button):
            self.phase = self.PHASE_GET_POWERPOINTS
            self.throwForPowerpoints(
            )  #Throw dices to get powerpoints and display the result

        #---------------------

        self.phase = self.PHASE_CHOOSE_PLAYER
        headerTemplate = Text("TEXT",
                              960,
                              160,
                              1200,
                              140,
                              txtSize=70,
                              txtColor=(255, 255, 255))
        self.headers = [  #Create labels to display a header on each page
            headerTemplate.copy(txt="Je bent/Jullie zijn..."),
            headerTemplate.copy(txt="Je vecht tegen..."),
            headerTemplate.copy(txt="RESULTAAT"),
            headerTemplate.copy(txt="Krijg krachtpunten")
        ]

        #Add the headers to the pages to update and display them
        for i in range(len(self.headers)):
            self.pages[i].add(self.headers[i])

        self.buttonTemplate = Button(0, 0, w=360, h=50, txtSize=40, radius=3)
        unitButtonTemplate = self.buttonTemplate.copy(y=700)
        effectButtonTemplate = Button(0,
                                      unitButtonTemplate.y + 70,
                                      w=54,
                                      h=54,
                                      txtOffsetY=14,
                                      radius=50)

        heroImageFileNames = ["held1", "held2", "held3", "held4"]
        enemyImageFileNames = ["tier1", "tier2", "tier3", "tier4"]

        #Create buttons for choosing a player
        for i in range(self.getPlayerCount()):  #for each player
            button = unitButtonTemplate.copy(x=i * 400 + 340,
                                             txt=self.playerNames[i],
                                             onClick=onPlayerClick)
            button.playerIndex = i
            button.enabled = self.getPlayerPowerpoints(i) >= 0
            self.pages[self.PHASE_CHOOSE_PLAYER].add(button)

            #Draw hero image
            heroImage = Image(self.files.getImage(heroImageFileNames[i]),
                              button.x, button.y - 270, True)
            self.pages[self.PHASE_CHOOSE_PLAYER].add(heroImage)

            for j in range(len(self.availableEffects)):  #for each effect
                effectButton = effectButtonTemplate.copy(
                    x=button.x + 60 * j - 85,
                    onClick=onEffectClick,
                    playerIndex=i,
                    effect=self.availableEffects[j][0],
                    txt=self.availableEffects[j][1])
                effectButton.enabled = self.getPlayerPowerpoints(i) >= 0
                self.pages[self.PHASE_CHOOSE_PLAYER].add(effectButton)

                if (self.availableEffects[j][0] == self.EFFECT_OUT_2DAYS):
                    icon = Image(self.files.getImage("buitenspel_icon"),
                                 effectButton.x, effectButton.y, True)
                    self.pages[self.PHASE_CHOOSE_PLAYER].add(icon)
                if (self.availableEffects[j][0] == self.EFFECT_EXTRA_TRY):
                    icon = Image(self.files.getImage("extraLife"),
                                 effectButton.x, effectButton.y, True)
                    self.pages[self.PHASE_CHOOSE_PLAYER].add(icon)

        #Create buttons for choosing an enemy
        for i in range(self.getEnemyTierCount()):
            button = unitButtonTemplate.copy(x=i * 400 + 340,
                                             txt=self.tiers[i],
                                             onClick=onEnemyClick)
            button.enemyIndex = i
            self.pages[self.PHASE_CHOOSE_ENEMY].add(button)

            #Draw enemy image
            enemyImage = Image(files.getImage(enemyImageFileNames[i]),
                               button.x, button.y - 270, True)
            self.pages[self.PHASE_CHOOSE_ENEMY].add(enemyImage)

        self.playerNextButton = self.buttonTemplate.copy(x=960 - 300,
                                                         y=850,
                                                         txt="Volgende",
                                                         onClick=onNextClick,
                                                         enabled=False)
        self.pages[self.PHASE_CHOOSE_PLAYER].add(self.playerNextButton)

        #Reset button: fight again, Backbutton: resets the battlesystem (for now)
        self.resetButton = self.buttonTemplate.copy(x=960 - 300,
                                                    y=850,
                                                    txt="Vecht opnieuw!",
                                                    onClick=onResetClick)
        self.backButton = self.buttonTemplate.copy(x=960 + 300,
                                                   y=850,
                                                   txt="Hoofdmenu",
                                                   onClick=onBackClick)
        self.getPPButton = self.buttonTemplate.copy(
            x=960,
            y=910,
            w=600,
            txt="Verkrijg krachtpunten",
            onClick=onGetPowerpointsClick)

        #Add those buttons to the result page
        self.pages[self.PHASE_RESULT].add(self.resetButton)
        self.pages[self.PHASE_RESULT].add(self.backButton)

        self.pages[self.PHASE_CHOOSE_PLAYER].add(
            self.backButton.copy(onClick=onBackClick))
        self.pages[self.PHASE_CHOOSE_ENEMY].add(
            self.backButton.copy(onClick=onBackToPlayersClick, txt="Terug"))

        self.pages[self.PHASE_RESULT].add(self.getPPButton)
        self.pages[self.PHASE_GET_POWERPOINTS].add(
            self.backButton.copy(onClick=onBackClick, x=960, y=910, w=600))
    def __init__(self):
        self.currentPage = 0
        self.toMainMenu = False
        self.pages = [
            Page(),
            Page(),
            Page(),
            Page(),
            Page(),
            Page(),
            Page(),
            Page(),
            Page()
        ]
        self.page1 = Page()
        self.page2 = Page()
        self.page3 = Page()
        self.page4 = Page()
        self.page5 = Page()
        self.page6 = Page()
        self.page7 = Page()
        self.page8 = Page()
        self.page9 = Page()
        self.pages[0].add(self.page1)
        self.pages[1].add(self.page2)
        self.pages[2].add(self.page3)
        self.pages[3].add(self.page4)
        self.pages[4].add(self.page5)
        self.pages[5].add(self.page6)
        self.pages[6].add(self.page7)
        self.pages[7].add(self.page8)
        self.pages[8].add(self.page9)

        def onBackClick(button):
            self.toMainMenu = True

        def onNextClick(button):
            self.currentPage += 1

        def onPrevClick(button):
            self.currentPage -= 1

        #page items
        self.backButton = Button(960, 900, onClick=onBackClick, txt='Terug')
        self.nextButton = Button(1200,
                                 900,
                                 onClick=onNextClick,
                                 txt='Volgende ->')
        self.prevButton = Button(720,
                                 900,
                                 onClick=onPrevClick,
                                 txt='<- Vorige')
        self.titleText = Text("Spelregels",
                              960,
                              150,
                              500,
                              100,
                              txtColor=(255, 255, 255),
                              txtSize=100)
        self.text1 = Text(
            "Voorbereiding\n\nVoordat het spel kan beginnen moet het bord worden neergelegd. Het bord bestaat uit een frame en een aantal vierkante plaatjes. De plaatjes worden willekeurig in het frame gelegd. Dit is het uiteindelijke speelveld.\n\nVervolgens worden de spelerpionnen aan een kant van het speelveld gezet. Spelers mogen zelf kiezen op welk van de 7 beginvakjes ze gaan staan. Er mag maar 1 held op 1 vakje staan. Aan de andere kant van het speelveld komen de vijandige pionnen, 1 op elk vakje. Dit is de eerste vijandengolf.\n\nAls laatst mogen er drie fabrieken naar keuze worden neergezet op het speelveld. Let op: fabrieken leveren alleen iets op als ze op een met grondstof gemarkeerd veld staan.\n\nDe grondstof- stamina- en krachtpunten kunnen via de software bijgehouden worden. Het spel begint zonder grondstoffen en elke speler krijgt 2 krachtpunten en 7 staminapunten.",
            960,
            600,
            800,
            800,
            txtSize=25)
        self.text2 = Text(
            "Spelverloop\n\nDe spelers kunnen tijdens een beurt lopen, bouwen, verbeteren en vechten. Naast deze acties kan een speler ook ervoor kiezen om niets te doen. Alle acties kunnen in 1 dag uitgevoerd worden door elke speler. De spelers kunnen deze acties alleen overdag uitvoeren.\n\nLopen\nAls een speler gaat lopen met zijn pion, kost hem of haar dit 1 staminapunt per vakje. Als een speler geen stamina meer heeft kan deze niet meer lopen. Stamina kan worden bijgevuld door 1 eenheid graan te gebruiken uit de grondstoffen. (1 eenheid graan = 1 staminapunt)\n\nBouwen\nEen speler kan ervoor kiezen om 1 van de volgende dingen te bouwen: Fabriek, Muur, Brug, Straat, Warenhuis of Markt. Een gebouw kan alleen gebouwd worden op het vakje waar de bouwende speler op staat, met als uitzondering de Brug, die alleen op een watervak naast de bouwende speler gebouwd kan worden. Sommige gebouwen hebben meerdere soorten (tiers): Hout (goud), steen (zwart) of staal (blauw).",
            960,
            600,
            800,
            800,
            txtSize=25)
        self.text3 = Text(
            "Gebouwen\n\nFabriek\nEen fabriek zorgt voor grondstoffen. Er zijn twee verschillende soorten fabriek: een high tier fabriek en een low tier fabriek. Deze fabrieken leveren het volgende op:\nGraan\nLow tier - 1 keer het aantal spelers per dag\nHigh tier - 2 keer het aantal spelers per dag\nHout\nLow tier - 3 per 2 dagen\nHigh tier - 3 per dag\nSteen\nLow tier - 2 per 2 dagen\nHigh tier - 2 per dag\nStaal\nLow tier - 1 per 2 dagen\nHigh tier - 1 per dag\n\nEen low tier fabriek kost 2 hout en 1 steen. De vijand kan deze in 2 beurten vernietigen.\nEen high tier fabriek kost 3 hout, 2 steen en 1 staal. De vijand kan deze in 4 beurten vernietigen.\nDe fabrieken produceren de grondstof van het vakje waar ze op staan.\nJe kunt een fabriek verbeteren (ombouwen van low tier tot high tier) met 1 hout, 1 steen en 2 staal.",
            960,
            600,
            8000,
            800,
            txtSize=25)
        self.text4 = Text(
            "Gebouwen\n\nMuur\nEen muur kan gebouwd worden om vijanden tijdelijk tegen te houden. Er zijn houten, stenen en stalen muren. De kosten van de muur is 1 eenheid van de grondstof waar deze van wordt gebouwd. Een houten muur zorgt ervoor dat de vijand 1 beurt langer op het huidige vakje blijft, een stenen muur doet dit voor 2 beurten en een stalen muur 3 beurten. Wanneer deze beurten voorbij zijn, wordt de muur vernietigd. Een muur kan afgebroken worden, dit kost hetzelfde als een muur bouwen.\n\nBrug\nEen brug kan gebouwd worden om watervlakken over te kunnen steken. Een brug kost 2 van de desbetreffende grondstoffen. Er zijn houten, stenen en stalen bruggen. Een houten brug kan 2 keer gebruikt worden, een stenen brug 4 keer en een stalen brug 8 keer. Vijanden kunnen ook gebruik maken van de bruggen. Deze kan dan in 1 keer over een vakje water. Als een vijand over de brug gaat telt dit als 1 keer gebruikt. Nadat een brug is opgebruikt stort deze in. Een brug kan afgebroken worden, dit kost 1 eenheid van de desbetreffende grondstof.",
            960,
            600,
            800,
            800,
            txtSize=25)
        self.text5 = Text(
            "Gebouwen\n\nStraat\nEen straat kan gebouwd worden door 2 steen te gebruiken. Tegenstanders kunnen deze niet afbreken maar wel gebruiken. Als een speler over een vakje met een straat loopt kost dit geen stamina. Het afbreken van een straat kost 1 steen.\n\nWarenhuis\nEen warenhuis kan gebouwd worden om het aantal grondstoffen dat de spelers tegelijk in het bezit kan hebben te vergroten. Een warenhuis kan gebouwd worden door 3 hout te gebruiken. Een warenhuis kan verbeterd worden om meer voorwerpen vast te kunnen houden, dit kost 3 steen voor de eerste upgrade, en 3 staal voor de tweede upgrade. Aan het begin van het spel kunnen de spelers 10 grondstoffen bezitten. Een houten warenhuis heeft plaats voor 6 extra grondstoffen, een stenen warenhuis heeft plaats voor 10 extra grondstoffen, en een stalen warenhuis voor 14. Warenhuizen kunnen worden afgebroken met 2 eenheden van de grondstof waar ze van zijn gebouwd.\n\nMarkt\nEen markt kan gebouwd worden om effectkaarten en rugzakken te kopen. Een effectkaart kost 3 graan en een rugzak kost 3 steen. Een rugzak vergroot het aantal grondstoffen dat gehouden kan worden met 3. Er kan maar 1 rugzak worden gekocht. Met de markt kunnen 3 dezelfde grondstoffen geruild worden voor 1 andere grondstof. Een krachtpunt kan hier gekocht worden van 3 van elke grondstof. Een vijand heeft 3 beurten nodig om een markt te vernietigen.",
            960,
            600,
            1100,
            800,
            txtSize=25)
        self.text6 = Text(
            "Vechten\n\nAls een speler op hetzelfde vakje staat als een vijand kan de speler kiezen om aan te vallen. Spelers kunnen niet worden aangevallen door vijanden.\nBij het aanvallen worden dobbelstenen gebruikt om te bepalen wie er wint. De speler gooit 2 dobbelstenen. Een andere speler gooit voor de vijand. Het aantal dobbelstenen en krachtpunten wordt bepaald door de tier van de vijand. Als er gegooid is, wordt het hoogste aantal gegooide ogen opgeteld bij de krachtpunten. Wie dan het meeste punten heeft wint het gevecht. Je kunt ook met meerdere spelers 1 vijand aanvallen. In dat geval worden alle totale punten van de spelers bij elkaar opgeteld.\nIn de software kun je gebruikmaken van een automatisch gevechtssysteem.\n\nEr zijn vier verschillende tiers vijanden: Low-tier heeft 1 krachtpunt en 2 dobbelstenen, Mid-tier heeft 2 krachtpunten en 2 dobbelstenen, High tier heeft 4 krachtpunten en 3 dobbelstenen, en de eindbaas. De eindbaas heeft bij 2 spelers 6 krachtpunten, bij 3 spelers 12 en bij 4 spelers 18, gooit altijd met 3 dobbelstenen, en zet twee stappen per nacht.\n\nAls je een gevecht wint, krijg je een overwinningspunt. Deze punten bepalen welke vijanden op welk moment in het spel komen. Op de volgende pagina staat welke tier op welke plaats in het spel komt. Wanneer er vijf, tien, vijftien of twintig overwinningspunten behaald zijn begint er meteen een nieuwe golf. Alle nog levende vijanden blijven in het veld, met als uitzondering de eindbaasgolf, waarbij de nog levende vijanden uit het spel verwijderd worden.",
            960,
            600,
            1000,
            800,
            txtSize=25)
        self.text7 = Text(
            "Vechten\n\nVijandengolven:\n[L = Low-tier, M = Mid-tier, H = High-tier, E = Eindbaas]\nVanaf 0 overwinningspunten (begin van het spel):\nL, L, L, L, L, L, L\n\nVanaf 5 overwinningspunten:\nL, L, M, M, M, L, L\n\nVanaf 10 overwinningspunten:\nM, M, H, H, H, M, M\n\nVanaf 15 overwinningspunten:\nH, H, H, H, H, H, H\n\nVanaf 20 overwinningspunten:\n-, -, -, E, -, -, -",
            960,
            600,
            800,
            800,
            txtSize=25)
        self.text8 = Text(
            "Vechten\n\nGewonnen?\nDe vijand is verslagen en wordt uit het spel gehaald. De speler gooit 1 dobbelsteen. Als 5 of 6 wordt gegooid krijgt de speler een extra krachtpunt, anders gebeurt er niets. Elke vijand is 1 overwinningspunt waard.\n\nVerloren?\nDe speler is verslagen en verliest een krachtpunt. Als de speler geen krachtpunten meer heeft mag deze niet meer meedoen voor 3 dagen. Daarna begint deze aan het begin van het bord (bij het kasteel). De vijand blijft op het bord maar beweegt niet voor 1 nacht.\n\nGelijkspel?\nEr gebeurt niets en de speler kan opnieuw gooien of stoppen met de aanval.",
            960,
            600,
            800,
            800,
            txtSize=25)
        self.text9 = Text(
            "Spelverloop\n\nNacht\nAls iedere speler aan de beurt geweest is, is de dag voorbij en begint de nacht. In de nacht kunnen spelers geen acties meer uitvoeren en worden de volgende stappen ondernomen:\n1. Vijanden bewegen allemaal 1 stap naar voren.\n2. Er wordt een actiekaart gepakt en deze wordt uitgevoerd.\n3. De spelers krijgen grondstoffen.\n\nAfloop\nAls de spelers 20 overwinningspunten hebben bemachtigd worden alle vijanden van het bord gehaald en wordt de eindbaas op het bord gezet. Als de eindbaas verslagen is is het spel voorbij en hebben de spelers gewonnen.\nHet spel is verloren wanneer er 3 of meer reguliere (low- mid- of high-tier) vijanden het kasteel binnen zijn gedrongen. Het spel eindigt ook in verlies voor de spelers wanneer de eindbaas het kasteel bereikt.",
            960,
            600,
            800,
            800,
            txtSize=25)
        #to add items
        for self.x in range(0, 9):
            self.pages[self.x].add(self.titleText)
            self.pages[self.x].add(self.backButton)
            if self.x != 8:
                self.pages[self.x].add(self.nextButton)
            if self.x != 0:
                self.pages[self.x].add(self.prevButton)
        self.pages[0].add(self.text1)
        self.pages[1].add(self.text2)
        self.pages[2].add(self.text3)
        self.pages[3].add(self.text4)
        self.pages[4].add(self.text5)
        self.pages[5].add(self.text6)
        self.pages[6].add(self.text7)
        self.pages[7].add(self.text8)
        self.pages[8].add(self.text9)
Example #8
0
    def __init__(self):
        def onInventoryClick(button):
            self.phase = AppPhase.INVENTORY

        def onBattleSystemClick(button):
            self.phase = AppPhase.BATTLESYSTEM

        def onBoardRandomizerClick(button):
            self.phase = AppPhase.BOARD_RANDOMIZER

        def onGameManualClick(button):
            self.phase = AppPhase.RULEBOOK

        def onCreditsClick(button):
            self.phase = AppPhase.CREDITS

        def onPlayernameClick(button):
            self.phase = AppPhase.PLAYERNAMES

        def onMarketClick(button):
            self.phase = AppPhase.MARKET

        def onSpelverloopClick(button):
            self.phase = AppPhase.SPELVERLOOP

        buttonX = 960
        buttonY = 250
        buttonMarginY = 70
        buttonTemplate = Button(buttonX, buttonY, w=260, radius=3)

        self.page.add(
            Text("Hoofdmenu",
                 960,
                 150,
                 500,
                 100,
                 txtColor=(255, 255, 255),
                 txtSize=100))
        self.page.add(
            buttonTemplate.copy(y=buttonY + buttonMarginY * 1,
                                onClick=onInventoryClick,
                                txt="Inventaris"))
        self.page.add(
            buttonTemplate.copy(y=buttonY + buttonMarginY * 2,
                                onClick=onBattleSystemClick,
                                txt="Gevecht"))
        self.page.add(
            buttonTemplate.copy(y=buttonY + buttonMarginY * 6,
                                onClick=onBoardRandomizerClick,
                                txt="Bord randomizer"))
        self.page.add(
            buttonTemplate.copy(y=buttonY + buttonMarginY * 4,
                                onClick=onGameManualClick,
                                txt="Spelregels"))
        self.page.add(
            buttonTemplate.copy(y=buttonY + buttonMarginY * 7,
                                onClick=onCreditsClick,
                                txt="Credits"))
        self.page.add(
            buttonTemplate.copy(y=buttonY + buttonMarginY * 5,
                                onClick=onPlayernameClick,
                                txt='Spelernamen'))
        self.page.add(
            buttonTemplate.copy(y=buttonY + buttonMarginY * 3,
                                onClick=onMarketClick,
                                txt='Markt'))
        self.page.add(
            buttonTemplate.copy(y=buttonY + buttonMarginY * 0,
                                onClick=onSpelverloopClick,
                                txt='Spelverloop'))