我正在写一个tic-tac-toe程序。现在,当有人连续三场比赛时,比赛就结束了。我想让用户知道X或O是否在游戏结束前赢了。有什么建议吗?
这是我的代码:
class Game
def initialize
@board=Array.new
@board[1]="1 __|"
@board[2]="__"
@board[3]="|__"
@board[4]="\n2 __|"
@board[5]="__"
@board[6]="|__"
@board[7]="\n3 |"
@board[8]=" "
@board[9]="| "
@turn="x"
@win_status = false
end
def turn
@turn
end
def show_board
puts " 1 2 3"
@board.each do |i|
print i
end
puts ""
end
def set_turn #switches turns
if @turn == "x"
@turn = "o"
else @turn == "o"
@turn = "x"
end
end
def make_move
puts "Enter x coordinate"
x=gets.to_i
puts "Enter y coordinate"
y=gets.to_i
@board[1]="1 _"+@turn+"|" if y==1 && x==1
@board[2]="_"+@turn if y==2 && x==1
@board[3]="|_"+@turn if y==3 && x==1
@board[4]="\n2 _"+@turn+"|" if y==1 && x==2
@board[5]="_"+@turn if y==2 && x==2
@board[6]="|_"+@turn if y==3 && x==2
@board[7]="\n3 "+@turn+"|" if y==1 && x==3
@board[8]=" "+@turn if y==2 && x==3
@board[9]="|"+@turn+" \n" if y==3 && x==3
end
def win_combo
return [[@board[1][1] + @board[2][1] + @board[3][2]], [@board[4][2] + @board[5][1] + @board[6][2]], [@board[7][1] + @board[8][1] + @board[9][1]],[@board[1][1] + @board[4][2] + @board[7][1]], [@board[2][1] + @board[5][1] + @board[8][1]], [@board[3][2] + @board[6][2] + @board[9][1]], [@board[1][1] + @board[5][1] + @board[9][1]], [@board[3][2] + @board[5][1] + @board[7][1]]]
end
def check_win
#if some row or column or diagonal is "xxx" or "ooo" then set @win_status = true
self.win_combo.each do |arr|
str = arr.join
if str == "xxx" or str == "ooo"
return true
end
end
return false
end
end
g = Game.new
while g.check_win != true
g.show_board
g.set_turn
g.make_move
end
答案 0 :(得分:0)
你可以做很多事情。一种方法可能是更改check_win方法以返回字符串。例如,它可以返回“X”,“O”或“无”。然后使用
while g.check_win.eql?("none")
...
end
puts g.check_win + " WINS!"
答案 1 :(得分:0)
我建议您创建一个Board
类,该类知道如何根据转弯绘制自己。这将从Game
中删除大量代码,并使其更容易理解。
要回答您的问题,请使用此处的代码:
if str == "xxx" or str == "ooo"
return true
end
不区分X获胜或O获胜。在这里,您可以修改代码以单独检查X win和O win,并显示相应的消息。