Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdawanie kart bez powtórek.

Ostatnio zmodyfikowano 2012-06-24 10:09
Autor Wiadomość
carla
Temat założony przez niniejszego użytkownika
Rozdawanie kart bez powtórek.
» 2012-06-22 00:47:11
Mam problem i bardzo liczę na Waszą pomoc. Otóż program rozdaje karty uczestnikom, ale niestety obydwu takie same...
nie mam pojęcia co zrobić, żeby rozdawane były im inne...

C/C++
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include<sstream>
using namespace std;
class Card
{
private:
    int value;
    string name;
    string color;
public:
    Card( int v, string n, string c )
        : value( v )
        , name( n )
        , color( c )
    { }
    int getValue()
    {
        return value;
    }
    string getName()
    {
        return name;
    }
    string getColor()
    {
        return color;
    }
    friend ostream & operator <<( ostream & strumien, Card c )
    {
        strumien << c.getName() << " " << c.getColor();
        return strumien;
    }
};
class Talia
{
    friend class Player;
    friend class Musik;
public:
    vector < Card > talia;
public:
    virtual void add( Card c ) //dodawania karty do talii
    {
        talia.push_back( c );
    }
    Card popCard() //wyciąganie karty z talii
    {
       
        for( int i = 0; i < talia.size(); i++ ) {
            srand( time( NULL ) );
            int index = rand() % talia.size();
            Card tmp = talia[ index ];
            talia[ index ] = talia.back();
            talia.pop_back();
            return tmp;
        }
       
    }
   
