如何从第二个类调用方法来处理第三类对象

时间:2015-06-05 12:17:35

标签: ruby class oop object methods

我在Ruby中制作TicTacToe游戏,其实现看起来像这样。

class Board
  @grid #an array which holds Xs, Os and nils.
  def won? #checks if the game has been won
  def mark_move #implements a given move for a player
  #other methods....
end

class Player
  def initialize #to initialize player name etc.

  def move
    ....
  mark = gets.chomp.split(",").map(&:to_i)
  #How to do this?
  #I want this method to call mark_move on the initiated object of Board class 
  end

end

class Game
  def initialize(p1, p2) #p1, p2 are objects of Player class
    board = Board.new
  end

  def play
    puts "Welcome to game....."
    loop until won?
      p1.move #How to make this act on the board object?
      board.grid.display
      return if won?
      p2.move ##How to make this act on the board object?
    end
    puts winner
  end
end

我想要的解决方案是让Player类中的move方法作用于Board类(board)的对象。什么是最好的方法呢?从Game类中传递董事会作为参数? (p1.move(board))这看起来并不是最佳的,因为我想象一个更大的问题,我们可能有10-15个类,我们希望他们的方法对不同的对象起作用。如果我们每次都使用传递对象参数来解决这个问题,那么它就会造成一个真正的混乱...

解决这些问题的专家方法是什么?

THX!

2 个答案:

答案 0 :(得分:1)

似乎最佳解决方案是传递参数,只是保持简单......

TextView对我来说似乎很好......

但是对于我的实现,它将(基于您当前的代码):

p1.move(board)

这对我来说是最简单,最快速,最易读的解决方案:)

答案 1 :(得分:0)

你实现它的方式,每个用户都有自己的主板,但事实并非如此,应该是以下内容:

每个Game应该有:

  
      
  1. 2位玩家
  2.   
  3. 1 board
  4.   

每个Board应该有:

  
      
  1. 栅格
  2.   

每个Player都有:

  
      
  1. 符号
  2.   

每个Player都可以:

  
      
  1. 移动
  2.   

Game玩家可以:

  
      
  1.   

现在“应该有”是变量,而“可以”是方法调用。

所以基本上我们在这两个球员中都是相同的。为此,我们选择了一个共同点来宣布董事会和球员。

希望有所帮助。