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