Skip to content

Instantly share code, notes, and snippets.

@amelialaundy
Created September 12, 2014 05:06
Show Gist options
  • Save amelialaundy/8a2bfab3e1b4fd8efe7f to your computer and use it in GitHub Desktop.
Save amelialaundy/8a2bfab3e1b4fd8efe7f to your computer and use it in GitHub Desktop.
amelia2
class Game < ActiveRecord::Base
has_many :game_objects
after_create :generate_players
after_create :generate_jewels
before_create :overwrite_num_players
validates_presence_of :size, :num_players, :name
PLAYER_STARTING_POSITION = [
{x: 0, y: 0},
{x:11, y: 11}
]
JEWEL_RATIO = 4 #number of starting jewels is size / JEWEL_RATIO
def as_json(options={})
super(options).merge({
objects: game_objects.collect {|object| object.as_json}
})
end
def players
filter_objects('player')
end
def join
inactive_players = players.select {|p| !p.alive}
return false if inactive_players.length == 0
new_player = inactive_players.first
new_player.update_attribute(:alive, true)
return new_player.id
end
private
def filter_objects(kind)
game_objects.select {|o| o.kind == kind }
end
def overwrite_num_players
self.num_players = 2
end
def generate_players
num_players.times do |x|
player_postion = PLAYER_STARTING_POSITION[x]
alive = (x == 0)
player= game_objects.create(kind: "player", x: player_postion[:x], y: player_postion[:y], alive: alive)
end
end
def random_number(upper_lim)
rand(1..upper_lim)
end
def number_of_jewels
size / JEWEL_RATIO
end
def generate_jewels
number_of_jewels.times do
self.game_objects.create(kind: "jewel", x: random_number(11), y: random_number(11), points: random_number(100) )
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment