Skip to content

Instantly share code, notes, and snippets.

@FiXato
Created March 24, 2014 19:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FiXato/9747666 to your computer and use it in GitHub Desktop.
Save FiXato/9747666 to your computer and use it in GitHub Desktop.
class Mage < Player
def initialize(*args)
super(*args)
@str, @int, @dex = 1, 6, 2
end
def level_up
@str += 1
@int += 6
@dex += 2
end
end
class Player
attr_reader :name, :str, :int, :dex, :skill_points, :level
def initialize(name)
@name = name
@level = 1
@str, @int, @dex = 3, 3, 3
end
def level_up
@str += 3
@int += 3
@dex += 3
end
def to_s
<<-EOS
#{name}, level #{level} #{self.class.name}
Strength: #{str}
Intelligence: #{int}
Dexterity: #{dex}
EOS
end
end
require_relative 'player'
require_relative 'mage'
require_relative 'thief'
require_relative 'warrior'
class Rpg
attr_reader :players
ALLOWED_CLASSES = ['warrior', 'mage', 'thief', 'custom']
def initialize()
@players = []
ask_number_of_players.times { add_player; puts }
end
def ask_player_name
begin
print 'Please name this player: '
name = gets.strip
end until name.to_s.size > 0
return name
end
def ask_number_of_players
begin
print 'How many players do you want to add? '
number_of_players = gets.strip.to_i
end until number_of_players > 0
return number_of_players
end
def ask_player_class_name
begin
print "What kind of class (#{ALLOWED_CLASSES.join(', ')}) will player ##{players.size + 1} have? "
player_class_name = gets.strip.downcase
end until ALLOWED_CLASSES.include?(player_class_name)
return player_class_name
end
def new_player
case ask_player_class_name
when 'warrior'
return Warrior.new(ask_player_name)
when 'mage'
return Mage.new(ask_player_name)
when 'thief'
return Thief.new(ask_player_name)
when 'custom'
return Player.new(ask_player_name)
end
end
def add_player
player = new_player
puts "#{player.class.name} #{player.name} has entered the game"
puts player
@players << player
end
def display_party_info
puts
puts "Party Info:"
puts '-'*80
puts "#{players.size} players in this game:"
puts '-'*80
players.each_with_index do |player, idx|
puts "Player ##{idx + 1}:"
puts player.to_s
puts '-'*80
end
end
end
game = Rpg.new
game.display_party_info
class Thief < Player
def initialize(*args)
super(*args)
@str, @int, @dex = 3, 1, 5
end
def level_up
@str += 3
@int += 1
@dex += 5
end
end
class Warrior < Player
def initialize(*args)
super(*args)
@str, @int, @dex = 7, 1, 1
end
def level_up
@str += 5
@int += 1
@dex += 3
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment