2

学校向けのこのゲーム オブ スペード プロジェクトでクラスを使用することについて学習しようとしています。このコードを実行すると、あらゆる種類のエラーが発生するようです (以下)。カードを作成し、デッキを作成し、そのデッキをシャッフルしてから、カードをプレイヤーとコンピューターに配ろうとしています。クラスを正しく使用しているかどうか確信が持てず、main() 部分でクラスを実装する方法がまだわかりません。どんな例でも本当に役に立ち、感謝しています。

#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#include <Windows.h>

// Game Specific Files
#include "CardGameConfig.h"
#include "CardGameFunctions.h"
#include "CardGameStructs.h"

using namespace std;



// Card Class
class Card
{
private:
    int _suit;
    int _rank;
public:
   Card();
   Card(int &iSuit, int &iRank); 
   ~Card(); // Deconstructor
   int GetSuit(); //Method
   int GetRank(); //Method
};


// sets a blank card
Card::Card(){      
    _suit = 0;
    _rank = 0;
}


// creates a card with a given suit
Card::Card(int &iSuit, int &iRank){
    _suit = iSuit;
    _rank = iRank;

} // end of Card function (class member)

int Card::GetSuit(){
        return _suit;
}

int Card::GetRank(){
    return _rank;
}

Card::~Card(){
}


// Deck Class
class Deck
{
private:
    Card cards[TOTAL_CARDS_IN_DECK];
    Card *_pCardList[52];
public:
    Deck();
   ~Deck();
   void Shuffle();
   Card DrawCard();
   Card *_pCardList; // holds an array of cards (52 of them)
   int _index;
};

Deck::Deck(){


    // Start deck index at zero
    _index = 0;
    _pCardList = new Card[TOTAL_CARDS_IN_DECK];

    // TOTAL_CARDS_IN_SUIT = 13
    for(int iRank = 0; iRank < TOTAL_CARDS_IN_SUIT; iRank++)
    {
        int iRankOffset = 2;
        iRank = iRank + iRankOffset;

        //TOTAL_SUITS = 4
        for(int iSuit = 0; iSuit < TOTAL_SUITS; iSuit++){
            iSuit = ESuits(iSuit);
            _pCardList[_index] = Card(iRank, iSuit);        
            _index++;
        } // end of iSuit for loop
    } // end of iRank for loop */
}


void Deck::Shuffle(){
    srand((int) time( NULL ) );

    for(int iCardNum = 0; iCardNum < TOTAL_CARDS_IN_DECK; iCardNum++)
    {
        int iRandomNumber = ( rand() % TOTAL_CARDS_IN_DECK-1);
        Card card = _pCardList[iCardNum];
        _pCardList[iCardNum] = _pCardList[iRandomNumber];
        _pCardList[iRandomNumber] = card;
    }
}

Card Deck::DrawCard(){

    _index++;
    return _pCardList[_index-1];

}

Deck::~Deck()
{
    delete [] cards;
}

int main(int argc, char* argv[]){

    Card CardGame;
    Deck Deck;



//  cout << Deck._pCardList[1].GetRank() << " " << Deck._pCardList[1].GetSuit() <<     endl;

    return 0;
    std::cin.get();
    std::cin.get();
}
4

1 に答える 1

1

_pCardList2 回宣言することはできません。

class Deck {
private:
    Card cards[TOTAL_CARDS_IN_DECK];
    // Card *_pCardList[52]; // FIRST TIME (useless)
    Card *_pCardList;         // SECOND TIME (this should be private)
    int _index;               // This should also be private
public:
    Deck();
    ~Deck();
    void Shuffle();
    Card DrawCard();
};

ちょっとしたおまけ: drawfunction の場合、これを行うことができます:

Card Deck::DrawCard(){
    return _pCardList[_index++];
}

これは、インクリメントする前に_index++の値を返すため機能します。_index

于 2012-10-20T07:01:11.590 に答える