Ok. I'm not sure how the game_slot method would work.  However a decorator class could wrap the logic you have in the opponents.

```ruby
class GameSlotDecorator
  
  attr_reader :game_slot

  def initialize(game_slot)
    @game_slot = game_slot
  end

  def players
    game_slot.players
  end

  def opponent1
    players[(player_id+1) % players.size]
  end

  # etc
end
```