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, 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)
def __init__( self, x, y, **buttonArgs ): #Constructor, this will be executed when you create an instance of this class self.selected = False self.button = Button(x, y, **buttonArgs) self.txt = "" self.placeHolder = "Fill in" self.textCursorTime = 500 #in milliseconds self.textCursorSign = "|" #See this link for the character encoding: https://www.rapidtables.com/code/text/unicode-characters.html self.allowedCharacters = {chr(i) for i in range(32, 127)} #spatie t/m [~] self.maxCharacters = 12 self.previousKey = ""
def __init__(self): def onDrawBoardClick(button): self.boardSetup() self.draw_board() self.button = Button(300, 600, txt="Nieuw Bord", bgColor=(255, 255, 255), onClick=onDrawBoardClick, w=350, h=60) def onBackButtonClick(button): self.goToMainMenu = True self.goToMainMenu = False self.backButton = Button(700, 600, txt="Terug", onClick=onBackButtonClick)
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)
def __init__(self, tellers): self.movetoMainMenu = False self.backButton = Button(1300, 950, txt='Terug', onClick=self.onBackClick, w=250, h=50) self.tellers = tellers self.showcard = False self.boughtbags = 0 self.enoughbrick = True self.enoughgrain = True self.price = 3 self.effect14 = False self.clicked = False self.resourcename = 'nothing' self.enoughmats = True self.chosenmat = 5 self.pressed = False self.enoughmatspp = True self.buttons = [ Button(200, 150, txt="EffectKaart", onClick=self.chosencard, w=250, h=50), Button(200, 250, txt="Reset", onClick=self.reset, w=250, h=50), Button(1300, 250, txt="Rugzak", onClick=self.backpack, w=250, h=50), Button(850, 470, txt="Gebruik", onClick=self.Effect14Used, w=250, h=50), Button(1300, 550, txt="Krachtpunt P1", onClick=self.powerup1, w=250, h=50), Button(1300, 650, txt="Krachtpunt P2", onClick=self.powerup2, w=250, h=50), Button(1300, 750, txt="Krachtpunt P3", onClick=self.powerup3, w=250, h=50), Button(1300, 850, txt="Krachtpunt P4", onClick=self.powerup4, w=250, h=50), ] self.resourcesbuttons = [ Button(200, 600, txt="Hout", onClick=self.Exchangewood, w=250, h=50), Button(200, 700, txt="Steen", onClick=self.Exchangebrick, w=250, h=50), Button(200, 800, txt="Ijzer", onClick=self.Exchangemetal, w=250, h=50), Button(200, 900, txt="Graan", onClick=self.Exchangegrain, w=250, h=50), ] self.matsbuttons = [ Button(550, 600, txt="Hout", onClick=self.pluswood, w=250, h=50), Button(550, 700, txt="Steen", onClick=self.plusstone, w=250, h=50), Button(550, 800, txt="Ijzer", onClick=self.plusmetal, w=250, h=50), Button(550, 900, txt="Graan", onClick=self.plusgrain, w=250, h=50), ] self.errorbuttons = [ Button(1650, 350, txt="OK", onClick=self.NoBrickError, w=100, h=50), Button(500, 300, txt="OK", onClick=self.NoGrainError, w=100, h=50), Button(850, 750, txt="OK", onClick=self.NoMatserror, w=100, h=50), Button(1600, 730, txt="OK", onClick=self.NoMatsppError, w=100, h=50), ]
class Markt: def __init__(self, tellers): self.movetoMainMenu = False self.backButton = Button(1300, 950, txt='Terug', onClick=self.onBackClick, w=250, h=50) self.tellers = tellers self.showcard = False self.boughtbags = 0 self.enoughbrick = True self.enoughgrain = True self.price = 3 self.effect14 = False self.clicked = False self.resourcename = 'nothing' self.enoughmats = True self.chosenmat = 5 self.pressed = False self.enoughmatspp = True self.buttons = [ Button(200, 150, txt="EffectKaart", onClick=self.chosencard, w=250, h=50), Button(200, 250, txt="Reset", onClick=self.reset, w=250, h=50), Button(1300, 250, txt="Rugzak", onClick=self.backpack, w=250, h=50), Button(850, 470, txt="Gebruik", onClick=self.Effect14Used, w=250, h=50), Button(1300, 550, txt="Krachtpunt P1", onClick=self.powerup1, w=250, h=50), Button(1300, 650, txt="Krachtpunt P2", onClick=self.powerup2, w=250, h=50), Button(1300, 750, txt="Krachtpunt P3", onClick=self.powerup3, w=250, h=50), Button(1300, 850, txt="Krachtpunt P4", onClick=self.powerup4, w=250, h=50), ] self.resourcesbuttons = [ Button(200, 600, txt="Hout", onClick=self.Exchangewood, w=250, h=50), Button(200, 700, txt="Steen", onClick=self.Exchangebrick, w=250, h=50), Button(200, 800, txt="Ijzer", onClick=self.Exchangemetal, w=250, h=50), Button(200, 900, txt="Graan", onClick=self.Exchangegrain, w=250, h=50), ] self.matsbuttons = [ Button(550, 600, txt="Hout", onClick=self.pluswood, w=250, h=50), Button(550, 700, txt="Steen", onClick=self.plusstone, w=250, h=50), Button(550, 800, txt="Ijzer", onClick=self.plusmetal, w=250, h=50), Button(550, 900, txt="Graan", onClick=self.plusgrain, w=250, h=50), ] self.errorbuttons = [ Button(1650, 350, txt="OK", onClick=self.NoBrickError, w=100, h=50), Button(500, 300, txt="OK", onClick=self.NoGrainError, w=100, h=50), Button(850, 750, txt="OK", onClick=self.NoMatserror, w=100, h=50), Button(1600, 730, txt="OK", onClick=self.NoMatsppError, w=100, h=50), ] def onBackClick(self, self1): self.movetoMainMenu = True def powerup1(self, self1): if self.tellers.wood >= self.price and self.tellers.brick >= self.price and self.tellers.metal >= self.price and self.tellers.grain >= self.price: self.tellers.power1 += 1 self.tellers.wood -= self.price self.tellers.brick -= self.price self.tellers.metal -= self.price self.tellers.grain -= self.price else: self.enoughmatspp = False def powerup2(self, self1): if self.tellers.wood >= self.price and self.tellers.brick >= self.price and self.tellers.metal >= self.price and self.tellers.grain >= self.price: self.tellers.power2 += 1 self.tellers.wood -= self.price self.tellers.brick -= self.price self.tellers.metal -= self.price self.tellers.grain -= self.price else: self.enoughmatspp = False def powerup3(self, self1): if self.tellers.wood >= self.price and self.tellers.brick >= self.price and self.tellers.metal >= self.price and self.tellers.grain >= self.price: self.tellers.power3 += 1 self.tellers.wood -= self.price self.tellers.brick -= self.price self.tellers.metal -= self.price self.tellers.grain -= self.price else: self.enoughmatspp = False def powerup4(self, self1): if self.tellers.wood >= self.price and self.tellers.brick >= self.price and self.tellers.metal >= self.price and self.tellers.grain >= self.price: self.tellers.power4 += 1 self.tellers.wood -= self.price self.tellers.brick -= self.price self.tellers.metal -= self.price self.tellers.grain -= self.price else: self.enoughmatspp = False def chosencard(self, self1): self.card = random.choice(self.effectcards) if self.card == self.effectcards[9]: self.tellers.effect10 = True if self.card == self.effectcards[13] and self.effect14 == True: self.card = random.choice(self.effectcards2) if self.tellers.grain >= self.price: self.showcard = True self.buttons[0].enabled = False self.tellers.grain -= self.price else: self.enoughgrain = False self.price = 3 def effectcard(self): if self.showcard == True: image(self.card, 352, 77) def reset(self, self1): self.showcard = False self.buttons[0].enabled = True if self.card == self.effectcards[13]: self.effect14 = True if self.card == self.effectcards[4]: self.price = self.price // 2 else: self.price = 3 def backpack(self, self1): if self.tellers.brick >= self.price: self.tellers.bagcount = True self.buttons[2].enabled = False self.tellers.brick -= self.price self.tellers.capacity += 3 else: self.enoughbrick = False def NoBrickError(self, self1): self.enoughbrick = True def NoGrainError(self, self1): self.enoughgrain = True def Effect14Used(self, self1): self.effect14 = False def Exchangewood(self, self1): if self.tellers.wood >= self.price: self.tellers.wood -= self.price self.clicked = True self.chosenmat = 0 else: self.resourcename = 'Hout' self.enoughmats = False self.clicked = True self.chosenmat = 5 def Exchangebrick(self, self1): if self.tellers.brick >= self.price: self.tellers.brick -= self.price self.clicked = True self.chosenmat = 1 else: self.resourcename = 'steen' self.enoughmats = False self.clicked = True self.chosenmat = 5 def Exchangemetal(self, self1): if self.tellers.metal >= self.price: self.tellers.metal -= self.price self.clicked = True self.chosenmat = 2 else: self.resourcename = 'Ijzer' self.enoughmats = False self.clicked = True self.chosenmat = 5 def Exchangegrain(self, self1): if self.tellers.grain >= self.price: self.tellers.grain -= self.price self.clicked = True self.chosenmat = 3 else: self.resourcename = 'Graan' self.enoughmats = False self.clicked = True self.chosenmat = 5 def pluswood(self, self1): if (self.tellers.wood + self.tellers.metal + self.tellers.brick + self.tellers.grain) < (self.tellers.capacity): self.tellers.wood += 1 self.clicked = False def plusstone(self, self1): if (self.tellers.wood + self.tellers.metal + self.tellers.brick + self.tellers.grain) < (self.tellers.capacity): self.tellers.brick += 1 self.clicked = False def plusmetal(self, self1): if (self.tellers.wood + self.tellers.metal + self.tellers.brick + self.tellers.grain) < (self.tellers.capacity): self.tellers.metal += 1 self.clicked = False def plusgrain(self, self1): if (self.tellers.wood + self.tellers.metal + self.tellers.brick + self.tellers.grain) < (self.tellers.capacity): self.tellers.grain += 1 self.clicked = False def NoMatserror(self, self1): self.clicked = False self.enoughmats = True def NoMatsppError(self, self1): self.enoughmatspp = True def setup(self): self.effectcards = [] self.effectcards2 = [] self.backgr = loadImage('BG.png') for self.i in range(1, 21): self.filename = 'effectkaart' + str(self.i) + '.png' self.effectcards.append(loadImage(self.filename)) for self.i in range(1, 21): self.filename = 'effectkaart' + str(self.i) + '.png' if self.i != 14: self.effectcards2.append(loadImage(self.filename)) def draw(self): image(self.backgr, 0, 0) self.backButton.update() self.backButton.draw() for self.x in range(3): self.buttons[self.x].draw() self.buttons[self.x].update() fill(0) text("Effectkaart", 500, 20) noFill() rect(350, 75, 304, 341, 5) self.effectcard() if not self.enoughbrick: rect(1500, 100, 300, 300) fill(0) text( '\n' + 'Onvoldoende' + '\n' + 'steen voor' + '\n' + 'een rugzak!', 1650, 100) self.errorbuttons[0].draw() self.errorbuttons[0].update() if not self.enoughgrain: fill(0) text( 'Onvoldoende' + '\n' + 'graan voor' + '\n' + 'een effectkaart!', 500, 100) self.errorbuttons[1].draw() self.errorbuttons[1].update() if self.effect14: rect(700, 77, 304, 341, 5) image(self.effectcards[13], 702, 79) self.buttons[3].draw() self.buttons[3].update() if self.buttons[0].enabled == True: self.buttons[1].enabled = False else: self.buttons[1].enabled = True fill(0) text('Wissel : ', 200, 500) text('Voor : ', 550, 500) for i in range(4): self.resourcesbuttons[i].draw() self.resourcesbuttons[i].update() self.matsbuttons[i].draw() self.matsbuttons[i].update() if self.clicked: self.resourcesbuttons[i].enabled = False if self.enoughmats and i != self.chosenmat: self.matsbuttons[i].enabled = True else: self.resourcesbuttons[i].enabled = True self.matsbuttons[i].enabled = False if not self.enoughmats: fill(0) text('Onvoldoende' + '\n' + self.resourcename + '!', 850, 630) noFill() rect(700, 600, 300, 200, 5) self.errorbuttons[2].draw() self.errorbuttons[2].update() for self.i in range(4, 8): self.buttons[self.i].draw() self.buttons[self.i].update() if not self.enoughmatspp: noFill() rect(1450, 550, 300, 250, 5) fill(0) text('Onvoldoende' + '\n' + 'Resources!', 1600, 600) self.errorbuttons[3].draw() self.errorbuttons[3].update() for self.i in range(4, 8): self.buttons[self.i].enabled = False else: for self.i in range(4, 8): self.buttons[self.i].enabled = True
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))
class BattleSystem: #Constant values PHASE_CHOOSE_PLAYER = 0 PHASE_CHOOSE_ENEMY = 1 PHASE_RESULT = 2 PHASE_GET_POWERPOINTS = 3 PHASE_END = 4 EFFECT_ADD_2PP = 1 EFFECT_MUL_2PP = 2 EFFECT_OUT_2DAYS = 4 EFFECT_EXTRA_TRY = 14 tiers = [ "Low tier vijand", "Mid tier vijand", "High tier vijand", "Eindbaas" ] RESPAWN_WAIT_TIME = 3 #in dagen RESPAWN_LESS_WAIT_TIME = 2 def getPlayerCount(self): return 4 def getEnemyTierCount(self): return 4 #index: 0-3 (speler 1-4) def getPlayerPowerpoints(self, i): ppList = [ self.tellers.power1, self.tellers.power2, self.tellers.power3, self.tellers.power4 ] return ppList[i] def setPlayerPowerpoints(self, i, value): if (i == 0): self.tellers.power1 = value elif (i == 1): self.tellers.power2 = value elif (i == 2): self.tellers.power3 = value elif (i == 3): self.tellers.power4 = value else: print("Error: invalid index, value: " + str(i)) #index: 0-3 (tier 1-3 + final boss) def getEnemyPowerpoints(self, i): eindbaas = (self.getPlayerCount() - 1) * 6 #2 spelers: 6, 3: 12, 4: 18 ppList = [1, 2, 4, eindbaas] return ppList[i] #Start the fight between the chosen player and the enemy 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))) #throws dices for the players to get powerpoints 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 #pages[self.PHASE_GET_POWERPOINTS] #BattleSystem constructor 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)) #Code van hakan def randomizer(self): x = random.randint(1, 6) return x #----------------- #Call this every frame def update(self): self.pages[self.phase].update() #Call this every frame def draw(self): self.pages[self.phase].draw()
class TextField: #Example usage: myTextField = TextField(100, 100) or TextField(100, 200, w=300, h=50) def __init__( self, x, y, **buttonArgs ): #Constructor, this will be executed when you create an instance of this class self.selected = False self.button = Button(x, y, **buttonArgs) self.txt = "" self.placeHolder = "Fill in" self.textCursorTime = 500 #in milliseconds self.textCursorSign = "|" #See this link for the character encoding: https://www.rapidtables.com/code/text/unicode-characters.html self.allowedCharacters = {chr(i) for i in range(32, 127)} #spatie t/m [~] self.maxCharacters = 12 self.previousKey = "" def setTextFieldArgs(**args): self.__dict__.update(args) def validKey(self, keyString): return keyString in self.allowedCharacters def update(self): if (mousePressed): if (self.button.positionIsOnButton(mouseX, mouseY)): self.selected = True else: self.selected = False if (self.selected and keyPressed and CODED): #CODED: heeft het gedrukte toets een keycode? currentKey = str(key) if ( currentKey != self.previousKey ): #You need to release it if you want to use the same key again if (currentKey == str(ESC)): self.selected = False if (currentKey == str(BACKSPACE)): if (len(self.txt) > 0): self.txt = self.txt[:-1] #Remove the last character elif (self.validKey(currentKey)): self.txt += currentKey #Add an extra character if ( len(self.txt) > self.maxCharacters ): #The amount of characters should not exceed the maxCharacters amount self.txt = self.txt[0:self.maxCharacters] self.previousKey = currentKey elif (keyPressed == False): self.previousKey = "" def draw(self): #Text value space = "" sign = "" currentTime = int(time.time() * 1000) if (self.selected and currentTime % self.textCursorTime * 2 < self.textCursorTime): sign = self.textCursorSign space = " " if (self.txt == "" ): #Weergeef de placeholder tekst als het gevulde tekst leeg is self.button.txt = self.placeHolder else: self.button.txt = space + self.txt + sign #Text & Background color if (self.selected): #When selected self.button.bgColorCurrent = self.button.bgColorPressed self.button.txtColorCurrent = self.button.txtColorPressed elif (self.button.positionIsOnButton(mouseX, mouseY)): #if hovering self.button.bgColorCurrent = self.button.bgColorHover self.button.txtColorCurrent = self.button.txtColorHover else: #Default values self.button.bgColorCurrent = self.button.bgColor self.button.txtColorCurrent = self.button.txtColor self.button.draw() #Draw the button of the textfield
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)
class Board: def __init__(self): def onDrawBoardClick(button): self.boardSetup() self.draw_board() self.button = Button(300, 600, txt="Nieuw Bord", bgColor=(255, 255, 255), onClick=onDrawBoardClick, w=350, h=60) def onBackButtonClick(button): self.goToMainMenu = True self.goToMainMenu = False self.backButton = Button(700, 600, txt="Terug", onClick=onBackButtonClick) def boardSetup(self): self.board = [] self.wood = loadImage('Hout.jpg') self.stone = loadImage('Stone.jpg') self.metal = loadImage('Metaal.jpg') self.water = loadImage('Water.jpg') self.grain = loadImage('Graan.png') self.empty = loadImage('empty_wood.jpg') for n in range(5): self.board.append(self.wood) self.board.append(self.stone) self.board.append(self.metal) self.board.append(self.grain) for n in range(48): self.board.append(self.empty) for n in range(23): self.board.append(self.water) def draw_board(self): self.amount_pieces = 0 self.amount_rows = 0 self.piece_x = 180 self.piece_y = -50 def row(self, amount_pieces, piece_x, piece_y): while self.amount_pieces < 13: self.piece = random.choice(self.board) self.piece.resize( 75, 75 ) #Make them smaller so all the pieces can be displayed on the window image(self.piece, self.piece_x, self.piece_y) self.piece_x += 75 self.amount_pieces += 1 self.board.remove(self.piece) while self.amount_rows < 7: self.amount_pieces = 0 self.piece_y += 75 self.piece_x = 12 row(self, self.amount_pieces, self.piece_x, self.piece_y) self.amount_rows += 1 def setup(self): #fullScreen() #self.font=loadFont('BlackChancery-48.vlw') self.font = loadFont('BlackChancery.vlw') self.img = loadImage('TITLESCREEN2.png') # background(255,165,0) self.img.resize(1000, 726) #resize to the size of the screen self.boardSetup() def drawOnce(self): #background(self.img) textFont(self.font) def draw(self): # if self.board==[]: # self.boardSetup() self.button.update() self.backButton.update() self.button.draw() self.backButton.draw()
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'))
def __init__(self, Names): self.Names = Names def onBackButtonClick(button): self.goToMainMenu = True self.goToMainMenu = False self.backButton = Button(1000, 300, txt="Terug", onClick=onBackButtonClick) self.effect10 = False self.wood = 0 self.brick = 0 self.metal = 0 self.grain = 0 self.stamina1 = 7 self.stamina2 = 7 self.stamina3 = 7 self.stamina4 = 7 self.win_points = 0 self.capacity = 10 self.power1 = 2 self.power2 = 2 self.power3 = 2 self.power4 = 2 self.days = 0 self.bagcount = False self.newdeck = False self.action11chosen = False self.actionbagcap = False self.w = 1920 self.h = 1080 self.buttons2 = [ Button(330, 100, txt="+", onClick=self.addition_wood, w=100, h=50), Button(100, 100, txt="-", onClick=self.sub_wood, w=100, h=50), Button(330, 250, txt="+", onClick=self.addition_brick, w=100, h=50), Button(100, 250, txt="-", onClick=self.sub_brick, w=100, h=50), Button(330, 400, txt="+", onClick=self.addition_metal, w=100, h=50), Button(100, 400, txt="-", onClick=self.sub_metal, w=100, h=50), Button(330, 550, txt="+", onClick=self.addition_grain, w=100, h=50), Button(100, 550, txt="-", onClick=self.sub_grain, w=100, h=50), Button(730, 100, txt="+", onClick=self.addition_stamina1, w=100, h=50), Button(500, 100, txt="-", onClick=self.sub_stamina1, w=100, h=50), Button(730, 250, txt="+", onClick=self.addition_stamina2, w=100, h=50), Button(500, 250, txt="-", onClick=self.sub_stamina2, w=100, h=50), Button(730, 400, txt="+", onClick=self.addition_stamina3, w=100, h=50), Button(500, 400, txt="-", onClick=self.sub_stamina3, w=100, h=50), Button(730, 550, txt="+", onClick=self.addition_stamina4, w=100, h=50), Button(500, 550, txt="-", onClick=self.sub_stamina4, w=100, h=50), #Button(730, 670, txt="+", onClick =self.addition_winning, w = 100, h = 50), Button(330, 670, txt="+", onClick=self.addition_capacity, w=100, h=50), Button(100, 670, txt="-", onClick=self.sub_capacity, w=100, h=50), #Button(500, 670, txt="-", onClick =self.sub_winning, w = 100, h = 50), Button(1000, 100, txt="Dag voorbij", onClick=self.playersdone, w=300, h=50), Button(1000, 200, txt="reset", onClick=self.another_card, w=300, h=50), Button(330, 790, txt="+", onClick=self.powerup1, w=100, h=50), Button(100, 790, txt="-", onClick=self.powerdown1, w=100, h=50), Button(330, 890, txt="+", onClick=self.powerup3, w=100, h=50), Button(100, 890, txt="-", onClick=self.powerdown3, w=100, h=50), Button(730, 790, txt="+", onClick=self.powerup2, w=100, h=50), Button(500, 790, txt="-", onClick=self.powerdown2, w=100, h=50), Button(730, 890, txt="+", onClick=self.powerup4, w=100, h=50), Button(500, 890, txt="-", onClick=self.powerdown4, w=100, h=50) ]
class tellers: def __init__(self, Names): self.Names = Names def onBackButtonClick(button): self.goToMainMenu = True self.goToMainMenu = False self.backButton = Button(1000, 300, txt="Terug", onClick=onBackButtonClick) self.effect10 = False self.wood = 0 self.brick = 0 self.metal = 0 self.grain = 0 self.stamina1 = 7 self.stamina2 = 7 self.stamina3 = 7 self.stamina4 = 7 self.win_points = 0 self.capacity = 10 self.power1 = 2 self.power2 = 2 self.power3 = 2 self.power4 = 2 self.days = 0 self.bagcount = False self.newdeck = False self.action11chosen = False self.actionbagcap = False self.w = 1920 self.h = 1080 self.buttons2 = [ Button(330, 100, txt="+", onClick=self.addition_wood, w=100, h=50), Button(100, 100, txt="-", onClick=self.sub_wood, w=100, h=50), Button(330, 250, txt="+", onClick=self.addition_brick, w=100, h=50), Button(100, 250, txt="-", onClick=self.sub_brick, w=100, h=50), Button(330, 400, txt="+", onClick=self.addition_metal, w=100, h=50), Button(100, 400, txt="-", onClick=self.sub_metal, w=100, h=50), Button(330, 550, txt="+", onClick=self.addition_grain, w=100, h=50), Button(100, 550, txt="-", onClick=self.sub_grain, w=100, h=50), Button(730, 100, txt="+", onClick=self.addition_stamina1, w=100, h=50), Button(500, 100, txt="-", onClick=self.sub_stamina1, w=100, h=50), Button(730, 250, txt="+", onClick=self.addition_stamina2, w=100, h=50), Button(500, 250, txt="-", onClick=self.sub_stamina2, w=100, h=50), Button(730, 400, txt="+", onClick=self.addition_stamina3, w=100, h=50), Button(500, 400, txt="-", onClick=self.sub_stamina3, w=100, h=50), Button(730, 550, txt="+", onClick=self.addition_stamina4, w=100, h=50), Button(500, 550, txt="-", onClick=self.sub_stamina4, w=100, h=50), #Button(730, 670, txt="+", onClick =self.addition_winning, w = 100, h = 50), Button(330, 670, txt="+", onClick=self.addition_capacity, w=100, h=50), Button(100, 670, txt="-", onClick=self.sub_capacity, w=100, h=50), #Button(500, 670, txt="-", onClick =self.sub_winning, w = 100, h = 50), Button(1000, 100, txt="Dag voorbij", onClick=self.playersdone, w=300, h=50), Button(1000, 200, txt="reset", onClick=self.another_card, w=300, h=50), Button(330, 790, txt="+", onClick=self.powerup1, w=100, h=50), Button(100, 790, txt="-", onClick=self.powerdown1, w=100, h=50), Button(330, 890, txt="+", onClick=self.powerup3, w=100, h=50), Button(100, 890, txt="-", onClick=self.powerdown3, w=100, h=50), Button(730, 790, txt="+", onClick=self.powerup2, w=100, h=50), Button(500, 790, txt="-", onClick=self.powerdown2, w=100, h=50), Button(730, 890, txt="+", onClick=self.powerup4, w=100, h=50), Button(500, 890, txt="-", onClick=self.powerdown4, w=100, h=50) ] def powerup1(self, self1): self.power1 += 1 def powerdown1(self, self1): if self.power1 > 0: self.power1 -= 1 def powerup2(self, self1): self.power2 += 1 def powerdown2(self, self1): if self.power2 > 0: self.power2 -= 1 def powerup3(self, self1): self.power3 += 1 def powerdown3(self, self1): if self.power3 > 0: self.power3 -= 1 def powerup4(self, self1): self.power4 += 1 def powerdown4(self, self1): if self.power4 > 0: self.power4 -= 1 def addition_winning(self, self1): if self.win_points < 20: self.win_points += 1 def sub_winning(self, self1): if self.win_points > 0: self.win_points -= 1 def addition_capacity(self, self1): self.capacity += 1 def sub_capacity(self, self1): if self.capacity > 10 and self.capacity != self.brick + self.metal + self.wood + self.grain: self.capacity -= 1 def addition_stamina1(self, self1): self.stamina1 += 1 def sub_stamina1(self, self1): if self.stamina1 > 0: self.stamina1 -= 1 def addition_stamina2(self, self1): self.stamina2 += 1 def sub_stamina2(self, self1): if self.stamina2 > 0: self.stamina2 -= 1 def addition_stamina3(self, self1): self.stamina3 += 1 def sub_stamina3(self, self1): if self.stamina3 > 0: self.stamina3 -= 1 def addition_stamina4(self, self1): self.stamina4 += 1 def sub_stamina4(self, self1): if self.stamina4 > 0: self.stamina4 -= 1 def addition_wood(self, self1): if (self.wood + self.metal + self.brick + self.grain) < (self.capacity): self.wood += 1 def sub_wood(self, self1): if self.wood > 1: self.wood -= 1 else: self.wood = 0 def addition_brick(self, self1): if (self.wood + self.metal + self.brick + self.grain) < (self.capacity): self.brick += 1 def sub_brick(self, self1): if self.brick > 1: self.brick -= 1 else: self.brick = 0 def addition_metal(self, self1): if (self.wood + self.metal + self.brick + self.grain) < (self.capacity): self.metal += 1 def sub_metal(self, self1): if self.metal > 1: self.metal -= 1 else: self.metal = 0 def addition_grain(self, self1): if (self.wood + self.metal + self.brick + self.grain) < (self.capacity): self.grain += 1 def sub_grain(self, self1): if self.grain > 1: self.grain -= 1 else: self.grain = 0 def playersdone(self, self1): self.players_done = True if self.effect10: self.days += 0 else: self.days += 1 self.effect10 = False return self.players_done def action_card(self): self.clicked = 0 if self.players_done: image(self.card, 1203, 83) self.buttons2[18].enabled = False if self.card == self.action11 and self.newdeck == False: self.action11chosen = True self.actionbagcap = True def another_card(self, self1): global card global players_done global clicked global buttons2 self.players_done = False self.clicked += 1 self.card = random.choice(self.action_cards) self.action_cards.remove(self.card) self.buttons2[18].enabled = True self.effect10 = False if self.actionbagcap: self.capacity += 5 self.actionbagcap = False if self.clicked == 1: redraw() def winning(self, self1): global win_count global player_win if self.player_win: win_count += 1 def setup(self): global players_done global action_cards global card global players_done global clicked global action11 self.img = loadImage("BG.png") self.bag = loadImage("bag.png") self.players_done = False self.clicked = 0 self.action11 = loadImage('actiekaart11.png') self.action_cards = [self.action11] for self.i in range(1, 21): self.filename = "actiekaart" + str(self.i) + ".png" if self.i != 10 and self.i != 11: self.action_cards.append(loadImage(self.filename)) self.card = random.choice(self.action_cards) self.action_cards.remove(self.card) def draw(self): self.player1 = self.Names[0] self.p1_display = 'Stamina ' + str(self.player1) self.player2 = self.Names[1] self.p2_display = 'Stamina ' + str(self.player2) self.player3 = self.Names[2] self.p3_display = 'Stamina ' + str(self.player3) self.player4 = self.Names[3] self.p4_display = 'Stamina ' + str(self.player4) if self.action_cards == []: self.newdeck = True for self.i in range(1, 21): self.filename = "actiekaart" + str(self.i) + ".png" if self.i != 10 and self.i != 11: self.action_cards.append(loadImage(self.filename)) image(self.img, 0, 0) if self.bagcount: image(self.bag, 850, 450) if self.action11chosen: image(self.bag, 1000, 450) noFill() rect(1200, 80, 305, 342, 5) fill(0) text('Actie kaart', 1350, 20) text('HOUT', 220, 20) text(str(self.wood), 220, 80) text('STEEN', 220, 170) text(str(self.brick), 220, 230) text('IJZER', 220, 320) text(str(self.metal), 220, 380) text('GRAAN', 220, 480) text(str(self.grain), 220, 530) text(str(self.p1_display), 620, 20) text(str(self.stamina1), 620, 80) text(str(self.p2_display), 620, 170) text(str(self.stamina2), 620, 230) text(str(self.p3_display), 620, 320) text(str(self.stamina3), 620, 380) text(str(self.p4_display), 620, 480) text(str(self.stamina4), 620, 530) text('Overwinningspunten', 620, 600) text(str(self.win_points), 620, 650) text('Opslag Capaciteit', 220, 600) text(str(self.capacity), 220, 650) text(str(self.power1), 220, 780) text('KrachtPunten ' + str(self.player1), 215, 720) text(str(self.power3), 220, 880) text('KrachtPunten ' + str(self.player2), 215, 825) text(str(self.power2), 620, 780) text('KrachtPunten ' + str(self.player3), 615, 720) text(str(self.power4), 620, 880) text('KrachtPunten ' + str(self.player4), 615, 825) if self.buttons2[18].enabled == True: self.buttons2[19].enabled = False else: self.buttons2[19].enabled = True self.action_card() for button in self.buttons2: button.update() button.draw() button.update() self.backButton.update() self.backButton.draw()