Created
February 12, 2014 19:06
-
-
Save benneuman/8962337 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
get '/' do | |
erb :index | |
end | |
get '/offense_board' do | |
build_offense_board | |
end | |
get '/defense_board' do | |
build_defense_board | |
end | |
get '/player1' do | |
session[:player_id] = 1 | |
set_game_id | |
set_enemy_id | |
session.inspect | |
end | |
get '/player2' do | |
session[:player_id] = 2 | |
set_game_id | |
set_enemy_id | |
session.inspect | |
end | |
get '/cookie' do | |
session.inspect | |
end | |
get '/check_turn' do | |
my_turn?.to_s | |
end | |
class ShotTaker | |
attr_reader :player | |
def initialize(shot_coord, player) | |
@shot_coord = shot_coord | |
@player = player | |
@shot = log_shot | |
end | |
def result | |
@shot | |
end | |
def log_shot | |
Guess.create(coord: @shot_coord, player: @player) | |
end | |
def already_taken? | |
@shot.invalid? | |
end | |
def errors | |
@shot.errors.full_messages | |
end | |
end | |
def parse_shot_result(shot) | |
if shot.already_taken? | |
{success: false, | |
reasons: shot.errors}.to_json | |
else | |
game = Glame.new(shot.player.game) | |
parse_turn_result(LatestTurnResult.new(game)) | |
end | |
end | |
post '/shoot' do | |
shot_coord = params["coord"].to_i | |
player = Player.find(1) | |
shot = ShotTaker.new(shot_coord, player) | |
parse_shot_result(shot) | |
# if shot.already_taken? | |
# {success: false, | |
# reasons: shot.errors}.to_json | |
# else | |
# game = Glame.new(1) | |
# parse_turn_result(LatestTurnResult.new(game)) | |
# end | |
# return 'false' if already_shot?(shot_coord) | |
# shot_results = get_shot_results(shot_coord) | |
end | |
class NilBoat | |
def name | |
nil | |
end | |
def sunk? | |
nil | |
end | |
def coords | |
nil | |
end | |
def nil? | |
true | |
end | |
end | |
class Boat | |
attr_reader :name | |
def initialize(ship) | |
@name = ship.name | |
@coords = ship.get_coords | |
@ship = ship | |
end | |
def sunk? | |
enemy = @ship.player.game.players.find { |player| player != @ship.player } | |
enemy_guesses = enemy.get_guesses | |
@coords.all? { |coord| enemy_guesses.include? coord } | |
end | |
end | |
class Coordinate | |
attr_reader :coordinate, :ship | |
def initialize(coordinate, ship) | |
@coordinate = coordinate | |
@ship = ship | |
end | |
def hit? | |
!(@ship).nil? | |
end | |
end | |
class Shot | |
attr_reader :player | |
def initialize(player, coordinate) | |
@player = player | |
@coordinate = coordinate | |
end | |
def hit? | |
@coordinate.hit? | |
end | |
def coordinate | |
@coordinate.coordinate | |
end | |
def ship | |
@coordinate.ship | |
end | |
end | |
class LatestTurnResult | |
attr_reader :latest_guess, :guess | |
def initialize(game) | |
@game = game | |
@shot = build_results | |
end | |
def hit? | |
@shot.hit? | |
end | |
def coord | |
@shot.coordinate | |
end | |
def ship | |
@shot.ship | |
end | |
def player | |
@shot.player | |
end | |
def build_results | |
guess = @game.last_guess | |
coordinate = guess.coord | |
enemy = @game.players.find { |player| player != guess.player } | |
ship = enemy.find_ship_by_coord(coordinate) | |
ship = (ship ? Boat.new(ship) : NilBoat.new) | |
coord_obj = Coordinate.new(coordinate, ship) | |
Shot.new(guess.player, coord_obj) | |
end | |
end | |
class Glame | |
def initialize(game) | |
@game = game | |
# @guesses = [Gluess.new(1, Coordinate.new(1, Ship.new('foo')))] | |
end | |
def last_guess | |
@game.guesses.last | |
end | |
def players | |
@game.players | |
end | |
end | |
def parse_turn_result(turn_result) | |
{success: true, | |
player: turn_result.player, | |
coord: turn_result.coord, | |
hit: turn_result.hit?, | |
ship: {name: turn_result.ship.name, | |
sunk: turn_result.ship.sunk?}}.to_json | |
# turn_result.ship.to_json | |
end | |
def parse_opponent_turn_result(turn_result) | |
if turn_result.player == get_player | |
{success: false, | |
reasons: "Latest shot is by you"}.to_json | |
else | |
parse_turn_result(turn_result) | |
end | |
end | |
get '/player' do | |
session.inspect | |
end | |
get '/opponent_turn_results' do | |
game = Glame.new(Game.find(1)) | |
turn_result = LatestTurnResult.new(game) | |
parse_opponent_turn_result(turn_result) | |
# parse_turn_result(LatestTurnResult.new(1)) | |
# latest_guess = get_latest_guess | |
# return "false" if latest_guess.nil? | |
# return "false" if latest_guess.player == get_player | |
# ship = get_player.find_ship_by_coord(latest_guess.coord) | |
# if ship | |
# {coord: latest_guess.coord, | |
# hit: latest_guess.hit, | |
# sunk: ship.sunk?, | |
# name: ship.name}.to_json | |
# else | |
# {coord: latest_guess.coord, | |
# hit: latest_guess.hit, | |
# sunk: false}.to_json | |
# end | |
end | |
get '/check_game_over' do | |
if won? | |
"1" | |
elsif lost? | |
"2" | |
else | |
"0" | |
end | |
end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment