class TicTacToe
Public Class Methods
new()
click to toggle source
# File lib/gamelib/ttt/ttt.rb, line 2 def initialize system('clear') @@row = @@col = 3 @@p_turn = '1' # which player's turn is it @@players = {'1': {name: nil, mark: 'O'}, '2': {name: nil, mark: 'X'}} @board = [ ['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'] ] # 3x3 board @playing = true set_players_name end
Public Instance Methods
display_board()
click to toggle source
# File lib/gamelib/ttt/ttt.rb, line 35 def display_board puts "====================================" puts "%10s vs. %-10s" % [@@players[:'1'][:name], @@players[:'2'][:name]] puts "====================================" puts "\t %s | %s | %s" % [color(@board[0][0]), color(@board[0][1]), color(@board[0][2])] puts "\t___________" puts "\t %s | %s | %s" % [color(@board[1][0]), color(@board[1][1]), color(@board[1][2])] puts "\t___________" puts "\t %s | %s | %s" % [color(@board[2][0]), color(@board[2][1]), color(@board[2][2])] puts end
play()
click to toggle source
# File lib/gamelib/ttt/ttt.rb, line 20 def play for i in 0...9 do display_board turn return if !@playing if i==8 system('clear') display_board puts "%15s" % "Draw!" break end system('clear') end end
set_players_name()
click to toggle source
# File lib/gamelib/ttt/ttt.rb, line 12 def set_players_name puts "Enter player1's name: " @@players[:'1'][:'name'] = gets.chomp puts "Enter player2's name: " @@players[:'2'][:'name'] = gets.chomp system('clear'); end
turn()
click to toggle source
# File lib/gamelib/ttt/ttt.rb, line 47 def turn print "#{@@players[@@p_turn.to_sym][:name]}'s turn: " cell = gets.to_i - 1 while cell < 0 or cell > 8 do print "#{@@players[@@p_turn.to_sym][:name]}'s turn: " cell = gets.to_i - 1 end row = cell / @@row col = cell % @@col while @board[row][col] == 'O' or @board[row][col] == 'X' print "#{@@players[@@p_turn.to_sym][:name]}'s turn: " cell = gets.to_i - 1 row = cell / @@row col = cell % @@col end @board[row][col] = @@players[@@p_turn.to_sym][:mark] validate @@p_turn = @@p_turn == '1' ? '2' : '1' end
validate()
click to toggle source
# File lib/gamelib/ttt/ttt.rb, line 72 def validate # horiznotal and vertical check 0.upto(2) do |i| if (@board[i][0] == @board[i][1] and @board[i][1] == @board[i][2]) or (@board[0][i] == @board[1][i] and @board[1][i] == @board[2][i]) system('clear') display_board puts "%15s" % "#{@@players[@@p_turn.to_sym][:name]} won" @playing = false; end end # diagonal if (@board[0][0] == @board[1][1] and @board[1][1] == @board[2][2]) or (@board[0][2] == @board[1][1] and @board[1][1] == @board[2][0]) system('clear') display_board puts "%15s" % "#{@@players[@@p_turn.to_sym][:name]} won" @playing = false; end # draw end