Skip to content

Instantly share code, notes, and snippets.

@Sephi-Chan
Created February 1, 2012 14:55
Show Gist options
  • Save Sephi-Chan/1717404 to your computer and use it in GitHub Desktop.
Save Sephi-Chan/1717404 to your computer and use it in GitHub Desktop.
DCI experimentation
class AttacksController
def create
attacker = current_users.characters.find(params[:attacker_id])
target = Character.find_by_x_and_y(params[:x], params[:y])
attack = CharacterAttacksAnotherCharacter.new(attacker, target)
attack.execute!
end
end
class CharacterAttacksAnotherCharacter
attr_reader :attacker, :target
def initialize(attacker, target)
@attacker = attacker.extend(Attacker)
@target = target.extend(Target)
end
def execute!
attacker.attack(target)
self
end
end
module Attacker
def attack(target)
damages = self.weapon.roll_damages_dice
target.receive_damages(damages, self, weapon)
end
def reward_for_kill(target)
self.experience += target.level * 10
end
end
module Target
def receive_damages(damages, attacker, weapon)
remaining_damages = self.armor.block_damages(damages, weapon)
self.health -= remaining_damages
self.die_from_attacker(attacker) if self.health < 1
end
def die_from_attacker(attacker)
attacker.reward_for_kill(self)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment