Class: StudioGame::Game

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(title) ⇒ Game

Returns a new instance of Game.



12
13
14
15
# File 'lib/game_class.rb', line 12

def initialize(title)
    @title = title
    @players = []
end

Instance Attribute Details

#titleObject (readonly)

Returns the value of attribute title.



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

def title
  @title
end

Instance Method Details

#add_player(a_player) ⇒ Object



48
49
50
# File 'lib/game_class.rb', line 48

def add_player(a_player)
    @players.push(a_player)   #use @players since @players refers to the array u created in the initialize method
end

#high_score_entry(player) ⇒ Object



33
34
35
36
# File 'lib/game_class.rb', line 33

def high_score_entry(player)
  formatted_name = player.name.ljust(20, '.')
  "#{formatted_name} #{player.score}"
end

#load_players(from_file) ⇒ Object

*** easier approach than the solution above using Ruby’s CSV library (MUST use require ‘csv’ at the top) ***



26
27
28
29
30
31
# File 'lib/game_class.rb', line 26

def load_players(from_file)
  CSV.foreach(from_file) do |row|
    player = Player.new(row[0], row[1].to_i)  # immediately sends row[0] and row[1] values to local variables name and health (line 8 of player_class.rb)
    add_player(player) # adds to the player array (stored in local variable @players)
  end
end

#play(rounds) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/game_class.rb', line 56

def play(rounds)
  puts "There are #{@players.size} players in the game '#{@title}': " 
  
  @players.each do |player|
    puts player
  end

  treasures = TreasureTrove::TREASURES
  puts "\nThere are #{treasures.size} treasures to be found:"

  treasures.each do |treasure|
    puts "A #{treasure.name} is worth #{treasure.points} points."
  end

  1.upto(rounds) do |round|
    puts "\nRound #{round}:"
    @players.each do |player|
      GameTurn.take_turn(player) 
      puts player
    end
  end 
end


79
80
81
# File 'lib/game_class.rb', line 79

def print_name_and_health(player)
  puts "#{player.name} (#{player.health})"
end


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/game_class.rb', line 83

def print_stats
    strong_players, wimpy_players = @players.partition { |player| player.strong? }
  
  puts "\n#{title} Statistics:"
  puts "\n#{strong_players.size} strong players:"
  strong_players.each do |player|
    print_name_and_health(player)
  end

  puts "\n#{wimpy_players.size} wimpy players:"
  wimpy_players.each do |player|
    print_name_and_health(player)
  end

  sorted_players = @players.sort{ |a, b| b.score <=> a.score}
  puts "\n#{title} High Scores:"
  sorted_players.each do |player|
    puts high_score_entry(player)
  end
  puts "\n(High scores have been saved to 'high_scores.txt')"

  @players.each do |player|
    puts "\n#{player.name}'s point totals:"
    puts "#{player.points} grand total points"
  end

  puts "\n#{total_points} total points from treasures found."

  @players.sort.each do |player|
    puts "\n#{player.name}'s point totals:"
    player.each_found_treasure do |treasure|
      puts "#{treasure.points} total #{treasure.name} points"
    end
    puts "#{player.points} grand total points"
  end

end

#save_high_scores(to_file = "high_scores.txt") ⇒ Object



38
39
40
41
42
43
44
45
46
# File 'lib/game_class.rb', line 38

def save_high_scores(to_file="high_scores.txt")
  File.open(to_file, "w") do |file|
    file.puts Time.new.strftime("File updated/created on %m/%d/%Y at %I:%M %p.") #me printing the time!
    file.puts "\n#{@title} High Scores:"
    @players.sort.each do |player|
      file.puts high_score_entry(player)
    end
  end
end

#total_pointsObject



52
53
54
# File 'lib/game_class.rb', line 52

def total_points
  @players.reduce(0) { |sum, player| sum + player.points }
end