예제 #1
0
 def drawCard(self, card):
     '''
     Draw the specified card from our deck.
     '''
     print 'Drawing card: ', card.card
     playerPowerSend(self.brain, "DRAW", card)
     self.removeCardFromDeck(card)
예제 #2
0
    def playPowerUp(self, action=None, target=None):

        if len(self.powerUpHand) is not 0 and rand.randint(0, 50) < 30:
            return
        # not enough, draw
        if len(self.powerUpHand) < self.me.maxCardsInHand and len(self.powerUpDeck) > 0:
            for card in self.powerUpDeck:
                if(len(self.powerUpHand) == self.me.maxCardsInHand):
                    break
                # select a card
                self.powerUpDeck.remove(card)
                self.powerUpHand.append(card)
                playerPowerSend(self, "DRAW", card)
            return
        
        # can we play one?
        okToPlayHand = filter(lambda p: p.okToPlay, self.powerUpHand)
        print "len(okToPlayHand) = " + str(len(okToPlayHand)) + "/" + str(self.me.maxCardsInHand)
        if len(okToPlayHand) == 0:
            return

        print [my_card.card for my_card in okToPlayHand]
예제 #3
0
    def maybePlayPowerUp(self):
        if len(self.powerUpHand) is not 0 and rand.randint(0, 50) < 30:
            return
        # not enough, draw
        if len(self.powerUpHand) < self.me.maxCardsInHand and len(self.powerUpDeck) > 0:
            for card in self.powerUpDeck:
                if(len(self.powerUpHand) == self.me.maxCardsInHand):
                    break
                # select a card
                self.powerUpDeck.remove(card)
                self.powerUpHand.append(card)
                playerPowerSend(self, "DRAW", card)
            return
        
        # can we play one?
        okToPlayHand = filter(lambda p: p.okToPlay, self.powerUpHand)
        if len(okToPlayHand) == 0:
            return
        powerUp = okToPlayHand[0]
        
        # 10% discard, 90% play
        if rand.randint(1, 10) == 1:
            playerPowerSend(self, "DISCARD", powerUp)
        else:
            if powerUp.card == "MOVE_PASSENGER":
                powerUp.passenger = rand.choice(filter(lambda p: p.car is None, self.passengers))
            if powerUp.card == "CHANGE_DESTINATION" or powerUp.card == "STOP_CAR":
                playersWithPassengers = filter(lambda p: p.guid != self.me.guid and p.limo.passenger is not None, self.players)
                if len(playersWithPassengers) == 0:
                    return
                powerUp.player = rand.choice(playersWithPassengers)

            playerPowerSend(self, "PLAY", powerUp)
            print "Playing powerup " + powerUp.card
        self.powerUpHand.remove(powerUp)
        
        return
예제 #4
0
    def maybePlayPowerUp(self):

        # not enough, draw
        if len(self.powerUpHand2) < self.me.maxCardsInHand and len(self.powerUpDeck) > 0:
            for card in self.powerUpDeck:
                if len(self.powerUpHand2) >= self.me.maxCardsInHand:
                    break
                # select a card
                self.powerUpDeck.remove(card)
                self.powerUpHand2.append(card)
                playerPowerSend(self, "DRAW", card)
            # return
        print "Length of hand", len(self.powerUpHand2)
        print "Max length", self.me.maxCardsInHand

        # can we play one?
        okToPlayHand = filter(lambda p: p.okToPlay, self.powerUpHand2)
        print "Ok to play len", len(okToPlayHand)
        if len(okToPlayHand) == 0:
            return

        for powerUp in okToPlayHand:
            print "Looking at powerUp ", powerUp.card
            if powerUp.card == "ALL_OTHER_CARS_QUARTER_SPEED":
                playerPowerSend(self, "PLAY", powerUp)
                self.powerUpHand2.remove(powerUp)

            elif powerUp.card == "MOVE_PASSENGER":
                currPassenger = self.me.limo.passenger
                if currPassenger != None:
                    # Could try waiting until right before we arrive at destination to use
                    # Although if there are multiple enemies, could stop us from getting rid
                    # of all of them
                    for e in currPassenger.enemies:
                        if e.lobby == currPassenger.destination:
                            powerUp.passenger = e
                            playerPowerSend(self, "PLAY", powerUp)
                            self.powerUpHand2.remove(powerUp)
                            break
            elif powerUp.card == "STOP_CAR":
                # Check for races:
                playersWithoutPassengers = filter(
                    lambda p: p.guid != self.me.guid and p.limo.passenger is None, self.players
                )
                racingPlayer = self.checkForRaces()
                if racingPlayer != None:
                    powerUp.player = racingPlayer
                    print "stopping", racingPlayer, " their destination:", racingPlayer.limo.path[
                        -1
                    ], "our dest", self.limo.path[-1]

                # Stop best player if we have not found a race
                else:
                    bestScore = 0
                    bestPlayer = None
                    for player in self.players:
                        if player.totalScore > bestScore:
                            bestScore = player.totalScore
                            bestPlayer = player
                    powerUp.player = bestPlayer

                playerPowerSend(self, "PLAY", powerUp)
                self.powerUpHand2.remove(powerUp)

            elif powerUp.card == "CHANGE_DESTINATION":
                playersWithPassengers = filter(
                    lambda p: p.guid != self.me.guid and p.limo.passenger is not None, self.players
                )
                for player in playersWithPassengers:
                    # If a player is between 3 and 10 spaces away from destination
                    if (10 > abs(player.limo.tilePosition[0] - player.limo.path[-1][0]) > 3) or (
                        10 > abs(player.limo.tilePosition[1] - player.limo.path[-1][1]) > 3
                    ):
                        powerUp.player = player
                        playerPowerSend(self, "PLAY", powerUp)
                        self.powerUpHand2.remove(powerUp)
                        break

            else:
                playerPowerSend(self, "DISCARD", powerUp)
                self.powerUpHand2.remove(powerUp)
            # playerPowerSend(self, "PLAY", powerUp)

        return
