tic tac toe 프로그램 상단에 숫자를 어떻게 추가하나요?
-
21-12-2019 - |
문제
나는 tic-tac-toe 프로그램을 작성했습니다.제가 만든 보드는 다음과 같습니다.
1 __|__|__
2 __|__|__
3 | |
제가 좌표를 설정한 방식은 첫 번째 상자가 (1,1), 두 번째 상자가 (1,2), 세 번째 상자가 (1,3), 네 번째 상자가 (2,1) 등이 되는 것입니다.사용자가 이를 명확히 알 수 있도록 측면에 1, 2, 3을 썼습니다.또한 보드 상단에 1, 2, 3을 추가하고 싶습니다.이 작업을 수행하는 방법에 대한 도움이 필요합니다.
내 코드는 다음과 같습니다.
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
@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]="\n_"+@turn+"|" if y==1 && x==2
@board[5]="_"+@turn if y==2 && x==2
@board[6]="|_"+@turn if y==3 && x==2
@board[7]="\n "+@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
puts "won"
해결책
귀하의 show_board
기능을 사용하면 인쇄할 수 있습니다. 1 2 3
거기
def show_board
puts " 1 2 3"
@board.each do |i|
print i
end
puts ""
아니면 다음의 일부로 가질 수도 있습니다. initialize
그리고 make_move
다음으로 차단
@board[1]=" 1 2 3\n" + "1 __|"
참고 사항:이내에 show_board
기능 대신 @board.each .. end
블록, 당신은 사용할 수 있습니다
@board.each {|i| print i}
다른 팁
우리는 제안을하고 있기 때문에, 이렇게 움직이는 방법을 변화시키지 않으려면이
def make_move(*coords)
case coords
when [1,1]
@board[1]="1 _"+@turn+"|"
when [2,1]
@board[2]="_"+@turn
when [3,1]
@board[3]="|_"+@turn
#...... you get the point
end
.
다음 풋을 여기에서 여기로 이동
g = Game.new
while g.check_win != true
g.show_board
g.set_turn
putc "Enter x coordinate: "
x=gets.to_i
putc "Enter y coordinate: "
y=gets.to_i
g.make_move(y,x)
end
. 제휴하지 않습니다 StackOverflow