connect_four_2301 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/connect_four_2301/board.rb +1 -1
- data/lib/connect_four_2301/game.rb +106 -7
- data/lib/connect_four_2301/messages.rb +2 -32
- data/lib/connect_four_2301/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7808b77c5bd080bae1a9e91714f39186c942cac807a97182d216106af8bbeff
|
4
|
+
data.tar.gz: 34b72faec9a286346b11c3511ba860bbc5de54e3190040d75f2eec3273a649dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36108ffdffd9db2fa5d4609eb55d1ec532769e42aa8084a53265553faac555098f4230ca8c40e04eef1d0d990da7060bddb9ec0f78e8fd90249a10d3d2c0f207
|
7
|
+
data.tar.gz: 312b50f4258ef500a9fd29638d3d44408003475754cb5f778e008159180498ebf9bb0534f2597b0d90e5ccf28104c3e84e30ec7f38a618d3493a817bb85725cf
|
@@ -12,6 +12,7 @@ class Board
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def initialize_board
|
15
|
+
@turns = []
|
15
16
|
@slots = [*(1..6)].map do |row|
|
16
17
|
[*(1..7)].map { |col| :white }
|
17
18
|
end
|
@@ -91,7 +92,6 @@ class Board
|
|
91
92
|
end
|
92
93
|
|
93
94
|
def update
|
94
|
-
initialize_board
|
95
95
|
@turns.each { |turn| @slots[turn.row][turn.col] = turn.color }
|
96
96
|
nil
|
97
97
|
end
|
@@ -14,6 +14,9 @@ class Game
|
|
14
14
|
Player.new('Player 2', :red, false)
|
15
15
|
]
|
16
16
|
@board = Board.new
|
17
|
+
@starting_time = 0
|
18
|
+
@ending_time = 0
|
19
|
+
@recorded_times = []
|
17
20
|
end
|
18
21
|
|
19
22
|
def start
|
@@ -22,7 +25,9 @@ class Game
|
|
22
25
|
end
|
23
26
|
|
24
27
|
def play_game
|
28
|
+
@board.initialize_board
|
25
29
|
@board.render
|
30
|
+
starting_time
|
26
31
|
until game_over?
|
27
32
|
@players.each do |player|
|
28
33
|
break if game_over?
|
@@ -35,12 +40,26 @@ class Game
|
|
35
40
|
end
|
36
41
|
@board.next_turn(player.name, player.color, player.is_human?)
|
37
42
|
@board.update
|
43
|
+
puts `clear`
|
38
44
|
@board.render
|
39
45
|
end
|
40
46
|
end
|
47
|
+
ending_time
|
41
48
|
game_over
|
42
49
|
end
|
43
50
|
|
51
|
+
def play_2_player_game
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
def starting_time
|
56
|
+
@starting_time += Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
57
|
+
end
|
58
|
+
|
59
|
+
def ending_time
|
60
|
+
@ending_time += Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
61
|
+
end
|
62
|
+
|
44
63
|
def game_over?
|
45
64
|
@board.winner || @board.valid_columns.empty?
|
46
65
|
end
|
@@ -52,19 +71,28 @@ class Game
|
|
52
71
|
end
|
53
72
|
|
54
73
|
def game_menu
|
55
|
-
puts
|
74
|
+
puts " Please enter '1' for a 1 person game against the computer, or press '2' for a two person game, or pres 'Q' to exit out of the program."
|
56
75
|
user_input = gets.chomp
|
57
|
-
until user_input == '
|
58
|
-
puts "Please enter one of the following:
|
76
|
+
until user_input == '1' || user_input == '2' || user_input == 'q'
|
77
|
+
puts " Please enter one of the following: 1, 2, or q"
|
59
78
|
user_input = gets.chomp
|
60
79
|
end
|
61
|
-
if user_input ==
|
62
|
-
puts " ...\n\n"
|
80
|
+
if user_input == '1'
|
81
|
+
puts " ...\n\n\n\n"
|
63
82
|
sleep(1)
|
64
|
-
puts "
|
83
|
+
puts " Ok. You will be the Blue block. Good luck!"
|
65
84
|
sleep(3)
|
66
85
|
play_game
|
67
|
-
elsif user_input ==
|
86
|
+
elsif user_input == '2'
|
87
|
+
puts " Player 1, please enter your name:"
|
88
|
+
player_1_name = gets.chomp.capitalize
|
89
|
+
puts " Player 2, please enter your name:"
|
90
|
+
player_2_name = gets.chomp.capitalize
|
91
|
+
player_1 = Player.new(player_1_name, :blue )
|
92
|
+
player_2 = Player.new(player_2_name, :red )
|
93
|
+
@players = [player_1, player_2]
|
94
|
+
play_game
|
95
|
+
else user_input == 'q'
|
68
96
|
Process.exit!
|
69
97
|
end
|
70
98
|
end
|
@@ -78,10 +106,81 @@ class Game
|
|
78
106
|
sleep(1)
|
79
107
|
if @board.valid_columns.empty?
|
80
108
|
puts DRAW_MESSAGE
|
109
|
+
sleep(1)
|
110
|
+
puts "\n\n\n\n\n"
|
111
|
+
puts elapsed_time
|
112
|
+
puts "\n\n\n\n\n"
|
113
|
+
play_again?
|
81
114
|
elsif @players.find { |player| player.color == @board.winner }.is_human?
|
82
115
|
puts HUMAN_WIN_MESSAGE
|
116
|
+
sleep(1)
|
117
|
+
puts "\n\n\n\n\n\n\n"
|
118
|
+
puts elapsed_time
|
119
|
+
puts "\n\n\n\n\n\n\n"
|
120
|
+
play_again?
|
83
121
|
else
|
84
122
|
puts COMPUTER_WIN_MESSAGE
|
123
|
+
sleep(1)
|
124
|
+
puts "\n\n\n\n\n\n\n"
|
125
|
+
puts elapsed_time
|
126
|
+
puts "\n\n\n\n\n\n\n"
|
127
|
+
play_again?
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def play_again?
|
132
|
+
puts "Thanks for playing!"
|
133
|
+
puts "\n\n\n\n"
|
134
|
+
puts "If you would like to play again, enter 'Y'. If you would like to exit the game, enter 'Q'. "
|
135
|
+
user_input = gets.chomp.capitalize
|
136
|
+
if user_input == 'Y'
|
137
|
+
play_game
|
138
|
+
elsif user_input == 'Q'
|
139
|
+
Process.exit!
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def elapsed_time
|
144
|
+
elapsed_time = @ending_time - @starting_time
|
145
|
+
if elapsed_time >= 60.00
|
146
|
+
time_in_minutes = elapsed_time.fdiv(60)
|
147
|
+
@recorded_times << time_in_minutes
|
148
|
+
puts "Wow, you finished the game in #{time_in_minutes.round(2)} minutes!"
|
149
|
+
puts "\n\n"
|
150
|
+
fastest_elapsed__time
|
151
|
+
puts "\n\n"
|
152
|
+
average_elapsed_time
|
153
|
+
elsif elapsed_time < 60.00
|
154
|
+
time_in_seconds = elapsed_time.round(2)
|
155
|
+
@recorded_times << time_in_seconds
|
156
|
+
puts "Wow that was fast! You finished the game in #{time_in_seconds} seconds!"
|
157
|
+
puts "\n\n"
|
158
|
+
fastest_elapsed__time
|
159
|
+
puts "\n\n"
|
160
|
+
average_elapsed_time
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def average_elapsed_time
|
165
|
+
sum_of_times = @recorded_times.sum
|
166
|
+
num_of_times = @recorded_times.length
|
167
|
+
long_average_time = sum_of_times.fdiv(num_of_times)
|
168
|
+
average_time = long_average_time.round(2)
|
169
|
+
if average_time >= 60.00
|
170
|
+
puts "On average it took you #{average_time} minutes to finish a game."
|
171
|
+
end
|
172
|
+
if average_time < 60.00
|
173
|
+
puts "On average it took you #{average_time} seconds to finish a game."
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
def fastest_elapsed__time
|
178
|
+
fastest_time = @recorded_times.sort.first.round(2)
|
179
|
+
if fastest_time >= 60.00
|
180
|
+
puts "So far, your fastest time to finish the game is #{fastest_time} minutes."
|
181
|
+
end
|
182
|
+
if fastest_time < 60.00
|
183
|
+
puts "So far, your fastest time to finish the game is #{fastest_time} seconds."
|
85
184
|
end
|
86
185
|
end
|
87
186
|
end
|
@@ -116,38 +116,8 @@ module Messages
|
|
116
116
|
╚═╝░░╚═╝ ╚═════╝░ ░╚════╝░ ╚═════╝░ ╚══════╝ ╚═╝░░░░░ ░╚═════╝░
|
117
117
|
COLUMN
|
118
118
|
|
119
|
-
|
120
|
-
|
121
|
-
███████╗███╗░░██╗████████╗███████╗██████╗░ ██╗██████╗░██╗ ████████╗░█████╗░ ██████╗░██╗░░░░░░█████╗░██╗░░░██╗
|
122
|
-
██╔════╝████╗░██║╚══██╔══╝██╔════╝██╔══██╗ ╚█║██╔══██╗╚█║ ╚══██╔══╝██╔══██╗ ██╔══██╗██║░░░░░██╔══██╗╚██╗░██╔╝
|
123
|
-
█████╗░░██╔██╗██║░░░██║░░░█████╗░░██████╔╝ ░╚╝██████╔╝░╚╝ ░░░██║░░░██║░░██║ ██████╔╝██║░░░░░███████║░╚████╔╝░
|
124
|
-
██╔══╝░░██║╚████║░░░██║░░░██╔══╝░░██╔══██╗ ░░░██╔═══╝░░░░ ░░░██║░░░██║░░██║ ██╔═══╝░██║░░░░░██╔══██║░░╚██╔╝░░
|
125
|
-
███████╗██║░╚███║░░░██║░░░███████╗██║░░██║ ░░░██║░░░░░░░░ ░░░██║░░░╚█████╔╝ ██║░░░░░███████╗██║░░██║░░░██║░░░
|
126
|
-
╚══════╝╚═╝░░╚══╝░░░╚═╝░░░╚══════╝╚═╝░░╚═╝ ░░░╚═╝░░░░░░░░ ░░░╚═╝░░░░╚════╝░ ╚═╝░░░░░╚══════╝╚═╝░░╚═╝░░░╚═╝░░░
|
127
|
-
|
128
|
-
░█████╗░██████╗░
|
129
|
-
██╔══██╗██╔══██╗
|
130
|
-
██║░░██║██████╔╝
|
131
|
-
██║░░██║██╔══██╗
|
132
|
-
╚█████╔╝██║░░██║
|
133
|
-
░╚════╝░╚═╝░░╚═╝
|
134
|
-
|
135
|
-
|
136
|
-
███████╗███╗░░██╗████████╗███████╗██████╗░ ██╗░██████╗░██╗ ████████╗░█████╗░
|
137
|
-
██╔════╝████╗░██║╚══██╔══╝██╔════╝██╔══██╗ ╚█║██╔═══██╗╚█║ ╚══██╔══╝██╔══██╗
|
138
|
-
█████╗░░██╔██╗██║░░░██║░░░█████╗░░██████╔╝ ░╚╝██║██╗██║░╚╝ ░░░██║░░░██║░░██║
|
139
|
-
██╔══╝░░██║╚████║░░░██║░░░██╔══╝░░██╔══██╗ ░░░╚██████╔╝░░░ ░░░██║░░░██║░░██║
|
140
|
-
███████╗██║░╚███║░░░██║░░░███████╗██║░░██║ ░░░░╚═██╔═╝░░░░ ░░░██║░░░╚█████╔╝
|
141
|
-
╚══════╝╚═╝░░╚══╝░░░╚═╝░░░╚══════╝╚═╝░░╚═╝ ░░░░░░╚═╝░░░░░░ ░░░╚═╝░░░░╚════╝░
|
142
|
-
|
143
|
-
░██████╗░██╗░░░██╗██╗████████╗
|
144
|
-
██╔═══██╗██║░░░██║██║╚══██╔══╝
|
145
|
-
██║██╗██║██║░░░██║██║░░░██║░░░
|
146
|
-
╚██████╔╝██║░░░██║██║░░░██║░░░
|
147
|
-
░╚═██╔═╝░╚██████╔╝██║░░░██║░░░
|
148
|
-
░░░╚═╝░░░░╚═════╝░╚═╝░░░╚═╝░░░
|
149
|
-
|
150
|
-
PLAY_PROMPT
|
119
|
+
|
120
|
+
|
151
121
|
|
152
122
|
BEEP_BOOP_BOP = <<-BEEP
|
153
123
|
█▄▄ █▀▀ █▀▀ █▀█ █▄▄ █▀█ █▀█ █▀█ █▄▄ █▀█ █▀█
|