Exemple #1
0
    def global_input(self, value): # сюда идут все нажатия на кнопки, которые создал класс game
        # print(self.not_choosen)
        if self.state['choose char']:
            self.active_player().choose_character(value)
            self.update_interface()
            self.not_choosen -= 1
            text = 'выберите персонажа, '
            if self.not_choosen == 6 and len(self.players) == 2:
                self.controller.next_player()
                self.set_text('выберите персонажа, ' + self.active_player().name)
                return
            if len(self.players) == 2:
                self.state['choose char'], self.state['drop char'] = False, True
                self.controller.interface.add_text('сбросьте персонажа')
                return
            elif self.not_choosen == 1 and len(self.players) < 7:
                self.state['choose char'], self.state['drop char'] = False, True
                text = 'сбросьте персонажа, '
                self.set_text(text + self.active_player().name)
                return
            elif self.not_choosen == 1 and len(self.players) == 7:
                char = self.controller.dropList[0]
                self.controller.dropList.clear()
                self.controller.create_buttons([[char.primImg["open"], char.name]], False)

            elif self.not_choosen == 0 and len(self.players) == 7:
                self.not_choosen += 1
                self.state['choose char'], self.state['drop char'] = False, True
                text = 'сбросьте персонажа, '
                self.set_text(text + self.active_player().name)
                return
            self.controller.next_player()
            self.set_text(text + self.active_player().name)
        elif self.state['drop char']:
            self._choosen_drop(value)
            self.state['choose char'], self.state['drop char'] = True, False
            self.controller.next_player()
            if self.not_choosen == 0:
                self.preparing = False
                self.state['choose char'] = False
                doc.write("*/round;")
                self.rounding = True
            else:
                self.set_text('выберите персонажа, ' + self.active_player().name)
        elif self.state['resources']:
            self.active_player().take_resources(value)
        elif self.state['take quarter']:
            self.active_player().take_quarter(value)
        elif self.state['action pool']:
            self.active_player().recive_command(value)
        elif self.state['build']:
            self.active_player().build(value)
        elif self.state['character ability']:
            self.active_player().character.ability(value)
        elif self.state['grave yard']:
            self.active_player().buy_quart(value)
        elif self.state['smithy']:
            self.active_player().smithy_bonus(value)
        elif self.state['laboratory']:
            self.active_player().burn(value)
Exemple #2
0
 def build(self, card):
     self.gameMaster.state['build'] = False
     if card == 'cancel':
         self.action_pool.append('build')
         self.activate_action()
         return
     if card.value > self.gold:
         return
     self.gold -= card.value  # нужно обновить золото на интерфейсе
     self.setTextRenderer()
     self.city.append(card)
     self.city[-1].built(self)
     doc.write(f"->build: {card.name};")
     # print(self.name + " have built " + card.name + "(value: " + str(card.value) +")" + ", now he(she) has " + str(self.gold) + " gold")
     for i in range(len(self.hand)):
         if self.hand[i] == card:
             self.hand.pop(i)
             break
     self.activate_action(
     )  # мы вернулись в множество действий, а точнее в его остатки "action pool = True"
     if len(
             self.city
     ) >= self.gameMaster.max_city_size and self.gameMaster.firstConstruct == None:
         self.gameMaster.firstConstruct = self
     self.gameMaster.update_interface()
Exemple #3
0
    def _reload(self): # забирает у всех игроков карты персонажей, делает колоду персонажей полной, опусташает очередь
        self.openChars.clear()
        self.not_choosen = 8
        self.controller.dropList.clear()
        self.preparing = True
        game_running = True
        self.set_active_player(self.players[0])
        doc.write("*/reload")
        for player in self.players:
            player.dropCharList()
            player.character = self.character # отдаем каждому игроку нейтрального персонажа
            if len(player.city) >= self.max_city_size: # проверка на конец игры
                game_running = False
                self._winner()

        for char in self.deckChar:
            char.state = "hide"
            char.choosen = False # делаем каждого персонажа НЕ выбранным
            char.alive = True # делаем каждого персонажа вновь живым(исправляем активити ассасина)
            char.robed = False # делаем каждого необоворованным, чтобы обворовать
            char.player = None # теперь карта персонажа не присовоена игроку
            char.set_pos(0, 0) # забираем персонажей из зон игроков

        for i in range(len(self.queue)): # опусташаем очередь
            self.queue[i] = None
        if game_running: self.state['choose char'] = True # если игра не закончена, то ожидаем выбор персонажа
        self.update_interface()
        self.running = game_running
