Exemple #1
0
    def ApplyAction(self, gameState):

        #logging.debug("APPLYING ACTION! \n TYPE = {0}".format(BankTradeOfferAction.type))

        # ADD THE 'UNKNOWN' RESOURCE TYPE (not present in trade transaction)
        give = self.giveResources + [0]
        get = self.getResources + [0]

        gameState.players[self.playerNumber].resources -= listm(give)
        gameState.players[self.playerNumber].resources += listm(get)
Exemple #2
0
    def ApplyAction(self, gameState):

        gameState.currState = gameState.currTradeOffer.previousGameState
        gameState.currPlayer = gameState.currTradeOffer.fromPlayerNumber

        give = gameState.currTradeOffer.giveResources + [0]
        get = gameState.currTradeOffer.getResources + [0]

        gameState.players[self.offerPlayerNumber].resources -= listm(give)
        gameState.players[self.playerNumber].resources -= listm(get)

        gameState.players[self.offerPlayerNumber].resources += listm(give)
        gameState.players[self.playerNumber].resources += listm(get)

        gameState.currTradeOffer = None
Exemple #3
0
class BuildRoadAction(BuildAction):

    type = 'BuildRoad'
    cost = listm([
        1,  # brick
        0,  # ore
        0,  # wool
        0,  # grain
        1,  # lumber
        0
    ])  # unknown

    pieceId = 0

    def __init__(self, playerNumber, position, index):
        super(BuildRoadAction,
              self).__init__(playerNumber, position, index,
                             BuildRoadAction.pieceId, BuildRoadAction.cost)

    def ApplyAction(self, gameState):

        super(BuildRoadAction, self).ApplyAction(gameState)

        if gameState.checkLongestRoad:
            gameState.UpdateLongestRoad()

        if gameState.currState == "START1B":

            gameState.players[gameState.currPlayer].firstRoadBuild = True

            nextPlayer = (gameState.currPlayer + 1) % len(gameState.players)

            if nextPlayer == gameState.startingPlayer:
                gameState.currState = "START2A"

            else:
                gameState.currPlayer = nextPlayer
                gameState.currState = "START1A"

        elif gameState.currState == "START2B":

            gameState.players[gameState.currPlayer].secondRoadBuild = True

            if gameState.currPlayer == gameState.startingPlayer:
                gameState.FinishSetup()
                gameState.currState = "PLAY"
            else:
                nextPlayer = (gameState.currPlayer - 1) % len(
                    gameState.players)
                gameState.currPlayer = nextPlayer
                gameState.currState = "START2A"

        elif gameState.currState == "PLACING_FREE_ROAD1":
            gameState.currState = "PLACING_FREE_ROAD2"

        elif gameState.currState == "PLACING_FREE_ROAD2":
            gameState.currState = "PLAY1"
Exemple #4
0
class BuildSettlementAction(BuildAction):

    type = 'BuildSettlement'
    cost = listm([
        1,  # brick
        0,  # ore
        1,  # wool
        1,  # grain
        1,  # lumber
        0
    ])  # unknown

    pieceId = 1

    def __init__(self, playerNumber, position, index):
        super(BuildSettlementAction,
              self).__init__(playerNumber, position, index,
                             BuildSettlementAction.pieceId,
                             BuildSettlementAction.cost)

    def ApplyAction(self, gameState):

        super(BuildSettlementAction, self).ApplyAction(gameState)

        #if gameState.boardNodes[self.position].portType is not None:
        #    gameState.players[self.playerNumber].UpdateTradeRates(gameState)

        if gameState.checkLongestRoad:

            for edge in gameState.boardNodes[self.position].adjacentEdges:
                checkLongestRoad = False
                if gameState.boardEdges[edge].construction is not None and \
                   gameState.boardEdges[edge].construction.owner != self.playerNumber:
                    checkLongestRoad = True
                    break

            if checkLongestRoad:
                gameState.UpdateLongestRoad()

        if gameState.currState == "START1A":

            gameState.players[gameState.currPlayer].firstSettlementBuild = True

            gameState.currState = "START1B"

        elif gameState.currState == "START2A":

            gameState.players[
                gameState.currPlayer].secondSettlementBuild = True

            gameState.players[self.playerNumber].GetStartingResources(
                gameState)

            gameState.currState = "START2B"
Exemple #5
0
class BuildCityAction(BuildAction):

    type = 'BuildCity'
    cost = listm([
        0,  # brick
        3,  # ore
        0,  # wool
        2,  # grain
        0,  # lumber
        0
    ])  # unknown

    pieceId = 2

    def __init__(self, playerNumber, position, index):
        super(BuildCityAction,
              self).__init__(playerNumber, position, index,
                             BuildCityAction.pieceId, BuildCityAction.cost)

    '''
Exemple #6
0
class BuyDevelopmentCardAction(Action):

    type = 'BuyDevelopmentCard'
    cost = listm([
        0,  # brick
        1,  # ore
        1,  # wool
        1,  # grain
        0,  # lumber
        0
    ])  # unknown

    def __init__(self, playerNumber):

        super(BuyDevelopmentCardAction, self).__init__()
        self.playerNumber = playerNumber

    def GetMessage(self, gameName, currGameStateName=None):

        return BuyCardRequestMessage(gameName)

    def ApplyAction(self, gameState):

        #logging.debug("APPLYING ACTION! \n TYPE = {0}".format(BuyDevelopmentCardAction.type))

        gameState.players[
            self.playerNumber].resources -= BuyDevelopmentCardAction.cost

        if self.tradeOptimistic:
            discountCount = 0
            for i in range(
                    0, len(gameState.players[self.playerNumber].resources)):
                if gameState.players[self.playerNumber].resources[i] < 0:
                    discountCount += gameState.players[
                        self.playerNumber].resources[i] * -1
                    gameState.players[self.playerNumber].resources[i] = 0
            self.players[self.playerNumber].DiscountAtRandom(discountCount)

        gameState.DrawDevCard(self.playerNumber)
Exemple #7
0
    def __init__(self, name, seatNumber):

        self.name = name
        self.seatNumber = seatNumber
        self.resources = listm([0, 0, 0, 0, 0, 0])
        self.developmentCards = [0 for i in range(0, len(g_developmentCards))]
        self.mayPlayDevCards = [
            False for i in range(0, len(g_developmentCards))
        ]
        self.recentCard = [0 for i in range(0, len(g_developmentCards))]
        self.roads = []
        self.settlements = []
        self.cities = []
        self.biggestRoad = False
        self.biggestArmy = False
        self.numberOfPieces = [15, 5, 4]
        self.knights = 0
        self.playedDevCard = False
        self.discardCardCount = 0

        self.diceProduction = \
        {
            2  : listm([0, 0, 0, 0, 0, 0]),
            3  : listm([0, 0, 0, 0, 0, 0]),
            4  : listm([0, 0, 0, 0, 0, 0]),
            5  : listm([0, 0, 0, 0, 0, 0]),
            6  : listm([0, 0, 0, 0, 0, 0]),
            8  : listm([0, 0, 0, 0, 0, 0]),
            9  : listm([0, 0, 0, 0, 0, 0]),
            10 : listm([0, 0, 0, 0, 0, 0]),
            11 : listm([0, 0, 0, 0, 0, 0]),
            12 : listm([0, 0, 0, 0, 0, 0])
        }

        self.tradeRates = [4, 4, 4, 4, 4, 4]

        self.possibleRoads = []
        self.possibleSettlements = []

        self.firstSettlementBuild = False
        self.secondSettlementBuild = False
        self.firstRoadBuild = False
        self.secondRoadBuild = False

        self.rolledTheDices = False
        self.placedRobber = False
        self.victoryPoints = 0
        self.updateVictoryPoints = False

        self.roadCount = 0

        self.agentName = "RANDOM"

        self.logStats = False
        self.logData = None