Advertisement
Guest User

Ruby code

a guest
Jan 25th, 2015
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 3.42 KB | None | 0 0
  1. class Square
  2.   attr_accessor :state, :number
  3.   def initialize(state, number)
  4.     @state = state
  5.     @number = number
  6.   end
  7. end
  8. class Board
  9.   attr_accessor :squares, :player, :won
  10.   @@wins = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[7,5,3]]
  11.   def initialize(player)
  12.     @squares = []
  13.     @player = player
  14.     if @player == "X"
  15.       @computer = "O"
  16.     else
  17.       @computer = "X"
  18.     end
  19.     @won = false
  20.     @turn = "player"
  21.   end
  22.   def create_squares
  23.     (1..9).each do |n|
  24.       @squares << Square.new(n, n)
  25.     end
  26.     @squares
  27.   end
  28.   def display_board
  29.     puts "-------------"
  30.     puts "| #{squares[0].state} | #{squares[1].state} | #{squares[2].state} |"
  31.     puts "—————————————"
  32.     puts "| #{squares[3].state} | #{squares[4].state} | #{squares[5].state} |"
  33.     puts "—————————————"
  34.     puts "| #{squares[6].state} | #{squares[7].state} | #{squares[8].state} |"
  35.     puts "-------------"
  36.   end
  37.   def player_turn
  38.     print "Type the number of the square you want to play on: "
  39.     s = gets.chomp.to_i
  40.     if (1..9).include? s
  41.       if (1..9).include? @squares[s - 1].state
  42.         squares[s - 1].state = @player
  43.       else
  44.         puts "You can't play on a square already played on!"
  45.         player_turn
  46.       end
  47.     else
  48.       puts "Type a number 1 to 9."
  49.       player_turn
  50.     end
  51.   end
  52.   def computer_turn
  53.     s = (rand * 9).ceil
  54.     if (1..9).include? @squares[s - 1].state
  55.       squares[s - 1].state = @computer
  56.       puts "The computer played on #{s}."
  57.     else
  58.       computer_turn
  59.     end
  60.   end
  61.   def win(someone)
  62.     @won = true
  63.     puts "#{someone} wins!"
  64.   end
  65.   def check_for_win
  66.     @@wins.each do |win|
  67.       test = []
  68.       win.each do |s|
  69.         if (1..9).include? squares[s - 1].state
  70.           test << false
  71.         elsif squares[s - 1].state == "X"
  72.           test << true
  73.         else
  74.           test << false
  75.         end
  76.       end
  77.       if test[0] && test[1] && test[2]
  78.         win("X")
  79.         return nil
  80.       end
  81.     end
  82.     @@wins.each do |win|
  83.       test = []
  84.       win.each do |s|
  85.         if (1..9).include? squares[s - 1].state
  86.           test << false
  87.         elsif squares[s - 1].state == "O"
  88.           test << true
  89.         else
  90.           test << false
  91.         end
  92.       end
  93.       if test[0] && test[1] && test[2]
  94.         win("O")
  95.         return nil
  96.       end
  97.     end
  98.     test = []
  99.     @squares.each do |s|
  100.       if (1..9).include? s.state
  101.         test << false
  102.       else
  103.         test << true
  104.       end
  105.     end
  106.     if test[0] && test[1] && test[2] && test[3] && test[4] && test[5]&& test[6] && test[7] && test[8]
  107.       win("Nobody")
  108.     end
  109.   end
  110.   def Board.init
  111.     print "Would you like to be X or O? "
  112.     player = gets.chomp.upcase
  113.     if (player == "X") || (player == "O")
  114.       b = Board.new(player)
  115.       return b
  116.     else
  117.       puts "Please type X or O."
  118.       init
  119.     end
  120.   end
  121.   def play
  122.     b = Board.init
  123.     b.create_squares
  124.     b.display_board
  125.     loop do
  126.       if @turn == "player"
  127.         print "Your turn! "
  128.         b.player_turn
  129.         b.display_board
  130.         b.check_for_win
  131.         @turn = "computer"
  132.       else
  133.         sleep 1.2
  134.         b.computer_turn
  135.         b.display_board
  136.         b.check_for_win
  137.         @turn = "player"
  138.       end
  139.       return if @won
  140.       break if @won
  141.     end
  142.   end
  143. end
  144. start = Board.new("X")
  145. start.play
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement