Class: Towers

Inherits:
Object
  • Object
show all
Defined in:
lib/Towers_Class.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTowers

Constructor.



6
7
8
# File 'lib/Towers_Class.rb', line 6

def initialize
  @difficulty_settings = {easy: 3, medium: 5, hard: 7}
end

Instance Attribute Details

#difficultyObject

Getters and setters.



3
4
5
# File 'lib/Towers_Class.rb', line 3

def difficulty
  @difficulty
end

#disc_numObject

Getters and setters.



3
4
5
# File 'lib/Towers_Class.rb', line 3

def disc_num
  @disc_num
end

#playerObject

Getters and setters.



3
4
5
# File 'lib/Towers_Class.rb', line 3

def player
  @player
end

#towersObject

Getters and setters.



3
4
5
# File 'lib/Towers_Class.rb', line 3

def towers
  @towers
end

#winObject

Getters and setters.



3
4
5
# File 'lib/Towers_Class.rb', line 3

def win
  @win
end

Instance Method Details

#build_towersObject

Creating the ‘tower’ arrays based on the selected difficulty.



19
20
21
22
23
24
25
# 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_sizesObject

Get disc sizes.



28
29
30
31
32
33
34
35
36
37
38
# 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) ⇒ Object

Get space count per level.



41
42
43
44
45
46
47
48
49
50
51
# 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) ⇒ Object

Make discs using disc sizes.



54
55
56
57
58
59
60
61
62
63
64
# 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_spacesObject

Make spaces using space count.



67
68
69
70
71
72
73
74
75
76
77
# 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) ⇒ Object



79
80
81
82
83
84
85
86
87
# 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) ⇒ Object

Moving a disc from a tower.



104
105
106
# File 'lib/Towers_Class.rb', line 104

def move_disc(source,destination)
  @towers[destination] << @towers[source].pop
end

#quit?(input) ⇒ Boolean

Checking if the player is attempting to quit the game.

Returns:

  • (Boolean)


114
115
116
# File 'lib/Towers_Class.rb', line 114

def quit?(input)
  abort if !!(/quit/i.match(input))
end

#renderObject

Display status of the ‘tower’ arrays.



90
91
92
93
94
95
96
97
98
99
100
101
# 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) ⇒ Object



14
15
16
# File 'lib/Towers_Class.rb', line 14

def set_difficulty(difficulty)
  @difficulty = difficulty
end

#set_player_name(player_name) ⇒ Object



10
11
12
# File 'lib/Towers_Class.rb', line 10

def set_player_name(player_name)
  @player = player_name
end

#win?Boolean

Checking if the player has won or lost.

Returns:

  • (Boolean)


109
110
111
# File 'lib/Towers_Class.rb', line 109

def win?
  @towers[:third].length == @disc_num
end