Exemple #4
0
 def prepare_round(self):
     self.info()
     doc.write("*/prepare;")
     doc.write(f"/queue: {self.getPlayersQueue()};")
     if len(self.players) == 2 or len(self.players) == 3: self.prepareChoosHand(1, 0)
     elif len(self.players) == 4: self.prepareChoosHand(1, 2)
     elif len(self.players) == 5: self.prepareChoosHand(1, 1)
     elif len(self.players) == 6: self.prepareChoosHand(1, 0)
     elif len(self.players) == 7: self.prepareChoosHand(1, 0)
Exemple #5
0
 def take_quarter(self, quarter):
     self.gameMaster.state['take quarter'] = False
     self.hand.append(quarter)
     for button in self.gameMaster.controller.buttons:
         self.gameMaster.takeCard([button.value])
     self.gameMaster.update_interface()
     self.activate_action()
     doc.write(
         f"hand({len(self.hand)-1}+1={len(self.hand)}) ~/got: {quarter.name};"
     )
Exemple #6
0
 def round(self):
     for i in range(len(self.queue)):
         if self.queue[i]:
             self.controller.active_player = self.queue[i]
             self.active_player().action(i + 1)
             doc.write(f"/turn: {self.active_player().name}({self.active_player().character.name});")
             self.queue[i] = None # это вызовит ошибки в дальнейшем, очередь используется в методах персонажей(я уже не уверен)
             return
     print("round is over")
     self.rounding = False
Exemple #7
0
 def choose_character(self, char_name):
     for char in self.gameMaster.deckChar:
         if char.name == char_name:
             char.choosen = True
             self.charList.append(char)
             char.player = self
     char = self.charList[-1]
     self.charList[-1].x = self.x + char.width * (len(self.charList) - 1)
     self.charList[-1].y = self.y - char.height
     self.gameMaster.queue[char.initiative - 1] = self
     doc.write(f"->pick: {char_name};")
Exemple #8
0
 def info(self):
     quarters = ""
     built = ""
     for card in self.hand:
         quarters += f"{card.name}, "
     for card in self.city:
         # built += f"{card.name}{card.value, card.color}, "
         built += f"{card.name}, "
     if built == "": built = "None, "
     if quarters == "": quarters = "None, "
     doc.write(self.name + ': gold = ' + str(self.gold) + '; quarters = ' +
               quarters[:-2] + '; city = ' + built[:-2] + ";")
