Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'pry'
- class Game
- attr_accessor :players, :mark
- @@win_possitions = [
- [0, 1, 2],
- [3, 4, 5],
- [6, 7, 8],
- [0, 3, 6],
- [1, 4, 7],
- [2, 5, 8],
- [0, 4, 8],
- [6, 4, 2]
- ]
- def self.board=(board)
- @@board = board
- end
- def self.board
- @@board
- end
- def initialize
- @players = []
- @@board = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
- end
- def display_field
- puts "#{@@board[0]} | #{@@board[1]} | #{@@board[2]}"
- puts '---------'
- puts "#{@@board[3]} | #{@@board[4]} | #{@@board[5]}"
- puts '---------'
- puts "#{@@board[6]} | #{@@board[7]} | #{@@board[8]}"
- puts
- end
- def clear
- system('clear')
- end
- def check_first_turn
- puts 'Чем будете играть? 1 - Х, 2 - О'
- input = $stdin.gets.chomp.to_i
- if input == 1
- @players << Bot.new('O')
- @players << Human.new('X')
- else
- @players << Human.new('O')
- @players << Bot.new('X')
- end
- end
- def position_taken?(input)
- @@board[input] == "X" || @@board[input] == "O"
- end
- def won?
- @@win_possitions.detect do |combo|
- @@board[combo[0]] == @@board[combo[1]] && @@board[combo[1]] == @@board[combo[2]] && position_taken?(combo[0])
- end
- end
- def winner
- won = nil
- if winner = won?
- won = @@board[winner.first]
- end
- end
- def start
- check_first_turn
- loop do
- @players.each do |player|
- player.turn
- clear
- display_field
- if won?
- winner = winner()
- puts "Победил игрок: #{winner}"
- exit
- end
- if !@@board.include?(' ')
- puts 'Ничья'
- exit
- end
- end
- end
- end
- end
- class Players
- attr_accessor :mark
- def check_cell?(cell)
- cell >= 1 && cell <= 9 && Game.board[cell - 1] == ' '
- end
- end
- class Human < Players
- def initialize(mark)
- @mark = mark
- end
- def turn
- puts
- puts 'введите ячейку 1-9'
- cell = $stdin.gets.chomp.to_i
- if check_cell?(cell) # проверка на ввод в диапозоне от 1-9 и что не пустое значение
- Game.board[cell - 1] = mark
- else
- puts 'Выберите свободную ячейку'
- turn
- end
- end
- end
- class Bot < Players
- def initialize(mark)
- @mark = mark
- end
- def turn
- cell = rand(1..9)
- if check_cell?(cell)
- Game.board[cell-1] = mark
- else
- turn
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment