class Battle::Game
Constants
- STATUSES
Attributes
coords[R]
email[R]
id[R]
name[R]
nuke_status[R]
prize[R]
response[R]
ships[R]
status[R]
sunk[R]
Public Class Methods
new(name = nil, email = nil, id: nil)
click to toggle source
# File lib/battle/game.rb, line 8 def initialize(name = nil, email = nil, id: nil) @name = name @email = email @id = id @coords = [nil, nil] @status = id ? 'start': 'init' @ships = [] @response = {} Battle.ships.each { |name| @ships << Ship.new(name) } end
Public Instance Methods
finished?()
click to toggle source
# File lib/battle/game.rb, line 43 def finished? status == "lost" || status == "victory" end
init?()
click to toggle source
# File lib/battle/game.rb, line 39 def init? status == "init" end
nuke(x, y)
click to toggle source
# File lib/battle/game.rb, line 29 def nuke(x, y) raise GameNotStartedYetError if init? raise GameAlreadyFinishedError if finished? do_request NUKE_URL, id: id, x: x, y: y handle_nuke response end
register!()
click to toggle source
# File lib/battle/game.rb, line 19 def register! raise PlayerNameNotSpecified if name.nil? || name.empty? raise PlayerEmailNotSpecified if email.nil? || email.empty? do_request REGISTER_URL, "name" => name, "email" => email handle_register response end
Private Instance Methods
assign_coordinates()
click to toggle source
# File lib/battle/game.rb, line 102 def assign_coordinates @coords = [response["x"], response["y"]] end
do_request(url, data)
click to toggle source
# File lib/battle/game.rb, line 54 def do_request(url, data) options = { content_type: :json, accept: :json } @response = JSON.parse RestClient.post(url, data.to_json, options) end
handle_defeat()
click to toggle source
# File lib/battle/game.rb, line 92 def handle_defeat defeat if response["game_status"] == "lost" end
handle_nuke()
click to toggle source
# File lib/battle/game.rb, line 73 def handle_nuke sink_ship response['sunk'] handle_nuke_status handle_defeat handle_victory assign_coordinates end
handle_nuke_status()
click to toggle source
# File lib/battle/game.rb, line 88 def handle_nuke_status @nuke_status = response['status'] end
handle_register()
click to toggle source
# File lib/battle/game.rb, line 96 def handle_register @id = response["id"] assign_coordinates start end
handle_victory()
click to toggle source
# File lib/battle/game.rb, line 81 def handle_victory if won? victory @prize = response['prize'] end end
has_ships?()
click to toggle source
# File lib/battle/game.rb, line 65 def has_ships? !ships.empty? end
sink_ship(name)
click to toggle source
# File lib/battle/game.rb, line 59 def sink_ship(name) @sunk = name return if name.nil? ships.delete ships.find { |ship| ship.is? name } end
won?()
click to toggle source
# File lib/battle/game.rb, line 69 def won? !response["prize"].nil? || !has_ships? end