Class: Roebe::TicTacToe
- Inherits:
-
Base
show all
- Defined in:
- lib/roebe/classes/tic_tac_toe.rb
Overview
Constant Summary
Constants inherited
from Base
Base::COLOURS, Base::HOME_DIRECTORY_OF_USER_X, Base::N, Base::NAMESPACE
Class Method Summary
collapse
-
.[](i = '') ⇒ Object
# === Roebe::TicTacToe[] ========================================================================= #.
Instance Method Summary
collapse
Methods inherited from Base
#actions, #append_this_onto_that_file, #append_what_into, #be_silent, #be_verbose?, #beautiful_url, #burlywood, #call_next, #chdir, #cheerful_guy, #cliner, #complex_esystem, #convert_global_env, #copy_directory, #copy_file, #cornflowerblue, #create_directory, #crimson, #current_month?, #current_time?, #current_year?, #cyan, #darkcyan, #darkgreen, #darkkhaki, #darkslateblue, #deeppink, #delete_symlink, #do_not_use_the_base_colours, #do_use_the_base_colours, #e, #ecomment, #editor_to_use?, #efancy, #eimp, #emphasis, #ensure_main_encoding, #ensure_utf_encoding, #eparse, #erev, #esteelblue, #etomato, #ewarn, #exit_program, #firebrick, #get_current_day, #get_current_month, #get_files_and_directories, #get_files_from, #get_german_name_for_this_weekday, #gold, #green, #grey, #hh_mm_ss, #hh_mm_ss_day_month_year, #home_dir?, #home_directory_of_user_x?, #infer_the_namespace, #internal_hash?, #is_a_directory?, #is_a_file?, #is_a_jpg_file?, #is_an_image_file?, #is_archive?, #is_audio_file?, #is_in_studium_dir?, #is_multimedia_file?, #is_on_roebe?, #is_on_windows?, #is_studium_available?, #is_symlink?, #is_this_a_ruby_file?, #is_video_file?, #iso_encoding?, #le, #left_colour, #lightblue, #lightgreen, #lightseagreen, #lightsteelblue, #lime, #limegreen, #localhost_to_data, #log_directory?, #main_encoding?, #mediumorchid, #mediumpurple, #mediumseagreen, #mediumslateblue, #mediumspringgreen, #mediumturquoise, #mkdir_p, #mv, #n_days_in_this_month, #n_pages_in_this_pdf_file?, #namespace?, #no_file_exists_at, #ogrey, #olive, #olivedrab, #open_in_browser, #opne, #opnesystem, #opnn, #orange, #orchid, #orev, #palegoldenrod, #palevioletred, #pink, #powderblue, #programs_dir?, #project_base_dir?, #random_html_colour, #rds, #read_file_in_iso_encoding, #read_file_via_the_default_encoding, #read_lines_via_iso_encoding, #readlines_with_main_encoding, #red, #register_sigint, #remove, #remove_directory, #remove_file, #rename_kde_konsole_tab, #replace_localhost_with_data, #report_pwd, #require_rescue, #reset_the_internal_hash, #return_all_directories_from_this_directory, #return_all_files_from_this_directory, #return_current_directory, #return_dd_mm_yyyy, #return_file_or_directory_of, #return_files_from_pwd, #return_last_part_of_the_current_directory, #return_utc, #rev, #right_arrow?, #right_colour, #roebe_log_directory?, #rosybrown, #royalblue, #ruby_base_directory?, #run_in_background, #run_rcfiles_then_run_ata_via_qdbus, #sandybrown, #sdir, #seagreen, #set_be_verbose, #set_xorg_buffer, #sfancy, #sfile, #show_help, #silent_redirection?, #simp, #simple_esystem, #skyblue, #slateblue, #slategray, #springgreen, #steelblue, #string_italic, #swarn, #symlink, #teal, #temp_dir?, #to_camelcase, #to_counted_hash, #tomato, #touch, #try_to_require_the_beautiful_url_gem, #try_to_require_the_html_template, #try_to_require_the_open_gem, #try_to_require_the_program_information_gem, #try_to_require_the_xorg_buffer, #use_colours?, #verbose_truth, #weekday?, #word_wrap, #write_what_into, #yellow
#append_onto_the_commandline_arguments, #clear_commandline_arguments, #commandline_arguments?, #commandline_arguments_as_string?, #commandline_arguments_without_leading_hyphens?, #first_argument?, #first_argument_without_leading_hyphens?, #has_an_argument_been_passed?, #remove_hyphened_arguments_from_the_commandline_arguments, #return_commandline_arguments_with_leading_hyphens, #second_argument?, #set_commandline_arguments
Constructor Details
#initialize(i = nil, run_already = true) ⇒ TicTacToe
25
26
27
28
29
30
31
32
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 25
def initialize(
i = nil,
run_already = true
)
reset
set_commandline_arguments(i)
run if run_already
end
|
Class Method Details
.[](i = '') ⇒ Object
318
319
320
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 318
def self.[](i = '')
new(i)
end
|
Instance Method Details
#already_occupied?(i) ⇒ Boolean
103
104
105
106
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 103
def already_occupied?(i)
(i == 'o') or (i == 'x') end
|
#determine_whether_the_game_is_over ⇒ Object
#
determine_whether_the_game_is_over
#
224
225
226
227
228
229
230
231
232
233
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 224
def determine_whether_the_game_is_over
_ = query_win_condition
if @game_over
if _.nil?
e 'Unentschieden - kein Spieler hat diese Partie gewonnen.'
else
e "#{_} hat das Spiel gewonnen!"
end
end
end
|
#display_game_field ⇒ Object
298
299
300
301
302
303
304
305
306
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 298
def display_game_field
e
horizontal_line
@playing_field.each {|line|
e ' | '+line.join(' ')+' |'
}
horizontal_line
e
end
|
#horizontal_line ⇒ Object
311
312
313
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 311
def horizontal_line
e ' .-------.'
end
|
#msg_already_occupied_place ⇒ Object
#
msg_already_occupied_place
#
111
112
113
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 111
def msg_already_occupied_place
e 'Diese Stelle ist bereits besetzt. Bitte verwende eine andere Stelle.'
end
|
189
190
191
192
193
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 189
def obtain_user_input
_ = $stdin.gets.chomp
_ = '9' if _ == '0' @user_input = _.to_i
end
|
#query_win_condition ⇒ Object
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 238
def query_win_condition
who_won = nil
_ = @playing_field
if (_[0][0]+_[0][1]+_[0][2] == 'xxx')
who_won = :player1
elsif (_[0][0]+_[0][1]+_[0][2] == 'ooo')
who_won = :player2
elsif (_[1][0]+_[1][1]+_[1][2] == 'xxx')
who_won = :player1
elsif (_[1][0]+_[1][1]+_[1][2] == 'ooo')
who_won = :player2
elsif (_[2][0]+_[2][1]+_[2][2] == 'xxx')
who_won = :player1
elsif (_[2][0]+_[2][1]+_[2][2] == 'ooo')
who_won = :player2
elsif (_[0][0]+_[1][0]+_[2][0] == 'xxx')
who_won = :player1
elsif (_[0][0]+_[1][0]+_[2][0] == 'ooo')
who_won = :player2
elsif (_[0][1]+_[1][1]+_[2][1] == 'xxx')
who_won = :player1
elsif (_[0][1]+_[1][1]+_[2][1] == 'ooo')
who_won = :player2
elsif (_[0][2]+_[1][2]+_[2][2] == 'xxx')
who_won = :player1
elsif (_[0][2]+_[1][2]+_[2][2] == 'ooo')
who_won = :player2
elsif (_[0][0]+_[1][1]+_[2][2] == 'xxx')
who_won = :player1
elsif (_[0][0]+_[1][1]+_[2][2] == 'ooo')
who_won = :player2
elsif (_[2][0]+_[1][1]+_[0][2] == 'xxx')
who_won = :player1
elsif (_[2][0]+_[1][1]+_[0][2] == 'ooo')
who_won = :player2
end
case who_won
when :player1,
:player2
@game_over = true
else unless @playing_field.flatten.include? ' '
@game_over = true
end
end
return who_won
end
|
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 37
def reset
super()
infer_the_namespace
@game_over = false
@playing_field = [
[' ',' ',' '],
[' ',' ',' '],
[' ',' ',' ']
]
@active_player = :player1
end
|
#return_active_player ⇒ Object
96
97
98
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 96
def return_active_player
@active_player
end
|
#return_token_for_the_currently_active_player ⇒ Object
Also known as:
insert_which_token?, zeichen?, use_which_token?, token?
#
return_token_for_the_currently_active_player
#
68
69
70
71
72
73
74
75
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 68
def return_token_for_the_currently_active_player
case @active_player
when :player1
'x'
when :player2
'o'
end
end
|
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 198
def run
@user_input = nil
loop {
e rev+
'Bitte setze das '+
steelblue(return_token_for_the_currently_active_player)+
' durch Eingabe einer Nummer von 1-9:'
obtain_user_input
case @user_input
when 1,2,3,4,5,6,7,8,9
try_to_modify_this_field(
@user_input, return_token_for_the_currently_active_player
)
@active_player = return_active_player
display_game_field
determine_whether_the_game_is_over
break if @game_over
else
e @user_input.to_s+' ist nicht erlaubt.'
end
}
end
|
#set_active_player(i) ⇒ Object
61
62
63
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 61
def set_active_player(i)
@active_player = i
end
|
#toggle_active_player ⇒ Object
83
84
85
86
87
88
89
90
91
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 83
def toggle_active_player
if @active_player == :player1
set_active_player(:player2)
elsif @active_player == :player2
set_active_player(:player1)
else
e 'Not registered event.'
end
end
|
#try_to_modify_this_field(position, use_this_token) ⇒ Object
#
try_to_modify_this_field
#
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
# File 'lib/roebe/classes/tic_tac_toe.rb', line 118
def try_to_modify_this_field(position, use_this_token)
case position
when 1
if already_occupied?(@playing_field[0][0])
msg_already_occupied_place
else
@playing_field[0][0] = use_this_token
toggle_active_player
end
when 2
if already_occupied?(@playing_field[0][1])
msg_already_occupied_place
else
@playing_field[0][1] = use_this_token
toggle_active_player
end
when 3
if already_occupied?(@playing_field[0][2])
msg_already_occupied_place
else
@playing_field[0][2] = use_this_token
toggle_active_player
end
when 4
if already_occupied?(@playing_field[1][0])
msg_already_occupied_place
else
@playing_field[1][0] = use_this_token
toggle_active_player
end
when 5
if already_occupied?(@playing_field[1][1])
msg_already_occupied_place
else
@playing_field[1][1] = use_this_token
toggle_active_player
end
when 6
if already_occupied?(@playing_field[1][2])
msg_already_occupied_place
else
@playing_field[1][2] = use_this_token
toggle_active_player
end
when 7
if already_occupied?(@playing_field[2][0])
msg_already_occupied_place
else
@playing_field[2][0] = use_this_token
toggle_active_player
end
when 8
if already_occupied?(@playing_field[2][1])
msg_already_occupied_place
else
@playing_field[2][1] = use_this_token
toggle_active_player
end
when 9
if already_occupied?(@playing_field[2][2])
msg_already_occupied_place
else
@playing_field[2][2] = use_this_token
toggle_active_player
end
end
end
|