Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.90 KB | None | 0 0
  1. class TicTacToe
  2.     def initialize()
  3.         @board = Array.new(9, " ")
  4.         @player1 = {"name":nil, "mark":"X"}
  5.         @player2 = {"name":nil, "mark":"O"}
  6.         @players_turn = @player1
  7.         @game_over = false
  8.         @winner = nil
  9.  
  10.         set_names
  11.         start_game
  12.         end_game
  13.     end
  14.    
  15.     def set_names
  16.         player1_set = false
  17.         until player1_set
  18.           print "Player 1 enter your name: "
  19.           input = gets.chomp
  20.           @player1[:name] = input; player1_set = true if check_name(input) 
  21.         end
  22.         player2_set = false
  23.         until player2_set
  24.           print "Player 2 enter your name: "
  25.           input = gets.chomp
  26.           @player2[:name] = input; player2_set = true if check_name(input) 
  27.         end
  28.     end
  29.  
  30.     def start_game
  31.         while !@game_over
  32.             next_turn
  33.         end
  34.     end
  35.  
  36.     def next_turn
  37.         board_set = nil
  38.         good_input = nil
  39.         until board_set
  40.             good_input = ask_for_mark()
  41.             if set_board(good_input) == true
  42.                 board_set = true
  43.             else
  44.                 puts "This place is already taken"
  45.                 board_set = false
  46.             end
  47.         end    
  48.         check_if_ended ? @game_over = true : @game_over = false
  49.         next_player
  50.     end
  51.  
  52.     def next_player
  53.         @players_turn == @player1 ? @players_turn = @player2 : @players_turn = @player1
  54.     end
  55.  
  56.     def set_board(position)
  57.         if @board[position - 1] == " "
  58.             @board[position - 1] = @players_turn[:mark]
  59.             return true
  60.         else
  61.             return false
  62.         end
  63.     end
  64.  
  65.     def ask_for_mark
  66.         ask_ok = nil
  67.         print_board
  68.         until ask_ok
  69.             print "#{@players_turn[:name]}, please enter where you want to put your #{@players_turn[:mark]}: "
  70.             input = gets.chomp
  71.             input == "exit" ? exit : input = input.to_i
  72.             if good_mark?(input)
  73.                 return input
  74.             else
  75.                 puts "Try again"
  76.                 ask_ok = false
  77.             end
  78.         end    
  79.     end
  80.  
  81.     def good_mark?(input)
  82.         input.to_i > 0 && input.to_i < 10 ? true : false       
  83.     end
  84.  
  85.     def print_board
  86.         print "
  87.             | #{@board[0]} | #{@board[1]} | #{@board[2]} |
  88.              ------------
  89.             | #{@board[3]} | #{@board[4]} | #{@board[5]} |
  90.              ------------
  91.             | #{@board[6]} | #{@board[7]} | #{@board[8]} |
  92.             \n"
  93.     end
  94.  
  95.     def check_name(input)
  96.         return input.length < 20 ? true : false
  97.     end
  98.  
  99.     def check_if_ended
  100.         if  @board[0..2].uniq.length == 1 && @board[0] != " " ||
  101.             @board[3..5].uniq.length == 1 && @board[3] != " " ||
  102.             @board[6..8].uniq.length == 1 && @board[6] != " " ||
  103.             @board[0] == @board[3] && @board[3] == @board[6] && @board[0] != " " ||
  104.             @board[1] == @board[4] && @board[4] == @board[7] && @board[1] != " " ||
  105.             @board[2] == @board[5] && @board[5] == @board[8] && @board[2] != " " ||
  106.             @board[0] == @board[4] && @board[4] == @board[8] && @board[0] != " " ||
  107.             @board[2] == @board[4] && @board[4] == @board[6] && @board[2] != " "
  108.  
  109.             @winner = @players_turn
  110.             return true
  111.         end
  112.         @board.include?(" ") == true ? (return false) : @winner = nil; return true
  113.     end
  114.  
  115.     def end_game
  116.         print_board
  117.         puts @winner == nil ? "There is no winner" : "The winner is #{@winner[:name]}"
  118.     end
  119.  
  120. end
  121.  
  122. new_game = TicTacToe.new()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement