berlin-ai 0.0.27 → 0.0.28
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ai/game.rb +10 -2
- data/lib/ai/map.rb +22 -1
- data/lib/ai/node.rb +26 -5
- data/lib/ai/player.rb +1 -1
- data/lib/berlin-ai.rb +1 -1
- data/lib/version.rb +1 -1
- metadata +1 -1
data/lib/ai/game.rb
CHANGED
@@ -51,7 +51,14 @@ module Berlin
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def add_move from, to, number_of_soldiers
|
54
|
-
|
54
|
+
# remove moving soldiers from from node
|
55
|
+
from.available_soldiers -= number_of_soldiers
|
56
|
+
|
57
|
+
# adding incoming soldiers to next node
|
58
|
+
to.incoming_soldiers += number_of_soldiers
|
59
|
+
|
60
|
+
# add move
|
61
|
+
@moves << {:from => from.to_i, :to => to.to_i, :number_of_soldiers => number_of_soldiers.to_i}
|
55
62
|
end
|
56
63
|
|
57
64
|
def update infos, state
|
@@ -63,8 +70,9 @@ module Berlin
|
|
63
70
|
@map.update state
|
64
71
|
end
|
65
72
|
|
66
|
-
def
|
73
|
+
def reset!
|
67
74
|
@moves = []
|
75
|
+
@map.nodes.each(&:reset!)
|
68
76
|
end
|
69
77
|
end
|
70
78
|
end
|
data/lib/ai/map.rb
CHANGED
@@ -42,7 +42,28 @@ module Berlin
|
|
42
42
|
# Returns an array of all owned nodes
|
43
43
|
def owned_nodes
|
44
44
|
nodes.select do |node|
|
45
|
-
node.owned_by?
|
45
|
+
node.owned_by?(@player_id)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns an array of all enemy nodes
|
50
|
+
def enemy_nodes
|
51
|
+
nodes.select do |node|
|
52
|
+
node.owned? && !owned_by?(@player_id)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Returns an array of all free nodes
|
57
|
+
def free_nodes
|
58
|
+
nodes.select do |node|
|
59
|
+
node.free?
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Returns an array of all nodes that we don't owned
|
64
|
+
def foreign_nodes
|
65
|
+
nodes.reject do |node|
|
66
|
+
node.owned_by?(@player_id)
|
46
67
|
end
|
47
68
|
end
|
48
69
|
|
data/lib/ai/node.rb
CHANGED
@@ -4,7 +4,7 @@ module Berlin
|
|
4
4
|
# We'll be able to use it in order to know if two
|
5
5
|
# nodes are adjacent, how much points worth a node, etc.
|
6
6
|
class Node
|
7
|
-
attr_accessor :id, :player_id, :number_of_soldiers, :type
|
7
|
+
attr_accessor :id, :player_id, :number_of_soldiers, :incoming_soldiers, :available_soldiers, :type
|
8
8
|
attr_reader :soldiers_per_turn, :points
|
9
9
|
|
10
10
|
def initialize node, type
|
@@ -13,22 +13,33 @@ module Berlin
|
|
13
13
|
@points = type['points']
|
14
14
|
@soldiers_per_turn = type['soldiers_per_turn']
|
15
15
|
@number_of_soldiers = 0
|
16
|
-
@player_id =
|
16
|
+
@player_id = nil
|
17
17
|
@links = []
|
18
18
|
end
|
19
|
+
|
20
|
+
# Reset information for new turn
|
21
|
+
def reset!
|
22
|
+
self.incoming_soldiers = 0
|
23
|
+
self.available_soldiers = self.number_of_soldiers
|
24
|
+
end
|
19
25
|
|
20
26
|
# Somewhat useful
|
21
27
|
def to_i
|
22
28
|
@id.to_i
|
23
29
|
end
|
24
30
|
|
31
|
+
# Used to compare if two nodes are the same
|
32
|
+
def ==(other)
|
33
|
+
other.id == @id
|
34
|
+
end
|
35
|
+
|
25
36
|
# Registers a given node as an adjacent one.
|
26
|
-
def link_to
|
37
|
+
def link_to(other_node)
|
27
38
|
@links << other_node
|
28
39
|
end
|
29
40
|
|
30
41
|
# Returns true if other_node is adjacent to self
|
31
|
-
def adjacent?
|
42
|
+
def adjacent?(other_node)
|
32
43
|
@links.include? other_node
|
33
44
|
end
|
34
45
|
|
@@ -36,9 +47,19 @@ module Berlin
|
|
36
47
|
def occupied?
|
37
48
|
@number_of_soldiers > 0
|
38
49
|
end
|
50
|
+
|
51
|
+
# Returns true if owned by any player
|
52
|
+
def owned?
|
53
|
+
!!@player_id
|
54
|
+
end
|
55
|
+
|
56
|
+
# Returns true if no one on the node
|
57
|
+
def free?
|
58
|
+
!owned?
|
59
|
+
end
|
39
60
|
|
40
61
|
# Returns true if node owned by provided player id
|
41
|
-
def owned_by?
|
62
|
+
def owned_by?(player_id)
|
42
63
|
@player_id == player_id
|
43
64
|
end
|
44
65
|
|
data/lib/ai/player.rb
CHANGED
data/lib/berlin-ai.rb
CHANGED
data/lib/version.rb
CHANGED