コード例 #1
0
    def start_turn(self):
        def callback(message):
            if not message.isdigit():
                player.output("That is not a number")
                return ask()
            t = int(message)
            if 0 < t <= len(self.hand):
                card = self.hand.cards[t - 1]
                card.play(self)
                self.plugin.pubout("%s played %s." % (self.name, card))
                self.play_amount += 1
                self.halt_game = None
                return True
            player.output("That is not between 1 and %d" % len(self.p.hand))
            return self

        def ask():
            player.request_input(
                "Choose a number from 1 to %d" % len(self.hand),
                (callback, '|'.join(
                    str(n + 1) for n in xrange(len(self.hand)))))

        log.logger.info("Starting %s's turn" % self.name)
        self.output("It is now your turn.")
        self.plugin.pubout("It is now %s's turn." % self.name)

        hand_str = pp_index(self.hand)
        if hand_str == "":
            hand_str = " no cards."
        else:
            hand_str = ": " + hand_str
        self.output('Your hand contains%s' % hand_str)

        rules = self.game.rule_pile
        if rules.no_hand_bonus(self) > 0:
            cards = self.draw(rules.no_hand_bonus(self))
            self.output(self.name, "You drew: " + pp_index(cards))

        if rules.is_first_play_random and len(
                self.hand) > 1 and self.game.rule_pile.draw_amount > 1:
            log.logger.info("FPR in effect")
            # First play random rules.
            t = self.game.turn - 1
            if t < 0:
                player = self.game.players[-1]
            else:
                player = self.game.players[t]
            self.plugin.pubout(
                ("%s must choose the first card from " + "%s's hand.") %
                (player.name, self.name))
            self.halt_game = "First Play Random"
            ask()

        d, p = self.can_draw_amount, self.can_play_amount
        self.draw_amount = self.play_amount = 0
        self.output("You can draw %d card%s, and play %s card%s." % \
                            (d, "" if d == 1 else "s", "all" if p == 0 else p, \
                                "" if p == 1 else "s"))
コード例 #2
0
ファイル: Fluxx.py プロジェクト: magcius/pyGBot
    def start_turn(self):
        
        def callback(message):
            if not message.isdigit():
                player.output("That is not a number")
                return ask()
            t = int(message)
            if 0 < t <= len(self.hand):
                card = self.hand.cards[t-1]
                card.play(self)
                self.plugin.pubout("%s played %s." % (self.name, card))
                self.play_amount += 1
                self.halt_game = None
                return True
            player.output("That is not between 1 and %d" % len(self.p.hand))
            return self

        def ask():
            player.request_input("Choose a number from 1 to %d" % len(self.hand), 
                                 (callback, '|'.join(str(n+1) for n in xrange(len(self.hand)))))
    
        log.logger.info("Starting %s's turn" % self.name)
        self.output("It is now your turn.")
        self.plugin.pubout("It is now %s's turn." % self.name)
        
        hand_str = pp_index(self.hand)
        if hand_str == "":
            hand_str = " no cards."
        else:
            hand_str = ": " + hand_str
        self.output('Your hand contains%s' % hand_str)
        
        rules = self.game.rule_pile
        if rules.no_hand_bonus(self) > 0:
            cards = self.draw(rules.no_hand_bonus(self))
            self.output(self.name, "You drew: " + pp_index(cards))
            
        if rules.is_first_play_random and len(self.hand) > 1 and self.game.rule_pile.draw_amount > 1:
            log.logger.info("FPR in effect")
            # First play random rules.
            t = self.game.turn-1
            if t < 0:
                player = self.game.players[-1]
            else:
                player = self.game.players[t]
            self.plugin.pubout(("%s must choose the first card from " +
                                 "%s's hand.") % (player.name, self.name))
            self.halt_game = "First Play Random"
            ask()
            
        d, p = self.can_draw_amount, self.can_play_amount
        self.draw_amount = self.play_amount = 0
        self.output("You can draw %d card%s, and play %s card%s." % \
                            (d, "" if d == 1 else "s", "all" if p == 0 else p, \
                                "" if p == 1 else "s"))
