berlin-ai 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/berlin-ai.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  'lib/ai/game.rb',
28
28
  'lib/ai/map.rb',
29
29
  'lib/ai/node.rb',
30
+ 'lib/ai/player.rb',
30
31
  'test/test_ai.rb']
31
32
 
32
33
  s.require_paths = ['lib', 'test']
data/lib/ai/game.rb CHANGED
@@ -2,7 +2,7 @@ module Berlin
2
2
  module AI
3
3
  # Game keeps track of current games played by the server, indexing them on their uniq id.
4
4
  class Game
5
- attr_reader :id, :map
5
+ attr_reader :id, :map, :moves, :player_id, :number_of_players, :time_limit_per_turn
6
6
 
7
7
  # Keep track of all current games
8
8
  @@games = {}
@@ -39,18 +39,26 @@ module Berlin
39
39
 
40
40
  def initialize id, map, infos
41
41
  @id = id
42
+
43
+ # Extract usefull informations
44
+ @player_id = infos['player_id']
45
+ @time_limit_per_turn = infos['time_limit_per_turn']
46
+ @number_of_players = infos['number_of_players']
47
+
48
+ # Keep track of the player moves
49
+ @moves = []
50
+
51
+ # Create the map
42
52
  @map = Berlin::AI::Map.new map, infos
43
53
  end
54
+
55
+ def add_move from, to, number_of_soldiers
56
+ @moves << {:from=>from.to_i, :to=>to.to_i, :number_of_soldiers=>number_of_soldiers.to_i}
57
+ end
44
58
 
45
59
  def update state
46
60
  @map.update state
47
61
  end
48
-
49
- # This method must be overritten with yours. The return value of this method will be returned
50
- # in a json format to Berlin and be interpreted as the moves you'd like to do.
51
- def turn_moves
52
- raise "Please... overwrite me!"
53
- end
54
62
  end
55
63
  end
56
64
  end
data/lib/ai/map.rb CHANGED
@@ -4,8 +4,6 @@ module Berlin
4
4
  # nodes, points, soldiers, etc. Game will then be able to pick any information
5
5
  # it wants from map to decide what are the best moves to do.
6
6
  class Map
7
- attr_reader :player_id
8
-
9
7
  def initialize map, infos
10
8
  @player_id = infos['player_id']
11
9
  @nodes = {}
data/lib/ai/node.rb CHANGED
@@ -16,6 +16,11 @@ module Berlin
16
16
  @player_id = 0
17
17
  @links = []
18
18
  end
19
+
20
+ # Somewhat useful
21
+ def to_i
22
+ @id.to_i
23
+ end
19
24
 
20
25
  # Registers a given node as an adjacent one.
21
26
  def link_to other_node
@@ -41,6 +46,11 @@ module Berlin
41
46
  def adjacent_nodes
42
47
  @links.dup
43
48
  end
49
+
50
+ # Returns a list of all adjacent nodes, plus self
51
+ def adjacent_nodes_and_self
52
+ adjacent_nodes.push( self )
53
+ end
44
54
  end
45
55
  end
46
56
  end
data/lib/ai/player.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Berlin
2
+ module AI
3
+ class Player
4
+ def self.on_turn
5
+ raise "Overwrite me."
6
+ end
7
+ end
8
+ end
9
+ end
data/lib/berlin-ai.rb CHANGED
@@ -11,10 +11,11 @@ OptionParser.new do |opts|
11
11
  opts.on("-p N", "--port=N", Integer, "Set running port to N") do |p|
12
12
  set :port, p
13
13
  end
14
-
15
- opts.on("--debug", "Run in debug mode (reloads code at each request)") do |p|
16
- if p
17
- require 'sinatra/reloader'
14
+
15
+ opts.on("--debug", "Run in debug mode (reloads code at each request)") do |d|
16
+ if d
17
+ require 'sinatra/reloader'
18
+
18
19
  configure do |c|
19
20
  c.also_reload $0
20
21
  end
@@ -32,7 +33,11 @@ post '/' do
32
33
  game = Berlin::AI::Game.create_or_update params[:action], params[:infos], params[:map], params[:state]
33
34
 
34
35
  if ['ping', 'turn'].include? params[:action]
35
- return game.turn_moves.to_json
36
+ # Let the player decides his moves
37
+ Berlin::AI::Player.on_turn( game )
38
+
39
+ # Return the response to Berlin
40
+ return game.moves.to_json
36
41
  end
37
42
  else
38
43
  p params.inspect
data/lib/version.rb CHANGED
@@ -2,7 +2,7 @@ module Berlin
2
2
  module AI
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- BUILD = 12
5
+ BUILD = 13
6
6
 
7
7
  VERSION = "#{MAJOR}.#{MINOR}.#{BUILD}"
8
8
  end
data/test/test_ai.rb CHANGED
@@ -1,14 +1,10 @@
1
1
  require 'rubygems'
2
2
  require 'berlin-ai'
3
3
 
4
- class Berlin::AI::Game
5
- def turn_moves
6
- map.controlled_nodes.collect do |node|
7
- {
8
- :from => node.id,
9
- :to => node.adjacent_nodes.sample.id,
10
- :number_of_soldiers => rand(node.number_of_soldiers + 1)
11
- }
12
- end
4
+ class Berlin::AI::Player
5
+ def self.on_turn( game )
6
+
7
+
8
+ game.add_move( 1, 2, 12 )
13
9
  end
14
10
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berlin-ai
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 12
10
- version: 0.0.12
9
+ - 13
10
+ version: 0.0.13
11
11
  platform: ruby
12
12
  authors:
13
13
  - Christian Blais
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-05-23 00:00:00 -04:00
20
+ date: 2011-05-24 00:00:00 -04:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -88,6 +88,7 @@ files:
88
88
  - lib/ai/game.rb
89
89
  - lib/ai/map.rb
90
90
  - lib/ai/node.rb
91
+ - lib/ai/player.rb
91
92
  - test/test_ai.rb
92
93
  has_rdoc: true
93
94
  homepage: http://github.com/christianblais/berlin-ai