-
Notifications
You must be signed in to change notification settings - Fork 838
Guardia's Beginner Code
Guardia edited this page May 29, 2011
·
2 revisions
class Player
def initialize
@max_health = 20
@low_health = 13
@critical_health = 7
@bestiary_of_the_ranged = {
"Captive"=>false,
"Sludge"=>false,
"Thick Sludge"=>false,
"Archer"=>true,
"Wizard"=>true
}
@previous_health = @max_health
@enemy_ahead = false
@ranged_enemy = false
@backtrack = false
end
def play_turn(warrior)
start_of_turn_checks(warrior)
action(warrior)
end_of_turn_checks(warrior)
end
def start_of_turn_checks(warrior)
@took_damage = warrior.health < @previous_health
@injured = warrior.health < @low_health
@dieing = warrior.health < @critical_health
@enemy_ahead = false
@ranged_enemy = false
@backtrack = false
end
def end_of_turn_checks(warrior)
@previous_health = warrior.health
end
def survey_area(warrior)
surroundings = warrior.look
surroundings.each do |creature|
if not creature.empty? and not creature.wall?
puts "I see a #{creature} ahead!"
@ranged_enemy = @bestiary_of_the_ranged[creature.to_s()]
@enemy_ahead = creature.enemy?
return
end
end
surroundings = warrior.look(:backward)
surroundings.each do |creature|
if not creature.empty? and not creature.wall?
puts "I see a #{creature} behind me!"
@ranged_enemy = @bestiary_of_the_ranged[creature.to_s()]
@enemy_ahead = creature.enemy?
@backtrack = true
return
end
end
end
def action(warrior)
if warrior.feel.wall?
warrior.pivot!
elsif warrior.feel.captive?
warrior.rescue!
elsif warrior.feel.empty?
survey_area(warrior)
if @ranged_enemy
warrior.shoot!
elsif @injured and not @took_damage and (@enemy_ahead or @dieing)
warrior.rest!
elsif @backtrack
warrior.pivot!
else
warrior.walk!
end
else
warrior.attack!
end
end
end