コード例 #3
0
ファイル: actions.py プロジェクト: Dritz/pyGBot
    def ask(self):
        
        def callback(player_picked):
            player, players, players_dict = self.player, self.players, self.players_dict
            if player_picked.isdigit():
                player_picked = int(player_picked)
                num_players = len(players)
                if player_picked > num_players:
                    player.output("There aren't that many players!")
                    return self.ask()
                player_picked = players[player_picked-1]
            else:
                if player_picked.lower() not in players_dict:
                    player.output("They're not playing.")
                    return self.ask()
                player_picked = players_dict[player_picked.lower()]
            card_picked = choice(player_picked.hand)
            player_name = player_picked.name
            player.plugin.pubout("%s used %s's %s." % \
                                     (player.name, player_name, card_picked))
            player.hand.receive(card_picked) # So the card belongs to the player now.
            card_picked.play(player)
            player.halt_game = None
            return True

        if len(self.players) == 1:
            callback("1")
        else:
            player, players, players_dict = self.player, self.players, self.players_dict
            regex = "\d|" + "|".join(p.name for p in players)
            player.request_input("Whose player's card do you want to play? %s" % \
                                     pp_index(players), (callback, regex))
コード例 #4
0
    def ask(self):
        def callback(player_picked):
            player, players, players_dict = self.player, self.players, self.players_dict
            if player_picked.isdigit():
                player_picked = int(player_picked)
                num_players = len(players)
                if player_picked > num_players:
                    player.output("There aren't that many players!")
                    return self.ask()
                player_picked = players[player_picked - 1]
            else:
                if player_picked.lower() not in players_dict:
                    player.output("They're not playing.")
                    return self.ask()
                player_picked = players_dict[player_picked.lower()]
            card_picked = choice(player_picked.hand)
            player_name = player_picked.name
            player.plugin.pubout("%s used %s's %s." % \
                                     (player.name, player_name, card_picked))
            player.hand.receive(
                card_picked)  # So the card belongs to the player now.
            card_picked.play(player)
            player.halt_game = None
            return True

        if len(self.players) == 1:
            callback("1")
        else:
            player, players, players_dict = self.player, self.players, self.players_dict
            regex = "\d|" + "|".join(p.name for p in players)
            player.request_input("Whose player's card do you want to play? %s" % \
                                     pp_index(players), (callback, regex))
コード例 #5
0
    def ask(self):
        def callback(message):
            player = self.player
            rule = message
            if rule.isdigit():
                rule = int(rule)
                num_rules = len(self.rules)
                if rule > num_rules:
                    self.player.output("There aren't that many rules in play!")
                    return self.ask()
                rule_picked = self.rules[rule - 1]
            else:
                rule_picked = player.game.find_card(rule)
                if rule_picked not in self.rules:
                    player.output("You can't trash that rule.")
                    return self.ask()
            player.plugin.pubout("%s trashed %s." % (player.name, rule_picked))
            player.game.draw_discard.discard(rule_picked)
            player.halt_game = None
            return True

        if (len(self.rules) == 1):
            callback("1")  # Just use that card
            return

        rules_str = pp_index(self.rules)
        self.player.request_input(
            "Which rule do you want to trash? %s" % rules_str,
            (callback, rule_regex))
コード例 #6
0
    def draw(self, channel, user, params):
        def printHelp():
            self.privout(
                channel, """
            Syntax:    %B!draw [%Unumcards%U]%B
            Please say or message !help draw for more information.
            """)

        if len(params) == 0:
            num_cards = 0
        elif len(params) == 1 and params[0].isdigit():
            num_cards = int(params[0])
        else:
            return printHelp()

        player = self.users[user.lower()]
        handlen = len(player.hand)
        if player.halt_game is not None:
            return self.privout(channel, ("You cannot draw a card while %s " + \
                                      "is in effect.") % player.halt_game)
        cards = player.draw(num_cards)
        if cards is None:
            return self.turn_postfix(player)
        player.draw_amount += len(cards)
        # Make sure to reply to user
        # Don't show the cards in public!
        self.privout(user, "You drew: " + pp_index(cards, handlen + 1))
        if player.draws_left > 0:
            self.privout(user, "You can draw %d more card%s." % \
                    (player.draws_left, "" if player.draws_left else "s"))
        self.turn_postfix(player)
        return cards
コード例 #7
0
    def ask(self):
        def callback(keeper):
            player, players, keeper_list = self.player, self.players, self.keeper_list
            if keeper.isdigit():
                keeper = int(keeper)
                num_keepers = len(keeper_list)
                if keeper > num_keepers:
                    player.output(
                        "There aren't that many keepers on the table!")
                    return self.ask()
                keeper_picked = self.keeper_list[keeper - 1]
            else:
                keeper_picked = player.game.deck.find_card(keeper.upper())
                if keeper_picked not in self.keeper_list:
                    player.output("You can't %s that keeper." % (self.word))
                    return self.ask()
            player_name = keeper_picked.owner.player.name
            if player_name != player.name:
                player.plugin.pubout("%s %s %s's %s." % \
                                           (player.name, self.word_past, player_name, keeper_picked))
            else:
                player.plugin.pubout("%s %s their %s." % \
                                           (player.name, self.word_past, keeper_picked))
            self.do(keeper_picked)
            player.halt_game = None
            return True

        player, players, keeper_list = self.player, self.players, self.keeper_list
        player.halt_game = self.title
        s = ["Which keeper or creeper do you want to %s?" % self.word]
        for p in players:
            keepers = p.keepers
            if len(keepers) == 0: continue
            s.append(pp_index(keepers, len(self.keeper_list) + 1))
        player.request_input('\n'.join(s)(callback, keeper_regex))
コード例 #8
0
    def ask(self):
        def callback(card):
            player = self.player
            if card.isdigit():
                card = int(card)
                num_cards = len(self.cards)
                if card == 0:
                    player.output("You silly!")
                    return self.ask()
                if card > num_cards:
                    player.output("You didn't get that many cards!")
                    return self.ask()
                card_picked = self.cards[card - 1]
            else:
                card_picked = player.game.find_card(card.upper())
                if card_picked not in self.cards:
                    player.output("You can't play that card.")
                    return self.ask()
            player.hand.receive(card_picked)
            card_picked.play(player)
            self.cards.remove(card_picked)

            if len(self.cards) == self.draw_total - self.play_total:
                player.game.draw_discard.discard(self.cards)
                player.halt_game = None
                return True
            self.ask()

        player = self.player
        player.request_input("What do you want to play? " + \
                                 pp_index(cards, len(self.player.hand)), \
                                 (callback, card_regex))
コード例 #9
0
ファイル: Fluxx.py プロジェクト: magcius/pyGBot
 def draw(self, channel, user, params):
     def printHelp():
         self.privout(channel, """
         Syntax:    %B!draw [%Unumcards%U]%B
         Please say or message !help draw for more information.
         """)
     if len(params) == 0:
         num_cards = 0
     elif len(params) == 1 and params[0].isdigit():
         num_cards = int(params[0])
     else:
         return printHelp()
     
     player = self.users[user.lower()]
     handlen = len(player.hand)
     if player.halt_game is not None:
         return self.privout(channel, ("You cannot draw a card while %s " + \
                                   "is in effect.") % player.halt_game)
     cards = player.draw(num_cards)
     if cards is None:
         return self.turn_postfix(player)
     player.draw_amount += len(cards)
     # Make sure to reply to user
     # Don't show the cards in public!
     self.privout(user, "You drew: " + pp_index(cards, handlen+1))
     if player.draws_left > 0:
         self.privout(user, "You can draw %d more card%s." % \
                 (player.draws_left, "" if player.draws_left else "s"))
     self.turn_postfix(player)
     return cards
コード例 #10
0
ファイル: actions.py プロジェクト: Dritz/pyGBot
    def ask(self):
        
        def callback(message):
            player = self.player
            rule = message
            if rule.isdigit():
                rule = int(rule)
                num_rules = len(self.rules)
                if rule > num_rules:
                    self.player.output("There aren't that many rules in play!")
                    return self.ask()
                rule_picked = self.rules[rule-1]
            else:
                rule_picked = player.game.find_card(rule)
                if rule_picked not in self.rules:
                    player.output("You can't trash that rule.")
                    return self.ask()
            player.plugin.pubout("%s trashed %s." % (player.name, rule_picked))
            player.game.draw_discard.discard(rule_picked)
            player.halt_game = None
            return True

        if(len(self.rules) == 1):
            callback("1") # Just use that card
            return
        
        rules_str = pp_index(self.rules)
        self.player.request_input("Which rule do you want to trash? %s" % rules_str,
                                  (callback, rule_regex))
コード例 #11
0
ファイル: actions.py プロジェクト: Dritz/pyGBot
    def ask(self):
        
        def callback(card):
            player = self.player
            if card.isdigit():
                card = int(card)
                num_cards = len(self.cards)
                if card == 0:
                    player.output("You silly!")
                    return self.ask()
                if card > num_cards:
                    player.output("You didn't get that many cards!")
                    return self.ask()
                card_picked = self.cards[card-1]
            else:
                card_picked = player.game.find_card(card.upper())
                if card_picked not in self.cards:
                    player.output("You can't play that card.")
                    return self.ask()
            player.hand.receive(card_picked)
            card_picked.play(player)
            self.cards.remove(card_picked)

            if len(self.cards) == self.draw_total - self.play_total:
                player.game.draw_discard.discard(self.cards)
                player.halt_game = None
                return True
            self.ask()

        
        player = self.player
        player.request_input("What do you want to play? " + \
                                 pp_index(cards, len(self.player.hand)), \
                                 (callback, card_regex))
