コード例 #1
0
ファイル: botGenAlg.py プロジェクト: hberker/Halite-3-Bot
def getShipMove(ship,sy):
    bestSpot = []
    best = 0
    amount = 820

    if game_map[game_map.normalize(ship.position)].halite_amount < constants.MAX_HALITE / 35 and (ship.halite_amount < amount ):
        for i in Direction.get_all_cardinals():
            if(game_map[ship.position.directional_offset(i)].is_occupied == False):
                bestSpot.append(game_map[ship.position.directional_offset(i)])

        for i in bestSpot:
            if(i.halite_amount > best):
                
                    #bestDir = game_map.naive_navigate(ship, i.position)
                    best = i.halite_amount
                    bestDir = game_map.get_unsafe_moves(ship.position, i.position)[0]
        
        if best < 50:
            bestDir = Direction.convertStr(random.choice(["n", "s","e","w"]))
        place = game_map[ship.position.directional_offset((bestDir))].position
        inPicked = False
        for i in placepicked:
            if (i.__eq__(place)):
                inPicked = True
        if inPicked == False and game_map[ship.position.directional_offset(bestDir)].is_occupied == False:
            placepicked.append(ship.position.directional_offset(bestDir))
            command_queue.append((ship.move(bestDir)))
        else:
            placepicked.append(ship.position)

            command_queue.append(ship.stay_still())

        #returnCommand = (ship.move(bestDir))
    else:
        if ship.is_full or ship.halite_amount > amount:
            #command_queue.append(game_map.get_unsafe_moves(ship.position, Shipyard)[0])
            placeVal = game_map[ship.position.directional_offset(game_map.get_unsafe_moves(ship.position, Shipyard)[0])].position
            inPicked = False
            for e in placepicked:
                if (placeVal.__eq__(e)):
                    inPicked = True

            if inPicked == True:
                command_queue.append(ship.stay_still())
                placepicked.append(ship.position)
            else:
                command_queue.append(ship.move(game_map.naive_navigate(ship, Shipyard)))
                placepicked.append(placeVal) 
        else:
            command_queue.append(ship.stay_still())
            placepicked.append(ship.position)
コード例 #2
0
def getShipMove(ship, sy):
    cleanPlaces(targetArea)
    bestSpot = []
    best = 0
    amount = 700
    options = 0
    if ship.position == Shipyard:
        openSpot = False
        for i in Direction.get_all_cardinals():
            if (game_map[ship.position.directional_offset(i)].is_occupied ==
                    False):
                openSpot = True

        if openSpot == False:
            bestDir = Direction.North
            placepicked.append(ship.position.directional_offset(bestDir))
            command_queue.append(ship.move(bestDir))
            return 0

    #< constants.MAX_HALITE / 35
    if (game_map[ship.position].halite_amount <= 50 and
        (ship.halite_amount < amount)) or (Shipyard.__eq__(ship.position)):
        #print("WOOOOOOLK")
        for i in Direction.get_all_cardinals():
            if (game_map[ship.position.directional_offset(i)].is_occupied ==
                    False):
                bestSpot.append(game_map[ship.position.directional_offset(i)])
                options += 1
        for i in bestSpot:
            if (i.halite_amount >= best):
                #bestDir = game_map.naive_navigate(ship, i.position)
                best = i.halite_amount
                bestDir = game_map.get_unsafe_moves(ship.position,
                                                    i.position)[0]
        if best < 100:
            if len(targetArea) == 0:
                pos = []
                for i in Direction.get_all_cardinals():
                    found = False
                    if (game_map[ship.position.directional_offset(
                            i)].is_occupied == False
                            and game_map[ship.position.directional_offset(i)].
                            position.__ne__(game_map[me.shipyard].position)):
                        pos.append(i)
                        #bestDir = (i)
                        found = True
                bestDir = random.choice(pos)
                if found == False:
                    bestDir = (0, 0)
                placepicked.append(ship.position.directional_offset(bestDir))
                command_queue.append(ship.move(bestDir))
                return 0
            else:

                bestDir = Direction.convertStr(getClosestSpot(ship))
                if game_map[ship.position.directional_offset(
                        bestDir)].is_occupied == False and not game_map[
                            ship.position.directional_offset(
                                bestDir)].position in placepicked:
                    placepicked.append(
                        ship.position.directional_offset(bestDir))
                    command_queue.append(ship.move(bestDir))
                    return 0
                bestDir = (0, 0)

        place = game_map[ship.position.directional_offset((bestDir))].position
        inPicked = False
        for i in placepicked:
            if (i.__eq__(place)):
                inPicked = True
        if inPicked == False and game_map[ship.position.directional_offset(
                bestDir)].is_occupied == False:
            placepicked.append(ship.position.directional_offset(bestDir))
            command_queue.append((ship.move(bestDir)))
            return 0
        else:
            isFound = False
            bestDir = (0, 0)
            for i in Direction.get_all_cardinals():
                if (game_map[ship.position.directional_offset(i)].is_occupied
                        == False) and ((game_map[
                            ship.position.directional_offset(i)].position
                                        in placepicked) == False):
                    bestDir = (game_map.get_unsafe_moves(
                        ship.position, ship.position.directional_offset(i))[0])
                    isFound = True
                    placepicked.append(
                        ship.position.directional_offset(bestDir))
                    command_queue.append(ship.move(bestDir))
                    return 0

            if isFound == False:
                command_queue.append(ship.stay_still())
                placepicked.append(ship.position)
                return 0

        #returnCommand = (ship.move(bestDir))
    else:
        if ship.is_full or ship.halite_amount > amount:
            #command_queue.append(game_map.get_unsafe_moves(ship.position, Shipyard)[0])
            placeVal = game_map[ship.position.directional_offset(
                game_map.get_unsafe_moves(ship.position,
                                          Shipyard)[0])].position
            inPicked = False
            for e in placepicked:
                if (placeVal.__eq__(e)):
                    inPicked = True

            if inPicked == True:
                isFound = False
                bestDir = (0, 0)
                for i in Direction.get_all_cardinals():
                    if (game_map[ship.position.directional_offset(
                            i)].is_occupied == False) and (
                                (game_map[ship.position.directional_offset(
                                    i)].position in placepicked) == False):
                        bestDir = (game_map.get_unsafe_moves(
                            ship.position,
                            ship.position.directional_offset(i))[0])
                        isFound = True
                        placepicked.append(
                            ship.position.directional_offset(bestDir))
                        command_queue.append(ship.move(bestDir))
                        return 0

                ##command_queue.append(ship.stay_still())
                ##placepicked.append(ship.position)
                ##return 0

            else:
                command_queue.append(
                    ship.move(game_map.naive_navigate(ship, Shipyard)))
                placepicked.append(placeVal)
                return 0

        else:
            if game_map[ship.position].halite_amount > 0:
                command_queue.append(ship.stay_still())
                placepicked.append(ship.position)
                return 0
            else:
                isFound = False
                bestDir = (0, 0)
                for i in Direction.get_all_cardinals():
                    if (game_map[ship.position.directional_offset(
                            i)].is_occupied == False) and (
                                (game_map[ship.position.directional_offset(
                                    i)].position in placepicked) == False):
                        bestDir = (game_map.get_unsafe_moves(
                            ship.position,
                            ship.position.directional_offset(i))[0])
                        isFound = True
                placepicked.append(ship.position.directional_offset(bestDir))
                command_queue.append(ship.move(bestDir))
                return 0