Class: Codenjoy::Client::Games::Battlecity::Board

Inherits:
BaseBoard
  • Object
show all
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

Methods inherited from BaseBoard

#at?, #board_to_s, #find_all, #get_at, #size

Instance Method Details

#any_of_at?(x, y, elements = []) ⇒ Boolean

Returns:

  • (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

Returns:

  • (Boolean)


159
160
161
162
# File 'lib/codenjoy/games/battlecity/board.rb', line 159

def barrier_at?(x, y)
  return false if Point.new(x, y).out_of?(size)
  get_barriers.include?([x.to_f, y.to_f]);
end

#bullet_at?(x, y) ⇒ Boolean

Returns:

  • (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

Returns:

  • (Boolean)


187
188
189
# File 'lib/codenjoy/games/battlecity/board.rb', line 187

def game_over?
  get_me.nil?;
end

#get_barriersObject



191
192
193
# File 'lib/codenjoy/games/battlecity/board.rb', line 191

def get_barriers
  find_by_list(BARRIERS)
end

#get_bulletsObject



143
144
145
# File 'lib/codenjoy/games/battlecity/board.rb', line 143

def get_bullets
  find_by_list([ELEMENTS[:BULLET]])
end

#get_enemiesObject



139
140
141
# File 'lib/codenjoy/games/battlecity/board.rb', line 139

def get_enemies
  find_by_list(ENEMIES)
end

#get_meObject



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

Returns:

  • (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_sObject



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

#xylObject



123
124
125
# File 'lib/codenjoy/games/battlecity/board.rb', line 123

def xyl
  @xyl ||= LengthToXY.new(size);
end