    void createFull()
    {
        string kolory[ 4 ] = { "kier", "karo", "pik", "trefl" };
        string figury[ 13 ] = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "Walet", "Dama", "Krol", "As" };
        //można by tu dla 2-10 użyć sstream, ale nie chce mieszać
        for( int i = 0; i < 4; i++ )
        {
            for( int j = 0; j < 9; j++ ) //2-10
            {
                Card tmp( j + 2, figury[ j ], kolory[ i ] ); //generujemy kartę
                talia.push_back( tmp ); //dodajemy do talii
            }
            for( int j = 9; j < 12; j++ ) //walet, dama, krol
            {
                Card tmp( j - 7, figury[ j ], kolory[ i ] ); //generujemy kartę
                talia.push_back( tmp ); //dodajemy do talii
            }
            Card tmp( 11, figury[ 12 ], kolory[ i ] ); //as
            talia.push_back( tmp ); //dodajemy do talii
        }
    }
    void show_cards()
    {
        cout << "Karty w talii: " << endl;
        for( int i = 0; i < this->talia.size(); i++ )
        {
            cout << i + 1 << ". " << this->talia[ i ] << endl;
        }
        cout << endl;
    }
    int getValue() //funkcja zwraca wartość wszystkich kart w talii
    {
        int sum = 0;
        for( int i = 0; i < talia.size(); i++ )
             sum += talia[ i ].getValue();
       
        return sum;
    }
    bool empty() const
    {
        return talia.empty();
    }
};
class Musik
    : public Talia
{
public:
    Musik( Talia talia )
    {
        talia.createFull();
        for( int i = 0; i < 4; i++ )
             add( talia.popCard() );
       
    }
};
class Player
    : public Talia
{
    string player_name;
public:
    Player( Talia talia )
    {
        player_name = "";
        talia.createFull();
        for( int i = 0; i < 16; i++ )
             add( talia.popCard() );
       
    }
    void show_cards()
    {
        cout << "Nazwa playera:" << player_name << endl;
        cout << "Karty: " << endl;
        for( int i = 0; i < this->talia.size(); i++ )
        {
            cout << i + 1 << ". " << this->talia[ i ] << endl;
        }
        cout << endl;
    }
    virtual void Set_name( string nazwa )
    {
        player_name = nazwa;
    }
};
class lew
{
public:
    Talia talia;
};
class Komputer_1
{
public:
    Player * gracz;
public:
    Komputer_1( Talia talia )
    {
        gracz = new Player( talia );
        gracz->Set_name( "KOMPUTER_1" );
    }
    void graj( lew stol, Musik musik )
    {
        if( gracz->talia.size() > 0 )
        { stol.talia.add( gracz->popCard() );
            gracz->show_cards();
            /*
            Brak dalszej implementacji
            */
        }
    }
};
class Komputer_2
{
public:
    Player * gracz;
public:
    Komputer_2( Talia talia )
    {
        gracz = new Player( talia );
        gracz->Set_name( "KOMPUTER_2" );
    }
    void graj( lew stol, Musik musik )
    {
        if( gracz->talia.size() > 0 )
        { stol.talia.add( gracz->popCard() );
            gracz->show_cards();
            /*
            Brak dalszej implementacji
            */
        }
    }
};
class Czlowiek
{
public:
    Player * gracz;
public:
    Czlowiek( Talia talia )
    {
        gracz = new Player( talia );
    }
    void graj( lew stol, Musik musik )
    {
        /*
        Brak implementacji
        */
    }
};
template < class typ_gracza1, class typ_gracza2, class typ_gracza3 >
class Rozgrywka
{
public:
    int ktora_rozgrywka;
    Talia talia;
    lew stol;
    int p1;
    int p2;
    int p3;
public:
    typ_gracza1 * Player1;
    typ_gracza2 * Player2;
    typ_gracza3 * Player3;
    Musik * musik;
public:
    Rozgrywka()
    {
        p1 = p2 = p3 = 0;
        talia.createFull();
        Player1 = new typ_gracza1( talia );
        Player2 = new typ_gracza2( talia );
        Player3 = new typ_gracza3( talia );
        musik = new Musik( talia );
    }
    void wynik_rozgrywki()
    {
        /*
        Brak implementacji
        */
    }
};
int main()
{
    while( true )
    {
        cout << "Gra 3-5-8" << endl << endl;
        int option;
        cout << "1. Rozpocznij Nowa gre." << endl;
        cout << "2. Odczytaj zapisany stan gry." << endl;
        cout << "3. Zakoncz gre. " << endl;
        cout << "Twoj wybor: ";
        cin >> option;
        switch( option )
        {
        case 1:
            {
                cout << "Podaj ilosc graczy (za reszte graczy, grac bedzie komputer) :";
                char ilosc_graczy;
                cin >> ilosc_graczy;
                switch( ilosc_graczy );
                {
                case '1': { Rozgrywka < Komputer_1, Komputer_2, Czlowiek > gra;
                        for( int i = 0; i < 18; i++ )
                        {
                            gra.Player1->graj( gra.stol, * gra.musik );
                            gra.Player2->graj( gra.stol, * gra.musik );
                            gra.Player3->graj( gra.stol, * gra.musik );
                            gra.ktora_rozgrywka = i;
                        }
                        gra.wynik_rozgrywki();
                        break;
                    }
                case '2': { Rozgrywka < Komputer_1, Czlowiek, Czlowiek > gra;
                        for( int i = 0; i < 18; i++ )
                        {
                            gra.Player1->graj( gra.stol, * gra.musik );
                            gra.Player2->graj( gra.stol, * gra.musik );
                            gra.Player3->graj( gra.stol, * gra.musik );
                            gra.ktora_rozgrywka = i;
                        }
                        gra.wynik_rozgrywki();
                        break;
                    }
                case '3': { Rozgrywka < Czlowiek, Czlowiek, Czlowiek > gra;
                        for( int i = 0; i < 18; i++ )
                        {
                            gra.Player1->graj( gra.stol, * gra.musik );
                            gra.Player2->graj( gra.stol, * gra.musik );
                            gra.Player3->graj( gra.stol, * gra.musik );
                            gra.ktora_rozgrywka = i;
                        }
                        gra.wynik_rozgrywki();
                        break;
                    }
                    break;
                } }
        case 2: break;
        case 3: exit( 0 ); break;
            default: cout << "PODALES BLEDNA OPCJE SPROBOJ JESZCZE RAZ" << endl;
        }
    }
    Rozgrywka < Komputer_1, Komputer_2, Czlowiek > gra;
    gra.Player1->gracz->show_cards();
    gra.Player2->gracz->show_cards();
    gra.Player3->gracz->show_cards();
    gra.musik->show_cards();
    return 0;
}
P-58868
LukiPRO
» 2012-06-22 00:50:59
Mogłabyś edytować to i dać kod w [cpp] [/cpp]
P-58870
carla
Temat założony przez niniejszego użytkownika
» 2012-06-22 12:37:11
wybacz, jestem tu pierwszy raz, dodam, że po to by uzyskać pomoc w sprawie kodu, nie jego prawidłowego zamieszczania, ale zapewne przyda się.
I jeśli już to 'mogłabym'
P-58890
DejaVu
» 2012-06-22 13:05:55
zrob tablice wszystkich kart za pomoca np. std::vector. pozniej na niej wywolaj funkcje random_shuffle i zdejmuj karty od konca (rozdawanie). wszyscy wowczas beda mieli unikatowe karty i prosto sie te karty rozdaje.
P-58891
carla
Temat założony przez niniejszego użytkownika
» 2012-06-23 12:32:15
no i tu pojawia się problem. Bo nie mam pomysłu na zapis.
Proszę o pomoc.
P-58959
DejaVu
» 2012-06-23 13:41:45
Jaki zapis...
P-58962
jankowalski25
» 2012-06-24 10:09:44
Chodzi Ci o » Kurs C++Obsługa plików lekcja?
P-59013
« 1 »
  Strona 1 z 1