2013-04-15 73 views
0

我在自學Ruby,並使用一個帶Visual Studio的編譯器,稱爲Sapphire on Steel來運行代碼。我正在爲學校製作一個二十一點計劃。到目前爲止,我創建了一個Deck類,Card類和Player類。在甲板課中,我有一個打印甲板內容的功能,我正在嘗試使用相同的功能來打印玩家手中的內容。代碼調用卡類getCard()的函數,並循環整個數組。打印方法適用於printDeck()函數,但不適用於showHand()函數。爲什麼我的Class方法調用在一個方法中工作,而不是另一個方法?

創建了deck對象,並將其內容傳遞給PlayerHand.start()函數中的數組。 PlayerHand.showHand()函數打印傳遞數組內容的數組內容。

有人可以幫我找出原因嗎?任何及所有的幫助,將不勝感激

#Zach Albright 
#4-11-2013 
#Black Jack 

class Card 
def initialize(suit, value) 
    @suit = suit 
    @value = value 
end 

def getCard() 
    puts "#{@suit}: #{@value}\n" 
end 

def getSuit() 
    return @suit 
end 

def getValue() 
    return @value 
end 
end 

class Deck 
def initialize() 
    @deck = Array.new() 

    for i in 1..4 
     for j in 1..13 
      if i == 1 
       if j == 11 
        @deck.push(Card.new("Hearts", "Jack")) 
       elsif j == 12 
        @deck.push(Card.new("Hearts", "Queen")) 
       elsif j == 13 
        @deck.push(Card.new("Hearts", "King")) 
       else 
        @deck.push(Card.new("Hearts", j)) 
       end 


      elsif i == 2 
       if j == 11 
        @deck.push(Card.new("Spades", "Jack")) 
       elsif j == 12 
        @deck.push(Card.new("Spades", "Queen")) 
       elsif j == 13 
        @deck.push(Card.new("Spades", "King")) 
       else 
        @deck.push(Card.new("Spades", j)) 
       end 

      elsif i == 3 
       if j == 11 
        @deck.push(Card.new("Clubs", "Jack")) 
       elsif j == 12 
        @deck.push(Card.new("Clubs", "Queen")) 
       elsif j == 13 
        @deck.push(Card.new("Clubs", "King")) 
       else 
        @deck.push(Card.new("Clubs", j)) 
       end 
      elsif i == 4 
       if j == 11 
        @deck.push(Card.new("Diamonds", "Jack")) 
       elsif j == 12 
        @deck.push(Card.new("Diamonds", "Queen")) 
       elsif j == 13 
        @deck.push(Card.new("Diamonds", "King")) 
       else 
        @deck.push(Card.new("Diamonds", j)) 
       end 
      end 
     end 
    end 

    @deck.compact 
end 


def printDeck() 
    @deck.each do |i| 
     puts i.getCard() 
    end 
end 

def shuffleDeck() 
    @deck.shuffle! 
end 

def drawCard() 
    return @deck.pop() 
end 

def drawHand() 
    return @deck.pop(5) 
end 
end 

class PlayerHand 
def initialize() 
    @pHand = Array.new() 
    @pCard = Card.new("Hearts", 4) 

end 

def start(myDeck) 
    @pHand.push(myDeck.drawHand()) 
end 


def drawCard(myDeck) 
    @pHand.push(myDeck.drawCard()) 
end 

#still needs work to show the actual contents of the card .getCard is not working  correctly 
def showHand() 
    @pHand.each do |i| 
     puts i.getCard() 
    end 
end 
end 

myCard = Card.new("Hearts", 4) 
myArray = Array.new() 

puts myCard.getCard() 

myDeck = Deck.new() 
myDeck.shuffleDeck() 

player = PlayerHand.new() 
player.start(myDeck) 
player.showHand() 

錯誤: C:\用戶\扎克\文檔\ Visual Studio 2010的\項目\的BlackJack \的BlackJack \ BlackJack.rb:118:在showHand': undefined method getCard」爲#(NoMethodError )

從C:\用戶\扎克\文件\的Visual Studio 2010 \項目\酒杯\酒杯\ BlackJack.rb:117:在`每個」

從C:\用戶\扎克\文檔\ Visual Studio 2010 \ Projects \ BlackJack \ BlackJack \ BlackJack.rb:117:in`showHand'

從C:\用戶\扎克\文檔\ Visual Studio 2010的\項目\的BlackJack \的BlackJack \ BlackJack.rb:133

+0

getCard()被調用時會發生什麼?有錯誤嗎? –

+0

@GavinMiller哎呀忘了把錯誤,我會添加錯誤我得到的代碼 – user1457104

回答

0

問題在於drawHand()當你打電話@deck.pop(5)你正在返回一個包含5張卡片的數組。

在你的方法start如果你改變push+你會沒事的。

def start(myDeck) 
    @pHand + myDeck.drawHand() 
end 
+0

哦,好吧,這更有意義。謝謝! – user1457104

+0

@ user1457104沒問題。 –

0
block in showHand': undefined method 'getCard' for #<Array:0x007ff3799a8c28> (NoMethodError) 

的錯誤信息是很清楚的:你調用一個Array對象Card#getCard,這顯然不存在。

getCard()Card類的實例方法,這意味着你可以只一個Card對象作爲接收器調用它:

card = Card.new 
card.getCard() 
+0

@ user1457104哪條線你在說什麼? – Agis

+0

printDeck: 甲板是一個陣列 def printDeck() deck.each do | i | 把我。getCard() 端 端 梭哈() pHand是一個數組 DEF梭哈() @ pHand.each做| I | puts i.getCard() end end – user1457104

+0

您定義'printDeck()',但你永遠不會調用它。嘗試調用它,你會收到相同的錯誤。 – Agis

0

在start方法中,您正在推送myDeck.drawHand(它是一個數組)的返回值。那麼當你看着每一隻手時,你得到的是這個數組而不是卡片。你想做類似

myDeck.drawHand.each do |card| 
    @pHand << card 
end 
相關問題