/
tic_tac_toe.rb
76 lines (64 loc) · 1.29 KB
/
tic_tac_toe.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
class Player
attr_reader :name
attr_accessor :owns, :board
@@board = {}
@@owned = []
(1..9).to_a.each { |val| @@board[val.to_s.to_sym] = val}
def initialize(name)
@name = name
@owns = []
end
def Player.board
@@board
end
def turn
pick = 0
while pick ==0
puts "\n#{self.name} : where do you play"
pick = gets.chomp
if (1..9).include?(pick.to_i) && !(@@owned.include?(pick.to_i))
self.owns << pick.to_i
@@owned << pick.to_i
@@board[pick.to_sym] = self.name
else
pick = 0
end
end
end
def win?
w = 0
win_cond = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]]
(0...8).each { |a| w = 1 if (win_cond[a] & self.owns).length == 3 }
return w == 1 ? true : false
end
end
def display(game)
game.each_with_index do |(x,y),i|
print y
print "\n" if (i+1) % 3 == 0
end
end
a = 0
begin
puts "X or O?"
a = gets.chomp.upcase
end until a == "X" || a == "O"
b = (a == "X" ? "O" : "X")
player1 = Player.new(a)
player2 = Player.new(b)
players = [player1, player2]
puts "Player 1 : #{player1.name}"
puts "Player 2 : #{player2.name}"
move = 0
while move < 9
display(Player.board)
a = move % 2
players[a].turn
if players[a].win?
puts "#{players[a].name} wins!"
move = 100
else
move += 1
end
end
display(Player.board)