コード例 #12
0
    def ask(self):
        def callback(message):
            params = message.replace("give","") \
                            .replace("to","") \
                            .replace("!", "").split()
            if len(params) != 2:
                return self.player.output(
                    "Syntax:    %B[give] %Ucard%U [to] %Uplayer%U%B")
            card_picked, receiver = params
            rec_lower = receiver.lower()

            # Check if the player exists.
            if rec_lower not in self.players_dict:
                self.player.output("There is no player with that name.")
                return self.ask()

            # Figure out what card to give
            if card_picked.isdigit():
                card_picked = int(card_picked)
                handlen = len(self.cards)
                if card_picked > handlen:
                    self.player.output("You only have %d card%s to give." % \
                                  (handlen, plural(self.cards)))
                    return self.ask()
                card_picked = self.cards[card_picked - 1]
            else:
                card_picked = self.player.game.find_card(card_picked.upper())
                if card_picked not in self.cards:
                    self.player.output("You didn't draw that card!")
                    return self.ask()
            # Check if you've already given that person enough cards
            if self.cards_given[rec_lower] == self.draw_amount:
                self.player.output("You already gave them %d cards." %
                                   self.draw_amount)
                return self.ask()
            # Send the card and delete from set that you drew
            hand = self.players_dict[rec_lower].hand
            hand.receive(card_picked)
            self.cards_given[rec_lower] += 1
            self.cards.remove(card_picked)

            # Notify player
            if receiver != self.player.name:
                self.players_dict[rec_lower].output("%s gave you %d: %s." \
                                  % (self.player.name, len(hand), card_picked))
                self.player.output("You gave %s to %s." %
                                   (card_picked, receiver))
            else:
                self.player.output("You gave yourself %d: %s." %
                                   (len(hand), card_picked))
            # Check if you're done yet
            if sum(self.cards_given.values()) == self.total_cards:
                self.player.halt_game = None
                return True
            return self.ask()

        self.player.halt_game = self.title
        self.player.request_input("Choose which cards to give to who: %s" % \
                                 pp_index(self.cards), (callback, self.regex))
コード例 #13
0
ファイル: actions.py プロジェクト: Dritz/pyGBot
    def ask(self):
        
         def callback(message):
            params = message.replace("give","") \
                            .replace("to","") \
                            .replace("!", "").split()
            if len(params) != 2:
                return self.player.output("Syntax:    %B[give] %Ucard%U [to] %Uplayer%U%B")
            card_picked, receiver = params
            rec_lower = receiver.lower()

            # Check if the player exists.
            if rec_lower not in self.players_dict:
                self.player.output("There is no player with that name.")
                return self.ask()

            # Figure out what card to give
            if card_picked.isdigit():
                card_picked = int(card_picked)
                handlen = len(self.cards)
                if card_picked > handlen:
                    self.player.output("You only have %d card%s to give." % \
                                  (handlen, plural(self.cards)))
                    return self.ask()
                card_picked = self.cards[card_picked-1]
            else:
                card_picked = self.player.game.find_card(card_picked.upper())
                if card_picked not in self.cards:
                    self.player.output("You didn't draw that card!")
                    return self.ask()
            # Check if you've already given that person enough cards
            if self.cards_given[rec_lower] == self.draw_amount:
                self.player.output("You already gave them %d cards." % self.draw_amount)
                return self.ask()
            # Send the card and delete from set that you drew
            hand = self.players_dict[rec_lower].hand
            hand.receive(card_picked)
            self.cards_given[rec_lower] += 1
            self.cards.remove(card_picked)

            # Notify player
            if receiver != self.player.name:
                self.players_dict[rec_lower].output("%s gave you %d: %s." \
                                  % (self.player.name, len(hand), card_picked))
                self.player.output("You gave %s to %s." % (card_picked, receiver))
            else:
                self.player.output("You gave yourself %d: %s." % (len(hand), card_picked))
            # Check if you're done yet
            if sum(self.cards_given.values()) == self.total_cards:
                self.player.halt_game = None
                return True
            return self.ask()
         
         self.player.halt_game = self.title
         self.player.request_input("Choose which cards to give to who: %s" % \
                                  pp_index(self.cards), (callback, self.regex))