Exemple #9
0
 def init(self, names):
     width = self.controller.get_width()
     height = self.controller.get_height()
     hands = []
     for i in range(len(names)):
         hand = []
         for j in range(4):
             hand.append(self.deckQuar.pop(0))
         hands.append(hand)
     pos = []
     p_width, p_height = width / 3, height / 2.3
     rate = width / len(names)
     step = rate / len(names)
     if len(names) == 2: # высчитываем расположение каждого игрока в зависимости от их количества
         for i in range(len(names)):
             pos.append([rate * i + step - p_width / 2, height / 2 - p_height / 2, p_width, p_height, colors[i]])
     if len(names) == 3:
         pos.append([rate + step * 1.5, p_height / 2, p_width, p_height, colors[0]])
         pos.append([p_width + rate * 2 + step * 1.5,p_height / 2, p_width, p_height, colors[2]])
         pos.append([p_width + rate + step * 1.5 , p_height * 2.65, p_width, p_height, colors[1]])
     if len(names) == 4:
         pos.append([p_width * 1.7, p_height * .5, p_width, p_height, colors[0]])
         # pos.append([p_width, 0, p_width, p_height, colors[0]])
         pos.append([p_width * 3.3, p_height * .5, p_width, p_height, colors[1]])
         pos.append([p_width * 3.3, p_height * 2.5, p_width, p_height, colors[3]])
         pos.append([p_width * 1.7, p_height * 2.5, p_width, p_height, colors[2]])
     if len(names) == 5:
         pos.append([p_width * 2.75 + p_width * .5, p_height * .5, p_width, p_height, colors[0]])
         pos.append([p_width * 4.5, p_height * 2, p_width, p_height, colors[2]])
         pos.append([p_width * 4, p_height * 3.5, p_width, p_height, colors[4]])
         pos.append([p_width * 2.5, p_height * 3.5, p_width, p_height, colors[3]])
         pos.append([p_width * 2, p_height * 2, p_width, p_height, colors[1]])
     if len(names) == 6:
         pos.append([p_width * 2.5, p_height * .5, p_width, p_height, colors[0]])
         pos.append([p_width * 4, p_height * .5, p_width, p_height, colors[1]])
         pos.append([p_width * 4.5, p_height * 2, p_width, p_height, colors[3]])
         pos.append([p_width * 4, p_height * 3.5, p_width, p_height, colors[5]])
         pos.append([p_width * 2.5, p_height * 3.5, p_width, p_height, colors[4]])
         pos.append([p_width * 2, p_height * 2, p_width, p_height, colors[2]])
     if len(names) == 7:
         pos.append([p_width * 4.5, p_height * .5, p_width, p_height, colors[0]])
         pos.append([p_width * 5.5, p_height * 2, p_width, p_height, colors[2]])
         pos.append([p_width * 6, p_height * 3.5, p_width, p_height, colors[4]])
         pos.append([p_width * 5.25, p_height * 5, p_width, p_height, colors[6]])
         pos.append([p_width * 3.75, p_height * 5, p_width , p_height, colors[5]])
         pos.append([p_width * 3, p_height * 3.5, p_width, p_height, colors[3]])
         pos.append([p_width * 3.5, p_height * 2, p_width, p_height, colors[1]])
     self.players.append(Player(names[0], self, hands[0], pos[0], None))
     # self.players.append(Player(names[0], self, hands[0], pos[0], AI.Ai(self, self.controller, names[0])))
     for i in range(len(names) - 1):
         self.players.append(Player(names[i + 1], self, hands[i + 1], pos[i + 1], AI.Ai(self, self.controller, names[i + 1])))
         # self.players.append(Player(names[i + 1], self, hands[i + 1], pos[i + 1], None))
     doc.write("/start")
Exemple #10
0
 def prepareChoosHand(self, hide, open):
     d_open = ""
     for i in range(hide):
         self._random_drop(True)
     for i in range(open):
         str = self._random_drop(False)
         if len(str) != 0:
             d_open += str + ", "
     if len(d_open) == 0:
         d_open = "None, "
     chars = []
     str_chars = ""
     for char in self.deckChar:
         if not char.choosen:
             chars.append([char.primImg["open"], char.name])
             str_chars += char.name + ", "
     self.controller.create_buttons(chars, False)
     self.set_text('выберите персонажа, ' + self.active_player().name)
     self.controller.shuffle()
     if self.active_player().ai: # если раунд начинает ИИ
         self.active_player().ai.setSolution("chooseChar")
     doc.write(f"/dropped: open({d_open[:-2]}), hide({hide}) ~/active: {str_chars[:-2]};")
Exemple #11
0
 def take_resources(self, kind):
     self.gameMaster.state['resources'] = False
     if kind == 'gold':
         doc.write(
             f"->resources: gold({self.gold}+{self.take['gold']}={self.gold+self.take['gold']});"
         )
         self.gold += self.take["gold"]
         # print(self.name + ' has gold: ' + str(self.gold) + ", he recived " + str(self.take["gold"]) + " gold")
         self.setTextRenderer()  # обновим золото на столе у игрока
         self.activate_action()
     elif kind == 'quarter':
         cards = self.gameMaster.giveCard(self.take['quarter'])
         doc.write(
             f"->resources: quarter({self.take['quarter']}) ~/{self._getRow(cards)}"
         )
         self.gameMaster.controller.del_but('all')
         if len(cards) == 0:
             self.activate_action()
             return
         if self.all_actions['library_bonus']:
             str = ""
             for quar in cards:
                 str += quar.name + ", "
                 self.hand.append(quar)
             self.gameMaster.update_interface()
             self.activate_action()
             doc.write(
                 f"hand({len(self.hand)-self.take['quarter']}+{self.take['quarter']}="
                 f"{len(self.hand)}) ~/got: {str[:-2]};")
             return
         buttons = []
         for card in cards:
             buttons.append([card.primImg["open"], card])
         self.gameMaster.controller.create_buttons(buttons, False)
         self.gameMaster.state['take quarter'] = True
     self.gameMaster.update_interface()
Exemple #12
0
 def info(self): # просто дает информацию о состоянии игры
     doc.write("~/info")
     for player in self.players:
         player.info()