0

我正在编写井字游戏程序。该程序是热座型游戏(用户对用户)。我编写了程序的一部分,它在板上的任何地方打印一个 x,但我需要帮助才能使移动保持不变。现在它会在棋盘上你想要的位置放置一个 x,但它不会为下一步行动而保存。

这是代码(我还没有完成程序的其余部分):

class Game

  def initialize
    @board=Array.new
    @board[1]="__|"
    @board[2]="__"
    @board[3]="|__"
    @board[4]="\n__|"
    @board[5]="__"
    @board[6]="|__"
    @board[7]="\n  |"
    @board[8]="  "
    @board[9]="|  "

    @turn = "x"
  end

  def show_board
    @board.each do |i|
      print i
    end
  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
    if y==1

      if y==1
        if x==1
          @board[1]="_x|"
        end
      end

      if y==2
        if x==1
          @board[2]="_x"
        end
      end

      if y==3
        if x==1
          @board[3]="|x_"
        end
      end

      if y==1
        if x==2
          @board[4]="\n_x|"
        end
      end

      if y==2
        if x==2
          @board[5]="_x"
        end
      end

      if y==3
        if x==2
          @board[6]="|x_"
        end
      end

      if y==1
        if x==3
          @board[7]="\nx |"
        end
      end



      if y==2
        if x==3
          @board[8]="x "
        end
      end
    end

    if y==3
      if x==3
        @board[9]="|x"
      end
    end


  end

  def check_win

  end
end


class Square
  def set_value

  end

  def value

  end

  def initialize
    @value
  end
end

g=Game.new
g.show_board
g.make_move
g.show_board
4

1 回答 1

0

顺便说一句:所以这可能是一个很好的练习来开始你的工作。为你想看到的行为编写测试,观察它失败然后让它通过。这将帮助您找到解决方案。

无论如何,您现在的 if/end 打开和关闭不匹配。这可能是导致你的问题。在 make move 你有 if y==1 两次。

class Game
  def initialize
    @board=Array.new
    @board[1]="__|"
    @board[2]="__"
    @board[3]="|__"
    @board[4]="\n__|"
    @board[5]="__"
    @board[6]="|__"
    @board[7]="\n  |"
    @board[8]="  "
    @board[9]="|  "

    @turn = "x"
  end

  def show_board
    @board.each do |i|
      print i
    end
  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

    # if y==1
    if y==1
      if x==1
        @board[1]="_x|"
      end
    end

    if y==2
      if x==1
        @board[2]="_x"
      end
    end

    if y==3
      if x==1
        @board[3]="|x_"
      end
    end

    if y==1
      if x==2
        @board[4]="\n_x|"
      end
    end

    if y==2
      if x==2
        @board[5]="_x"
      end
    end

    if y==3
      if x==2
        @board[6]="|x_"
      end
    end

    if y==1
      if x==3
        @board[7]="\nx |"
      end
    end

    if y==2
      if x==3
        @board[8]="x "
      end
    end

    if y==3
      if x==3
        @board[9]="|x"
      end
    end
  end

  def check_win
  end
end

class Square
  def set_value
  end

  def value
  end

  def initialize
    @value
  end
end

固定和工作:-)

此外 - 这种结构可以更容易地看到那些 if/end 不匹配:

def make_move
  puts "Enter x coordinate"
  x=gets.to_i

  puts "Enter y coordinate"
  y=gets.to_i

  @board[1]="_x|"   if y==1 && x==1
  @board[2]="_x"    if y==2 && x==1
  @board[3]="|x_"   if y==3 && x==1
  @board[4]="\n_x|" if y==1 && x==2
  @board[5]="_x"    if y==2 && x==2
  @board[6]="|x_"   if y==3 && x==2
  @board[7]="\nx |" if y==1 && x==3
  @board[8]="x "    if y==2 && x==3
  @board[9]="|x"    if y==3 && x==3
end
于 2013-11-13T01:15:28.367 回答