コード例 #1
0
ファイル: cards.py プロジェクト: xoraxax/lykan
 def kill(self):
     assert self.player.is_alive
     self.player.is_alive = False
     yield gameengine.InfoMessage(_("This player died:"),
                                  players=[self.player])
     yield gameengine.InfoMessage(_("The role was %(title)s.",
                                    title=_(self.player.role_card.TITLE)),
                                  fast=True)
     yield from self.after_death()
     return True
コード例 #2
0
ファイル: cards.py プロジェクト: xoraxax/lykan
 def run_at_night(self):
     player = yield gameengine.Select1Player(
         self.player, _("Whose role do you want to inquire?"))
     yield gameengine.InfoMessage(_("This player has the role '%(title)s'.",
                                    title=_(player.role_card.TITLE)),
                                  player=self.player,
                                  players=[player])
コード例 #3
0
 def get_player_generator(self, player):
     yield from self.gen_basics_for_player(player)  # First time.
     if player and not self.game_start.is_set():
         yield gameengine.InfoMessage(
             _("Waiting for game master to start the game."),
             player=player,
             temporary=True)
     yield from self._convert_player_pipe(player)
コード例 #4
0
ファイル: cards.py プロジェクト: xoraxax/lykan
 def reduce(self, other_cards):
     game = self.player.game
     poll = {card: card.to_kill for card in other_cards}
     votee = util.check_vote(game.players_alive, poll)
     if votee:
         yield gameengine.InfoMessage(
             _("You werewolves chose to kill this player:"),
             players=[votee],
             player=self.player)
     if votee and votee not in game.hitlist:
         game.hitlist.append(self.to_kill)
コード例 #5
0
 def _run(self):
     self.game_start.wait()
     gen = self.play_game()
     reply = None
     while True:
         try:
             req = gen.send(reply)
             if req.player is None:
                 if isinstance(req, gameengine.EverybodySelect1Player):
                     for player in self.players_alive:
                         player.last_req = req
                         player.pipe_parent.send(req)
                     votes = {}
                     for player in self.players_alive:
                         votee = player.pipe_parent.recv()
                         votes[player] = req.coerce(votee)
                     reply = votes
                 elif isinstance(req, gameengine.InfoMessage):
                     self.last_req = req
                     self.pipe_parent.send(req)
                     self.pipe_parent.recv()
                     reply = None
                 else:
                     assert False, "Unsupported request"
             else:
                 req.player.last_req = req
                 while True:
                     req.player.pipe_parent.send(req)
                     reply = req.player.pipe_parent.recv()
                     if isinstance(req, gameengine.SelectNPlayers):
                         if len(reply) == req.n:
                             break
                         else:
                             error = gameengine.InfoMessage(
                                 _("Please select the correct amount of players."
                                   ), req.player)
                             req.player.pipe_parent.send(error)
                             req.player.pipe_parent.recv()
                     else:
                         break
                 req.player.last_req = None
                 reply = req.coerce(reply)
         except gameengine.GameEnd:
             break
コード例 #6
0
ファイル: cards.py プロジェクト: xoraxax/lykan
    def prepare(self):
        couple = (yield
                  gameengine.SelectNPlayers(self.player, 2,
                                            _("Who should fall in love?")))
        for first, second in itertools.permutations(couple):
            LovingCouple.make_in_love(first)

            def make_trigger(to_kill):
                def trigger():
                    if to_kill.is_alive:
                        yield gameengine.InfoMessage(
                            _("Thus with a kiss you die!"))
                        yield from to_kill.kill()

                return trigger

            first.role_card.after_death_triggers.append(make_trigger(second))
            yield gameengine.InfoMessage(_(
                "You fell in love with this player. Be sure to survive both!"),
                                         player=first,
                                         players=[second],
                                         vibrate=False)
コード例 #7
0
ファイル: cards.py プロジェクト: xoraxax/lykan
 def trigger():
     if to_kill.is_alive:
         yield gameengine.InfoMessage(
             _("Thus with a kiss you die!"))
         yield from to_kill.kill()
コード例 #8
0
ファイル: cards.py プロジェクト: xoraxax/lykan
 def after_death(self):
     yield from super().after_death()
     yield gameengine.InfoMessage(_("And the hunter produced a shot ..."))
     yield from (yield gameengine.Select1Player(
         self.player, _("Who do you want to shoot?"))).kill()