コード例 #14
0
    def turn_postfix(self, player):
        def callback():
            p_count = len(player.game.players)
            self.turn_count += 1
            if self.turn_count >= p_count - 1 and player.halt_game is None and \
                    player.draws_left <= 0 and \
                    (player.plays_left <= 0 or len(player.hand) <= 0):
                player.finish_turn()

        self.turn_count = 0
        if player.draws_left > 0 and player.plays_left <= 0:  # Auto-draw for a player.
            handlen = len(player.hand)
            cards = player.draw(0)
            player.draw_amount += len(cards)
            player.output("You auto-drew: " + pp_index(cards, handlen))
        # Check for winnage.
        if player.game.current_goal is not None:
            player.game.current_goal.check_for_win(player.game)
        for p in player.game.players:
            if p != player:
                p.enforce_limits(callback)
        if len(player.game.players) == 1:
            callback()
コード例 #15
0
ファイル: actions.py プロジェクト: Dritz/pyGBot
    def ask(self):

        def callback(keeper):
            player, players, keeper_list = self.player, self.players, self.keeper_list
            if keeper.isdigit():
                keeper = int(keeper)
                num_keepers = len(keeper_list)
                if keeper > num_keepers:
                    player.output("There aren't that many keepers on the table!")
                    return self.ask()
                keeper_picked = self.keeper_list[keeper-1]
            else:
                keeper_picked = player.game.deck.find_card(keeper.upper())
                if keeper_picked not in self.keeper_list:
                    player.output("You can't %s that keeper." % (self.word))
                    return self.ask()
            player_name = keeper_picked.owner.player.name
            if player_name != player.name:
                player.plugin.pubout("%s %s %s's %s." % \
                                           (player.name, self.word_past, player_name, keeper_picked))
            else:
                player.plugin.pubout("%s %s their %s." % \
                                           (player.name, self.word_past, keeper_picked))
            self.do(keeper_picked)
            player.halt_game = None
            return True

        
        player, players, keeper_list = self.player, self.players, self.keeper_list
        player.halt_game = self.title
        s = ["Which keeper or creeper do you want to %s?" % self.word]
        for p in players:
            keepers = p.keepers
            if len(keepers) == 0: continue
            s.append(pp_index(keepers, len(self.keeper_list)+1))
        player.request_input('\n'.join(s)
                             (callback, keeper_regex))
コード例 #16
0
ファイル: Fluxx.py プロジェクト: magcius/pyGBot
    def turn_postfix(self, player):

        def callback():
            p_count = len(player.game.players)
            self.turn_count += 1
            if self.turn_count >= p_count - 1 and player.halt_game is None and \
                    player.draws_left <= 0 and \
                    (player.plays_left <= 0 or len(player.hand) <= 0):
                player.finish_turn()
        
        self.turn_count = 0
        if player.draws_left > 0 and player.plays_left <= 0: # Auto-draw for a player.
            handlen = len(player.hand)
            cards = player.draw(0)
            player.draw_amount += len(cards)
            player.output("You auto-drew: " + pp_index(cards, handlen))
        # Check for winnage.
        if player.game.current_goal is not None:
            player.game.current_goal.check_for_win(player.game)
        for p in player.game.players:
            if p != player:
                p.enforce_limits(callback)
        if len(player.game.players) == 1:
            callback()
コード例 #17
0
ファイル: Fluxx.py プロジェクト: magcius/pyGBot
 def post_deal_hook(self):
     for p in self.players:
         p.output("You got: %s" % pp_index(p.hand))
コード例 #18
0
 def post_deal_hook(self):
     for p in self.players:
         p.output("You got: %s" % pp_index(p.hand))
コード例 #19
0
 def do_action(self, player):
     handlen = len(player.hand)
     cards = player.draw(3 + player.game.rule_pile.inflation_amount, True)
     player.output("You drew: " + pp_index(cards, handlen))
コード例 #20
0
ファイル: actions.py プロジェクト: Dritz/pyGBot
 def do_action(self, player):
     hand = player.hand
     cards_in_hand = len(hand)
     player.game.draw_discard.discard(hand)
     cards = player.draw(cards_in_hand, True)
     player.output("You drew: " + pp_index(cards))
コード例 #21
0
 def do_action(self, player):
     hand = player.hand
     cards_in_hand = len(hand)
     player.game.draw_discard.discard(hand)
     cards = player.draw(cards_in_hand, True)
     player.output("You drew: " + pp_index(cards))
コード例 #22
0
ファイル: actions.py プロジェクト: Dritz/pyGBot
 def do_action(self, player):
     handlen = len(player.hand)
     cards = player.draw(3 + player.game.rule_pile.inflation_amount, True)
     player.output("You drew: " + pp_index(cards, handlen))