-
Notifications
You must be signed in to change notification settings - Fork 0
/
mastermind.rb
72 lines (60 loc) · 1.6 KB
/
mastermind.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# define variables
secret_code = []
guess = []
guess_count = 0
max_guesses = 12
colors = ['red', 'green', 'blue', 'yellow', 'orange', 'purple']
# generate secret code
4.times do
secret_code << colors.sample
end
# define helper methods
def get_guess
print "Enter your guess (e.g. red green blue yellow): "
gets.chomp.split(' ')
end
def compare_codes(secret_code, guess)
exact_matches = 0
color_matches = 0
secret_code_copy = secret_code.dup
guess_copy = guess.dup
# count exact matches
guess_copy.each_with_index do |color, index|
if color == secret_code_copy[index]
exact_matches += 1
guess_copy.delete_at(index)
secret_code_copy.delete_at(index)
end
end
# count color matches
guess_copy.each do |color|
if secret_code_copy.include?(color)
color_matches += 1
secret_code_copy.delete_at(secret_code_copy.index(color))
end
end
return exact_matches, color_matches
end
# game loop
puts "Welcome to Mastermind!"
puts "The secret code contains 4 colors from: #{colors.join(', ')}"
while guess_count < max_guesses
guess = get_guess
if guess.size != 4
puts "Invalid guess. Please enter 4 colors."
next
end
# check if guess matches secret code
exact_matches, color_matches = compare_codes(secret_code, guess)
if exact_matches == 4
puts "You win!"
break
else
guess_count += 1
puts "You have #{max_guesses - guess_count} guesses left."
puts "Exact matches: #{exact_matches}. Color matches: #{color_matches}"
end
end
if guess_count == max_guesses
puts "Game over. The secret code was: #{secret_code.join(' ')}"
end