0

私は独学で Ruby を学んでおり、Sapphire on Steel として知られる Visual Studio でコンパイラを使用してコードを実行しています。学校向けのブラックジャック プログラムを作成しています。ここまでで、Deck クラス、Card クラス、Player クラスを作成しました。デッキ クラスには、デッキの内容を出力する関数があり、同じ関数を使用してプレイヤーの手札の内容を出力しようとしています。このコードは、カード クラス getCard() の関数を呼び出し、配列全体をループします。印刷メソッドは printDeck() 関数では機能しますが、showHand() 関数では機能しません。

デッキ オブジェクトが作成され、その内容が 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:\Users\Zach\Documents\Visual Studio 2010\Projects\BlackJack\BlackJack\BlackJack.rb:118: in showHand': undefined methodgetCard' for # (NoMethodError)

C:\Users\Zach\Documents\Visual Studio 2010\Projects\BlackJack\BlackJack\BlackJack.rb:117:「各」から

C:\Users\Zach\Documents\Visual Studio 2010\Projects\BlackJack\BlackJack\BlackJack.rb:117:in `showHand' から

C:\Users\Zach\Documents\Visual Studio 2010\Projects\BlackJack\BlackJack\BlackJack.rb:133 から

4

3 に答える 3

0

start メソッドでは、配列である myDeck.drawHand の戻り値をプッシュしています。したがって、それぞれを使用してハンドを見ると、得られるのはカードではなくこの配列です。あなたは次のようなことをしたい

myDeck.drawHand.each do |card|
    @pHand << card
end
于 2013-04-15T20:26:07.863 に答える