Skip to content

Repository files navigation

Berlin-Ai

Berlin-Ai is a gem to quickly ramp up on the Berlin game.

Changelog

See changelog for recent changes

Usage

Create your AI in a simple .rb file:

require'berlin-ai'# Require the berlin-ai library.classBerlin::AI::Playerdefself.on_turn(game)# Implement the on_turn method of Berlin::AI::Player.# Do your magic here.# Here's an AI that randomly moves soldiers from node to node.game.map.controlled_nodes.eachdo |node|
node.adjacent_nodes.shuffle.eachdo |other_node|
soldiers=rand(0..(node.available_soldiers))game.add_move(node,other_node,soldiers)endendendend

You're now ready to host your AI locally or with Heroku. We use Sinatra in this gem, so a simple ruby your_ai_file.rb will launch the web server.

To modify some defaults, you can execute ruby your_ai_file.rb -h for a list of available options.

API

game (Berlin::AI::Game)

Entry point in the API from Berlin::AI::Player#on_turn.

# General information on the game.game.id# This game unique id.game.number_of_players# Number of players in this game.game.maximum_number_of_turns# Maximum number of turns for this game.game.player_id# Your player id for this game.game.time_limit_per_turn# Maximum number of time (ms) to make your moves, per turn.# Information on the current turn.game.current_turn# The current turn count.game.turns_left# Remaining turns before the end of the game.# Add a move to perform this turn by your AI.# IMPORTANT: 'from' and 'to' must be node objects.game.add_move(from,to,number_of_soldiers)# List of moves to perform this turn by your AI.game.moves# => [{ from: node_id, to: node_id, number_of_soldiers: int }]# The game's map with its own set of useful methods.game.map

map (Berlin::AI::Map)

Helper methods to work with nodes.

map.directed?# Determine if a path from A to B is A -> B (directed) or A <-> B (not directed)map.nodes# All the nodes.map.owned_nodes# Your nodes, including those with 0 soldiers.map.enemy_nodes# Enemy nodes.map.free_nodes# Nodes not controlled by anyone.map.foreign_nodes# Nodes not owned (i.e. enemy nodes and free nodes).map.controlled_nodes# Owned nodes, excluding those with 0 soldiers.

node (Berlin::AI::Node)

Node objects obtained when querying the map.

node.id# Id of the node.node.map# The map to which the node belongs tonode.type# Type of node.node.player_id# Owner of the node.node.number_of_soldiers# Number of soldiers on the node.node.incoming_soldiers# Owned soldiers coming to this node (result from add_move calls).node.available_soldiers# Owned remaining soldiers on this node (result from add_move calls).node.==(other)# Check if two nodes are the same.node.adjacent?(other_node)# Check if two nodes are adjacents.node.occupied?# Check if some soldiers are on the node.node.enemy?# Check if another player (not you) owns the node.node.mine?(node.owned?)# Check if you own the node.node.free?# Check if no one own the node.node.foreign?# Check if you don't own the node. Might belongs to an enemy or be free.node.owned_by?(player_id)# Check if the node is owned by a given player.node.adjacent_nodes# Get a list of adjacent nodes.node.adjacent_nodes_and_self# Get a list of adjacent nodes, including this node.node.soldiers_per_turn# Spawned soldiers per turn if you own this node.node.points# Given points by this node at the end of the game.

Installation

Add this line to your application's Gemfile:

gem 'berlin-ai'

And then execute:

$ bundle

Or install it yourself as:

$ gem install berlin-ai

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

Berlin Artificial Intelligence

Resources

Stars

32 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages