Я работаю над игрой в крестики-нолики и хочу проверить, соответствует ли выбор игрока вложенному массиву, содержащему выигрышные комбинации.
В настоящий момент, например, [7,8,9] или [9,7,8] или [1,2,3] или [1,3,2] заканчивают игру и объявляют победителя, как они должны.
Однако, например, [1,7,8,6,9] или [1,7,3,5,6] или [1,4,2,3,9] игнорируются, и победитель выигрывает ' не может быть объявлено, как задумано, хотя массивы включают выигрышные комбинации «7,8,9» и «3,5,7» и «1,2,3».
Спасибо за любой совет или помощь заранее.
Все выигрышные комбинации в сетке 3x3.
WINNING_COMBOS = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]]
У меня есть два массива игроков: @@ player_one и @@ player_two, которые выбирают числа из массива @possible_choice.
@possible_choice = [1,2,3,4,5,6,7,8,9]
.
.
.
def player_one_turn()
puts "Player One, make your choice:"
p @possible_choice
puts @grid
@@player_one << @possible_choice.delete(gets.chomp.to_i)
p @@player_one
end
У меня также есть has_won? Метод
def has_won?
WINNING_COMBOS.include?(@@player_one.sort) ||
WINNING_COMBOS.include?(@@player_two.sort)
end
Незаконченная игра во всей ее полноте. Пожалуйста, не возражайте против сетки, я все еще работаю над ней.
class Grid
WINNING_COMBOS = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]]
attr_accessor :possible_choice
attr_accessor :grid
def initialize
@possible_choice = [1,2,3,4,5,6,7,8,9]
@grid = "
|----|----|----|
| 1 | 2 | 3 |
|----|----|----|
| 4 | 5 | 6 |
|----|----|----|
| 7 | 8 | 9 |
|----|----|----|
"
end
end
class Game < Grid
@@player_one = Array.new
@@player_two = Array.new
def game
puts
puts "*** This is a tic-tac-toe game for two human players. ***"
puts
loop do
player_one_turn()
puts
if has_won?
puts "The game has ended. Player One has won!"
puts
return
end
break if @@player_one.length == 5
player_two_turn()
puts
if has_won?
puts "The game has ended. Player Two has won!"
puts
return
end
end
end
def player_one_turn()
puts "Player One, make your choice:"
p @possible_choice
puts @grid
@@player_one << @possible_choice.delete(gets.chomp.to_i)
p @@player_one
end
def player_two_turn()
puts "Player Two, make your choice:"
p @possible_choice
puts @grid
@@player_two << @possible_choice.delete(gets.chomp.to_i)
p @@player_two
end
def has_won?
WINNING_COMBOS.include?(@@player_one.sort) ||
WINNING_COMBOS.include?(@@player_two.sort)
end
end
new_game = Game.new
new_game.game