如何在我的井字游戏中停留?

时间:2013-11-13 01:03:53

标签: ruby-on-rails ruby ruby-on-rails-3 class tic-tac-toe

我正在写一个tic-tac-toe程序。该程序是热门型游戏(用户v用户)。我写了程序的一部分,在板上的任何地方打印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

1 个答案:

答案 0 :(得分:0)

抛开:所以这可能是一个很好的练习,可以开始自己的工作。编写您想要查看的行为的测试,观察它失败然后通过。这将有助于您制定解决方案。

无论如何,如果/现在开始和结束都不匹配。这可能会引起你的问题。如果y == 1两次,那么在make move中。

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