Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Square
- attr_accessor :state, :number
- def initialize(state, number)
- @state = state
- @number = number
- end
- end
- class Board
- attr_accessor :squares, :player, :won
- @@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]]
- def initialize(player)
- @squares = []
- @player = player
- if @player == "X"
- @computer = "O"
- else
- @computer = "X"
- end
- @won = false
- @turn = "player"
- end
- def create_squares
- (1..9).each do |n|
- @squares << Square.new(n, n)
- end
- @squares
- end
- def display_board
- puts "-------------"
- puts "| #{squares[0].state} | #{squares[1].state} | #{squares[2].state} |"
- puts "—————————————"
- puts "| #{squares[3].state} | #{squares[4].state} | #{squares[5].state} |"
- puts "—————————————"
- puts "| #{squares[6].state} | #{squares[7].state} | #{squares[8].state} |"
- puts "-------------"
- end
- def player_turn
- print "Type the number of the square you want to play on: "
- s = gets.chomp.to_i
- if (1..9).include? s
- if (1..9).include? @squares[s - 1].state
- squares[s - 1].state = @player
- else
- puts "You can't play on a square already played on!"
- player_turn
- end
- else
- puts "Type a number 1 to 9."
- player_turn
- end
- end
- def computer_turn
- s = (rand * 9).ceil
- if (1..9).include? @squares[s - 1].state
- squares[s - 1].state = @computer
- puts "The computer played on #{s}."
- else
- computer_turn
- end
- end
- def win(someone)
- @won = true
- puts "#{someone} wins!"
- end
- def check_for_win
- @@wins.each do |win|
- test = []
- win.each do |s|
- if (1..9).include? squares[s - 1].state
- test << false
- elsif squares[s - 1].state == "X"
- test << true
- else
- test << false
- end
- end
- if test[0] && test[1] && test[2]
- win("X")
- return nil
- end
- end
- @@wins.each do |win|
- test = []
- win.each do |s|
- if (1..9).include? squares[s - 1].state
- test << false
- elsif squares[s - 1].state == "O"
- test << true
- else
- test << false
- end
- end
- if test[0] && test[1] && test[2]
- win("O")
- return nil
- end
- end
- test = []
- @squares.each do |s|
- if (1..9).include? s.state
- test << false
- else
- test << true
- end
- end
- if test[0] && test[1] && test[2] && test[3] && test[4] && test[5]&& test[6] && test[7] && test[8]
- win("Nobody")
- end
- end
- def Board.init
- print "Would you like to be X or O? "
- player = gets.chomp.upcase
- if (player == "X") || (player == "O")
- b = Board.new(player)
- return b
- else
- puts "Please type X or O."
- init
- end
- end
- def play
- b = Board.init
- b.create_squares
- b.display_board
- loop do
- if @turn == "player"
- print "Your turn! "
- b.player_turn
- b.display_board
- b.check_for_win
- @turn = "computer"
- else
- sleep 1.2
- b.computer_turn
- b.display_board
- b.check_for_win
- @turn = "player"
- end
- return if @won
- break if @won
- end
- end
- end
- start = Board.new("X")
- start.play
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement