My first Halite bot (v.8)
This commit is contained in:
parent
fe28d919e7
commit
89683b2fd7
1 changed files with 83 additions and 0 deletions
83
mybot.py
Normal file
83
mybot.py
Normal file
|
@ -0,0 +1,83 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# My first Halite bot. v.8
|
||||
|
||||
# Import the Halite SDK, which will let you interact with the game.
|
||||
import hlt
|
||||
from hlt import *
|
||||
|
||||
import random
|
||||
import logging
|
||||
|
||||
def getHalitestNeighbor(pos, map):
|
||||
halitest = pos
|
||||
for neighbor in pos.get_surrounding_cardinals():
|
||||
if map[neighbor].halite_amount > map[halitest].halite_amount:
|
||||
halitest = neighbor
|
||||
return halitest
|
||||
|
||||
def processShip(ship, shipyard, map):
|
||||
if ship.halite_amount < 600:
|
||||
dest = getHalitestNeighbor(ship.position, map)
|
||||
if dest == ship.position:
|
||||
return ship.stay_still()
|
||||
else:
|
||||
order = map.naive_navigate(ship, dest)
|
||||
return ship.move(order)
|
||||
else:
|
||||
order = map.naive_navigate(ship, shipyard.position)
|
||||
return ship.move(Direction.convert(order))
|
||||
|
||||
ship_status = {}
|
||||
game_turn = 0
|
||||
|
||||
# This game object contains the initial game state.
|
||||
game = hlt.Game()
|
||||
# Respond with your name.
|
||||
game.ready("Vylbot_alpha")
|
||||
|
||||
while True:
|
||||
# Get the latest game state.
|
||||
game.update_frame()
|
||||
# You extract player metadata and the updated map metadata here for convenience.
|
||||
me = game.me
|
||||
game_map = game.game_map
|
||||
|
||||
# A command queue holds all the commands you will run this turn.
|
||||
command_queue = []
|
||||
|
||||
for ship in me.get_ships():
|
||||
logging.info("Ship {} has {} halite.".format(ship.id, ship.halite_amount))
|
||||
|
||||
if ship.id not in ship_status:
|
||||
ship_status[ship.id] = "exploring"
|
||||
|
||||
if ship_status[ship.id] == "returning":
|
||||
if ship.position == me.shipyard.position:
|
||||
ship_status[ship.id] = "exploring"
|
||||
else:
|
||||
order = game_map.naive_navigate(ship, me.shipyard.position)
|
||||
command_queue.append(ship.move(order))
|
||||
continue
|
||||
elif ship.halite_amount >= constants.MAX_HALITE / 2:
|
||||
ship_status[ship.id] = "returning"
|
||||
else:
|
||||
order = processShip(ship, me.shipyard, game_map)
|
||||
command_queue.append(order)
|
||||
|
||||
|
||||
# If you're on the first turn and have enough halite, spawn a ship.
|
||||
# Don't spawn a ship if you currently have a ship at port, though.
|
||||
if game.turn_number <= 1 and me.halite_amount >= constants.SHIP_COST and not game_map[me.shipyard].is_occupied:
|
||||
command_queue.append(game.me.shipyard.spawn())
|
||||
else:
|
||||
bestPlayer = None
|
||||
for key, player in game.players.items():
|
||||
if (bestPlayer is None or player.halite_amount > bestPlayer.halite_amount) and me.id != key:
|
||||
bestPlayer = player
|
||||
if bestPlayer is not None and random.random() > (1 - (game_turn / 500))/8 and me.halite_amount > 1000 and not game_map[me.shipyard].is_occupied:
|
||||
command_queue.append(me.shipyard.spawn())
|
||||
|
||||
# Send your moves back to the game environment, ending this turn.
|
||||
game.end_turn(command_queue)
|
||||
game_turn += 1
|
Reference in a new issue