Piszę program kółko i krzyżyk. W tej chwili użytkownik może zastąpić zajęty kwadrat. Ponadto, gdy użytkownik wprowadzi współrzędną spoza planszy, pomija tę osobę. Chciałbym, aby mój program powiedział coś w stylu „wprowadzona współrzędna została już zajęta lub jest nieprawidłowa”, gdy użytkownik wprowadzi współrzędną przyjętą lub współrzędnej, której nie ma na planszy. Program musiałby wtedy dać użytkownikowi kolejną szansę na wprowadzenie jego / jej współrzędnych. Jakieś sugestie?
To jest mój kod:
class Game
def initialize
@board=Array.new
@board[1]=" 1 2 3n" + "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"
Odpowiedzi:
0 dla odpowiedzi № 1Spróbuj zmienić każdą z tych linii
@board[1]="1 _"+@turn+"|" if y==1 && x==1
do:
if y==1 && x==1 && @board[1].eql?(" 1 2 3n" + "1 _|")
@board[1] = "1 _" +@turn + "|"
i użyj elsif dla @board [2-9]. Część @board [1] .eql? () Jest tym, co zainicjowałeś te wartości. Na końcu wszystkiego, co stawia tę linię:
else
make_move
end
Teraz pozwoli Ci tylko zmienić wartość@board [x], jeśli nie został już zmieniony. A jeśli żaden z warunków nie jest spełniony, aby zmienić tę wartość, ponownie uruchomi metodę make_move. Końcowy kod powinien wyglądać mniej więcej tak
if y==1 && x==1 && @board[1].eql?(" 1 2 3n" + "1 _|")
@board[1] = "1 _" +@turn + "|"
elsif y==2 && x==1 && ...
...
else
make_move
end