Class: Codenjoy::Client::Games::Battlecity::Board
- Defined in:
- lib/codenjoy/games/battlecity/board.rb
Constant Summary collapse
- ELEMENTS =
{ NONE: ' ', BATTLE_WALL: '☼', BANG: 'Ѡ', CONSTRUCTION: '╬', CONSTRUCTION_DESTROYED_DOWN: '╩', CONSTRUCTION_DESTROYED_UP: '╦', CONSTRUCTION_DESTROYED_LEFT: '╠', CONSTRUCTION_DESTROYED_RIGHT: '╣', CONSTRUCTION_DESTROYED_DOWN_TWICE: '╨', CONSTRUCTION_DESTROYED_UP_TWICE: '╥', CONSTRUCTION_DESTROYED_LEFT_TWICE: '╞', CONSTRUCTION_DESTROYED_RIGHT_TWICE: '╡', CONSTRUCTION_DESTROYED_LEFT_RIGHT: '│', CONSTRUCTION_DESTROYED_UP_DOWN: '─', CONSTRUCTION_DESTROYED_UP_LEFT: '┌', CONSTRUCTION_DESTROYED_RIGHT_UP: '┐', CONSTRUCTION_DESTROYED_DOWN_LEFT: '└', CONSTRUCTION_DESTROYED_DOWN_RIGHT: '┘', CONSTRUCTION_DESTROYED: ' ', BULLET: '•', TANK_UP: '▲', TANK_RIGHT: '►', TANK_DOWN: '▼', TANK_LEFT: '◄', OTHER_TANK_UP: '˄', OTHER_TANK_RIGHT: '˃', OTHER_TANK_DOWN: '˅', OTHER_TANK_LEFT: '˂', AI_TANK_UP: '?', AI_TANK_RIGHT: '»', AI_TANK_DOWN: '¿', AI_TANK_LEFT: '«' }
- ENEMIES =
[ ELEMENTS[:AI_TANK_UP], ELEMENTS[:AI_TANK_DOWN], ELEMENTS[:AI_TANK_LEFT], ELEMENTS[:AI_TANK_RIGHT], ELEMENTS[:OTHER_TANK_UP], ELEMENTS[:OTHER_TANK_DOWN], ELEMENTS[:OTHER_TANK_LEFT], ELEMENTS[:OTHER_TANK_RIGHT] ]
- TANK =
[ ELEMENTS[:TANK_UP], ELEMENTS[:TANK_DOWN], ELEMENTS[:TANK_LEFT], ELEMENTS[:TANK_RIGHT] ]
- BARRIERS =
[ ELEMENTS[:BATTLE_WALL], ELEMENTS[:CONSTRUCTION], ELEMENTS[:CONSTRUCTION_DESTROYED_DOWN], ELEMENTS[:CONSTRUCTION_DESTROYED_UP], ELEMENTS[:CONSTRUCTION_DESTROYED_LEFT], ELEMENTS[:CONSTRUCTION_DESTROYED_RIGHT], ELEMENTS[:CONSTRUCTION_DESTROYED_DOWN_TWICE], ELEMENTS[:CONSTRUCTION_DESTROYED_UP_TWICE], ELEMENTS[:CONSTRUCTION_DESTROYED_LEFT_TWICE], ELEMENTS[:CONSTRUCTION_DESTROYED_RIGHT_TWICE], ELEMENTS[:CONSTRUCTION_DESTROYED_LEFT_RIGHT], ELEMENTS[:CONSTRUCTION_DESTROYED_UP_DOWN], ELEMENTS[:CONSTRUCTION_DESTROYED_UP_LEFT], ELEMENTS[:CONSTRUCTION_DESTROYED_RIGHT_UP], ELEMENTS[:CONSTRUCTION_DESTROYED_DOWN_LEFT], ELEMENTS[:CONSTRUCTION_DESTROYED_DOWN_RIGHT] ]
Instance Method Summary collapse
- #any_of_at?(x, y, elements = []) ⇒ Boolean
- #barrier_at?(x, y) ⇒ Boolean
- #bullet_at?(x, y) ⇒ Boolean
- #count_near(x, y, element) ⇒ Object
- #find_by_list(list) ⇒ Object
- #game_over? ⇒ Boolean
- #get_barriers ⇒ Object
- #get_bullets ⇒ Object
- #get_enemies ⇒ Object
- #get_me ⇒ Object
- #get_near(x, y) ⇒ Object
- #near?(x, y, element) ⇒ Boolean
- #process(data) ⇒ Object
- #to_s ⇒ Object
- #xyl ⇒ Object
Methods inherited from BaseBoard
#at?, #board_to_s, #find_all, #get_at, #size
Instance Method Details
#any_of_at?(x, y, elements = []) ⇒ Boolean
179 180 181 182 183 184 185 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 179 def any_of_at?(x, y, elements = []) return false if Point.new(x, y).out_of?(size) elements.each do |e| return true if at?(x, y, e) end false; end |
#barrier_at?(x, y) ⇒ Boolean
159 160 161 162 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 159 def (x, y) return false if Point.new(x, y).out_of?(size) .include?([x.to_f, y.to_f]); end |
#bullet_at?(x, y) ⇒ Boolean
174 175 176 177 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 174 def bullet_at?(x, y) return false if Point.new(x, y).out_of?(size) get_at(x, y) == ELEMENTS[:BULLET] end |
#count_near(x, y, element) ⇒ Object
164 165 166 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 164 def count_near(x, y, element) get_near(x, y).select{ |e| e == element}.size end |
#find_by_list(list) ⇒ Object
133 134 135 136 137 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 133 def find_by_list(list) result = list.map{ |e| find_all(e) }.flatten.map{ |e| [e.x, e.y] } return nil if (result.length == 0) result end |
#game_over? ⇒ Boolean
187 188 189 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 187 def game_over? get_me.nil?; end |
#get_barriers ⇒ Object
191 192 193 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 191 def find_by_list(BARRIERS) end |
#get_bullets ⇒ Object
143 144 145 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 143 def get_bullets find_by_list([ELEMENTS[:BULLET]]) end |
#get_enemies ⇒ Object
139 140 141 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 139 def get_enemies find_by_list(ENEMIES) end |
#get_me ⇒ Object
127 128 129 130 131 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 127 def get_me me = find_by_list(TANK) return nil if me.nil? find_by_list(TANK).flatten end |
#get_near(x, y) ⇒ Object
147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 147 def get_near(x, y) return false if Point.new(x, y).out_of?(size) result = [] (-1..1).each do |dx| (-1..1).each do |dy| next if (dx == 0 && dy == 0) result.push(get_at(x + dx, y + dy)) end end result; end |
#near?(x, y, element) ⇒ Boolean
168 169 170 171 172 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 168 def near?(x, y, element) n = get_near(x, y) return false if !n n.include?(element); end |
#process(data) ⇒ Object
119 120 121 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 119 def process(data) @raw = data end |
#to_s ⇒ Object
195 196 197 198 199 200 201 202 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 195 def to_s [ "Board:\n#{board_to_s}", "My tank at: #{get_me}", "Enemies at: #{get_enemies}", "Bullets at: #{get_bullets}" ].join("\n") end |
#xyl ⇒ Object
123 124 125 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 123 def xyl @xyl ||= LengthToXY.new(size); end |