예제 #5
0
    def maybePlayPowerUp(self):

        # not enough, draw
        if len(self.powerUpHand) < self.me.maxCardsInHand and len(self.powerUpDeck) > 0:
            for card in self.powerUpDeck:
                if(len(self.powerUpHand) == self.me.maxCardsInHand):
                    break
                # select a card
                self.powerUpDeck.remove(card)
                self.powerUpHand.append(card)
                playerPowerSend(self, "DRAW", card)
            return

        # can we play one?
        okToPlayHand = filter(lambda p: p.okToPlay, self.powerUpHand)
        if len(okToPlayHand) == 0:
            return
        powerUp = okToPlayHand[0]

        if (powerUp.card == "MULT_DELIVERY_QUARTER_SPEED"):
            playerPowerSend(self, "DISCARD", powerUp)
            return

        if (powerUp.card == "MULT_DELIVERING_PASSENGER" or
            powerUp.card == "MULT_DELIVER_AT_COMPANY" or
            powerUp.card == "MULT_DELIVERY_QUARTER_SPEED"):
            # we need extra coffee for these
            # don't play if we don't have enough coffee
            if self.me.limo.coffeeServings <= 1:
                return

        if powerUp.card == "MULT_DELIVER_AT_COMPANY":
            # if we're already going to the destination, play this card
            if self.me.limo.passenger is not None and powerUp.company == self.me.limo.passenger.destination.name:
                pass
            else:
                return

        if powerUp.card == "MOVE_PASSENGER":
            powerUp.passenger = rand.choice(filter(lambda p: p.car is None, self.passengers))

        if powerUp.card == "CHANGE_DESTINATION":
            # highest score player with a passenger in the car plus points delivered if they deliver the passenger they have
            playersWithPassengers = filter(lambda p: p.guid != self.me.guid and p.limo.passenger is not None, self.players)
            playersWithPassengers = sorted(playersWithPassengers, key=lambda x: x.score + x.limo.passenger.pointsDelivered, reverse=True)
            if len(playersWithPassengers) == 0:
                return
            powerUp.player = playersWithPassengers[0]

        if powerUp.card == "STOP_CAR":
            # highest score player with or w/o passenger plus points delivered if they deliver the passenger they have
            playersWithPassengers = filter(lambda p: p.guid != self.me.guid, self.players)
            playersWithPassengers = sorted(playersWithPassengers, key=lambda x: x.score + x.limo.passenger.pointsDelivered if x.limo.passenger is not None else x.score, reverse=True)
            if len(playersWithPassengers) == 0:
                return
            powerUp.player = playersWithPassengers[0]

        if powerUp.card == "RELOCATE_ALL_CARS":
            # don't play the relocate card if we have a passenger
            if not self.me.limo.passenger:
                return


        #if we get here, just play the card
        playerPowerSend(self, "PLAY", powerUp)

        print "Playing powerup " + powerUp.card
        self.powerUpHand.remove(powerUp)

        return
예제 #6
0
        okToPlayHand = filter(lambda p: p.okToPlay, self.powerUpHand)
        print "len(okToPlayHand) = " + str(len(okToPlayHand)) + "/" + str(self.me.maxCardsInHand)
        if len(okToPlayHand) == 0:
            return

        print [my_card.card for my_card in okToPlayHand]

        powerUp = rand.choice(okToPlayHand)

        # by choosing actions

        power_up_cards = [power_up_card for power_up_card in okToPlayHand if power_up_card.card == "MOVE_PASSENGER"]
        if action == "MOVE_ENEMY" and target != None and len(power_up_cards) > 0:
            powerUp = power_up_cards[0]
            powerUp.passenger = target
            playerPowerSend(self, "PLAY", powerUp)
            print "*" * 70
            print "Playing powerup " + powerUp.card
            self.powerUpHand.remove(powerUp)
            return
        
        # Discard cards we don't want
        if powerUp.card in ["MULT_DELIVERY_QUARTER_SPEED", "MULT_DELIVERING_PASSENGER", "MULT_DELIVER_AT_COMPANY"]: 
            playerPowerSend(self, "DISCARD", powerUp)
        else:
            # by highest score
            if powerUp.card == "MOVE_PASSENGER":
                return
            #    powerUp.passenger = rand.choice(filter(lambda p: p.car is None, self.passengers))          
            elif powerUp.card == "CHANGE_DESTINATION":
                playersWithPassengers = filter(lambda p: p.guid != self.me.guid and p.limo.passenger is not None, self.players)
예제 #7
0
 def playCard(self, card):
     '''
     Play the specified card and remove it from our deck.
     '''
     playerPowerSend(self.brain, "PLAY", card)
     self.removeCardFromHand(card)
예제 #8
0
 def discardCard(self, card):
     '''
     Discard the specified card and remove it from our deck.
     '''
     playerPowerSend(self.brain, "DISCARD", card)
     self.removeCardFromHand(card)