Class: Codenjoy::Client::Games::Battlecity::Board
- Inherits:
-
Object
- Object
- 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
- #at?(x, y, element) ⇒ Boolean
- #barrier_at?(x, y) ⇒ Boolean
- #board_to_s ⇒ Object
- #bullet_at?(x, y) ⇒ Boolean
- #count_near(x, y, element) ⇒ Object
- #find_by_list(list) ⇒ Object
- #findAll(element) ⇒ Object
- #game_over? ⇒ Boolean
- #get_barriers ⇒ Object
- #get_bullets ⇒ Object
- #get_enemies ⇒ Object
- #get_me ⇒ Object
- #get_near(x, y) ⇒ Object
- #getAt(x, y) ⇒ Object
- #near?(x, y, element) ⇒ Boolean
- #process(data) ⇒ Object
- #size ⇒ Object
- #to_s ⇒ Object
- #xyl ⇒ Object
Instance Method Details
#any_of_at?(x, y, elements = []) ⇒ Boolean
229 230 231 232 233 234 235 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 229 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 |
#at?(x, y, element) ⇒ Boolean
163 164 165 166 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 163 def at?(x, y, element) return false if Point.new(x, y).out_of?(size) getAt(x, y) == element; end |
#barrier_at?(x, y) ⇒ Boolean
209 210 211 212 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 209 def (x, y) return false if Point.new(x, y).out_of?(size) .include?([x.to_f, y.to_f]); end |
#board_to_s ⇒ Object
241 242 243 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 241 def board_to_s Array.new(size).each_with_index.map{ |e, n| @raw[(n * size)..((n + 1) * size - 1)]}.join("\n") end |
#bullet_at?(x, y) ⇒ Boolean
224 225 226 227 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 224 def bullet_at?(x, y) return false if Point.new(x, y).out_of?(size) getAt(x, y) == ELEMENTS[:BULLET] end |
#count_near(x, y, element) ⇒ Object
214 215 216 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 214 def count_near(x, y, element) get_near(x, y).select{ |e| e == element}.size end |
#find_by_list(list) ⇒ Object
183 184 185 186 187 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 183 def find_by_list(list) result = list.map{ |e| findAll(e) }.flatten.map{ |e| [e.x, e.y] } return nil if (result.length == 0) result end |
#findAll(element) ⇒ Object
168 169 170 171 172 173 174 175 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 168 def findAll(element) result = [] @raw.length.times do |i| point = xyl.getXY(i); result.push(point) if at?(point.x, point.y, element) end result; end |
#game_over? ⇒ Boolean
237 238 239 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 237 def game_over? get_me.nil?; end |
#get_barriers ⇒ Object
245 246 247 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 245 def find_by_list(BARRIERS) end |
#get_bullets ⇒ Object
193 194 195 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 193 def get_bullets find_by_list([ELEMENTS[:BULLET]]) end |
#get_enemies ⇒ Object
189 190 191 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 189 def get_enemies find_by_list(ENEMIES) end |
#get_me ⇒ Object
177 178 179 180 181 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 177 def get_me me = find_by_list(TANK) return nil if me.nil? find_by_list(TANK).flatten end |
#get_near(x, y) ⇒ Object
197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 197 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(getAt(x + dx, y + dy)) end end result; end |
#getAt(x, y) ⇒ Object
158 159 160 161 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 158 def getAt(x, y) return false if Point.new(x, y).out_of?(size) @raw[xyl.getLength(x, y)]; end |
#near?(x, y, element) ⇒ Boolean
218 219 220 221 222 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 218 def near?(x, y, element) n = get_near(x, y) return false if !n n.include?(element); end |
#process(data) ⇒ Object
146 147 148 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 146 def process(data) @raw = data end |
#size ⇒ Object
150 151 152 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 150 def size @size ||= Math.sqrt(@raw.length); end |
#to_s ⇒ Object
249 250 251 252 253 254 255 256 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 249 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
154 155 156 |
# File 'lib/codenjoy/games/battlecity/board.rb', line 154 def xyl @xyl ||= LengthToXY.new(size); end |