class Towers

Attributes

difficulty[RW]

Getters and setters.

disc_num[RW]

Getters and setters.

player[RW]

Getters and setters.

towers[RW]

Getters and setters.

win[RW]

Getters and setters.

Public Class Methods

new() click to toggle source

Constructor.

# File lib/Towers_Class.rb, line 6
def initialize
  @difficulty_settings = {easy: 3, medium: 5, hard: 7}
end

Public Instance Methods

build_towers() click to toggle source

Creating the 'tower' arrays based on the selected difficulty.

# File lib/Towers_Class.rb, line 19
def build_towers
  puts "\nBuilding towers.."
  sleep 1.5
  @disc_num = @difficulty_settings[@difficulty]
  @towers = {first: (self.get_disc_sizes).sort{|num1,num2| num2 <=> num1},\
            second: [], third: []}
end
get_disc_sizes() click to toggle source

Get disc sizes.

# File lib/Towers_Class.rb, line 28
def get_disc_sizes
  @disc_sizes = []
  i = @disc_num-1
  j = 0
  while j < @disc_num
    @disc_sizes[j] = (i+1) + i
    i -= 1
    j += 1
  end
  @disc_sizes
end
get_space_count(tower) click to toggle source

Get space count per level.

# File lib/Towers_Class.rb, line 41
def get_space_count (tower)
  @space_count = []
  i = @towers[tower].length-1
  j = 0
  while j < @towers[tower].length
    @space_count[j] = i
    i -= 1
    j += 1
  end
  @space_count
end
make_discs(tower) click to toggle source

Make discs using disc sizes.

# File lib/Towers_Class.rb, line 54
def make_discs (tower)
  @discs = []
  @towers[tower].reverse_each do |size|
    disc = ''
    size.times do
      disc << '#'
    end
    @discs << disc
  end
  @discs
end
make_spaces() click to toggle source

Make spaces using space count.

# File lib/Towers_Class.rb, line 67
def make_spaces
  @spaces = []
  @space_count.each do |count|
    space = ''
    count.times do
      space << ' '
    end
    @spaces << space
  end
  @spaces
end
make_visuals(tower) click to toggle source
# File lib/Towers_Class.rb, line 79
def make_visuals (tower)
  visuals = []
  i = 0
  while i < @towers[tower].length
    visuals << "#{@spaces[i]}#{@discs[i]}"
    i += 1
  end
  visuals
end
move_disc(source,destination) click to toggle source

Moving a disc from a tower.

# File lib/Towers_Class.rb, line 104
def move_disc(source,destination)
  @towers[destination] << @towers[source].pop
end
quit?(input) click to toggle source

Checking if the player is attempting to quit the game.

# File lib/Towers_Class.rb, line 114
def quit?(input)
  abort if !!(/quit/i.match(input))
end
render() click to toggle source

Display status of the 'tower' arrays.

# File lib/Towers_Class.rb, line 90
def render
  output = []
  @towers.keys.each do |tower|
    self.get_space_count(tower)
    self.make_discs(tower)
    self.make_spaces
    output << "\n[#{tower.upcase}]:\n"
    output << make_visuals(tower)
    output << "\n"
  end
  puts output
end
set_difficulty(difficulty) click to toggle source
# File lib/Towers_Class.rb, line 14
def set_difficulty(difficulty)
  @difficulty = difficulty
end
set_player_name(player_name) click to toggle source
# File lib/Towers_Class.rb, line 10
def set_player_name(player_name)
  @player = player_name
end
win?() click to toggle source

Checking if the player has won or lost.

# File lib/Towers_Class.rb, line 109
def win?
  @towers[:third].length == @disc_num
end