2013-12-23 107 views
0

我想通過一個Go Fish Card Card遊戲中我的玩家列表來給玩家發牌。我想傳入已經制作好的玩家數組作爲交易方法的參數/參數。將預製數組作爲Ruby中的參數/參數傳遞?

我知道我不得不使用圖示操作中的參數一個變量量通過,但我怎麼傳遞一個預製的陣列的不同元素

def deal_to_players是我正在修改的功能。我想將@player數組傳遞給deal_to_players number_of_players

謝謝!代碼:

require_relative 'FishDeck.rb' 
require_relative 'FishHand.rb' 
require_relative 'FishPlayers.rb' 


class FishGame 

    attr_accessor :player 
    attr_accessor :top_card_container, :next_turn #next turn stores who's turn it is next 
                #How will I use that with the server? 

    def initialize(number_of_fish_players) 
     @player = [] 
     i = 0 ##Revise so i can be 0? 
     number_of_fish_players.times do #like 5.times do 
     #puts "iteration i is: #{i}"  
      @player[i] = FishPlayer.new #Revise to PLAYER CLASS 
      i += 1 
     end 
     #puts "PLAYER ARRAY: #{@player}" 
     #puts "players 0: #{@player[0].player_hand.player_cards}, players 1: #{@player[1]}" 
    end 

    def deal_to_players(deck_name, number_of_players) #!!!!!!!!!!!!!!!!!Need to pass the @player array to nuber_of_players so I can perform .each on it 5 times 

     5.times do 
      top_card = deck_name.pop_top_card 
      @player1.player_cards << top_card 

      top_card = deck_name.pop_top_card 
      @player2.player_cards << top_card 

      top_card = deck_name.pop_top_card 
      @player3.player_cards << top_card 

      top_card = deck_name.pop_top_card 
      @player4.player_cards << top_card 

      top_card = deck_name.pop_top_card 
      @player5.player_cards << top_card 
     end 
    end 

    def deck_to_player(game_deck, player_to) 

     player_to.player_cards << top_card_container = game_deck.pop_top_card 
     #Pops top deck card and shovels onto player_to 's cards 
     player_to.looks_for_books 
    end 


    def player_to_player(game_deck, wanted_card, player_asked, player_asking) #player_asking wants "wanted_card" from player_asked 

     card_holder = player_asked.return_cards_requested(wanted_card) #player in game's return card method and stores 

     #puts "card holder[0] is: #{card_holder[0]}" 
     #puts "wanted card is #{wanted_card}" 


     if card_holder[0] == wanted_card #element 0 will be the wanted_card or hold nothing 

      player_asking.player_cards.concat(card_holder) 
      card_holder.clear 
      player_asking.looks_for_books 
      @next_turn = "player_asking" 
      #puts "next turn if player_asked has player_asking \'s wanted card" 
     else 

      card_from_deck = deck_to_player(game_deck, player_asking) 

      if card_from_deck == wanted_card 
       @next_turn = "player_asking" 
    #   puts "next turn if card from deck == card wanted: #{@next_turn}" 
      else 
       @next_turn = "NEXT PLAYER" 
    #   puts "next turn if card from deck did NOT == card wanted: #{@next_turn}" 
      end 
     end 
    end 
end 
+0

爲什麼你就不能說'@player.each {...}'在'deal_to_players'裏面? –

+0

像史恩說的那樣?因爲它是類中的一個實例變量,我不需要通過它? – Yallo

+0

右,實例變量被附加到'self',以便它們始終可用。您可能希望在進入時將其重命名爲「@ players」,它包含若干項內容,因此使用複數名稱是有道理的。 –

回答

0

我只想補充其訪問您@players實例變量的方法

def deal_to_players(deck_name) 
    5.times do 
     number_of_players.times do |i| 
      top_card = deck_name.pop_top_card 
      @players[i].player_card << top_card 
     end 
    end 
end 


def number_of_players 
    @players.count 
end 
+0

* *會很好,很花哨,而且實際上是一個非常簡單的解決方案,但我試圖一次處理1張牌給每個*玩家,就像在真正的紙牌遊戲中一樣。第一張牌給玩家1,第二張牌給玩家2等等。 我不知道如何用這種結構合理地實現它。 – Yallo

+0

好的,這應該可以滿足你的需求,假設每個玩家都需要5張牌。 – wvm2008

1
def deal_to_players(deck_name) 
    5.times do 
    #Since @player is a instance variable (thanks to the @) you don't have to pass it: 
    #It's in plain sight (inside the instance). note @player is a clumsy name for a collection 
    @player.each do |pl| #I'd prefer 'player' over 'pl', but now it's confusing 
     pl.player_cards << deck_name.pop_top_card 
    end 
end