井字棋帮助修复方法,用于检查是否已选择正方形。游戏板的结构为空数组

问题描述 投票:0回答:1

我正在使用Ruby在命令行中创建井字游戏。我有一个display_board方法,可以在命令行中将我的数组显示为游戏板,当我玩游戏时,玩家可以在1-9之间进行选择,并在其正方形中填充“符号”。我创建了一个方法check_square来验证网格中的一个正方形是否已被采用,但对我来说不能正常工作。我开始游戏,一切正常,直到要求我选择网格上的第一个数字。它立即做出响应,并告诉我该号码已被使用,即使这是游戏的第一步。它要求我选择另一个数字,并在第二次尝试中填充网格。它会在每个玩家移动时执行此操作。这种逻辑对我来说似乎很有意义,我一直在努力解决一个小时,但是我显然忽略了一些东西。向正确方向的任何推动都会有所帮助!

class Players
    attr_accessor :name, :symbol
    def initialize(name, symbol)
        @name = name
        @symbol = symbol
    end
end

class Game 
    @@board = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
    @@count = 0

    def initialize
        puts "Tic Tac Toe!"
    end

    def display_board
        puts "  #{@@board[0]}  |  #{@@board[1]}  |  #{@@board[2]}"
        puts seperator = "-----+-----+-----"
        puts "  #{@@board[3]}  |  #{@@board[4]}  |  #{@@board[5]}"
        puts seperator
        puts "  #{@@board[6]}  |  #{@@board[7]}  |  #{@@board[8]}"
        puts "\n"
    end

    def game_start
        puts "Time for some Tic Tac Toe! Enter your name player 1: \n"
        player1 = gets.chomp
        puts "Would you like to be X or O #{player1}?"
        symbol1 = gets.chomp.upcase
        player_one = Players.new(player1, symbol1)
        puts "And a name for player 2: \n"
        player2 = gets.chomp
        symbol2 = player_one.symbol == "X" ? "O" : "X"
        player_two = Players.new(player2, symbol2)
        puts "\n"
        puts "Okay #{player_one.name}, you're up. Make a move."
        display_board
        make_moves(player_one, player_two)
    end

    def make_moves(player_one, player_two)
        until @@count == 9

            puts "Pick a number from the grid above #{player_one.name}"
            move = gets.chomp.to_i - 1
            check_square(move, player_one, player_two)
            @@board[move] = player_one.symbol
            @@count += 1
            display_board

            puts "Pick a number from the grid above #{player_two.name}"
            move = gets.chomp.to_i - 1
            check_square(move, player_one, player_two)
            @@board[move] = player_two.symbol
            @@count += 1
            display_board
        end
    end

    def check_square(move, player_one, player_two)
        if @@board[move] == "#{player_one.symbol}" || "#{player_two.symbol}"
            puts "That number is taken, pick another!"
            move = gets.chomp.to_i - 1
        else
            return
        end
    end

end

game = Game.new
game.game_start
ruby methods tic-tac-toe
1个回答
0
投票
@@board[move] == "#{player_one.symbol}" || "#{player_two.symbol}"

此逻辑是要检查是否有任一玩家符号存储在棋盘上的所选位置。它真正在做的是检查玩家的符号是否存储在板上的该位置,如果不是,则将玩家的符号的字符串文字评估为真。[[always。

尝试以下方法:

@@board[move] == "#{player_one.symbol}" || @@board[move] == "#{player_two.symbol}"

© www.soinside.com 2019 - 2024. All rights reserved.