def drawCard(self, card): ''' Draw the specified card from our deck. ''' print 'Drawing card: ', card.card playerPowerSend(self.brain, "DRAW", card) self.removeCardFromDeck(card)
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]
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
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
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
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)
def playCard(self, card): ''' Play the specified card and remove it from our deck. ''' playerPowerSend(self.brain, "PLAY", card) self.removeCardFromHand(card)
def discardCard(self, card): ''' Discard the specified card and remove it from our deck. ''' playerPowerSend(self.brain, "DISCARD", card) self.removeCardFromHand(card)