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

Tworzenie nowych obiektów (graczy) w klasie.

Ostatnio zmodyfikowano 2017-04-20 08:38
Autor Wiadomość
Alex_Cooperek
Temat założony przez niniejszego użytkownika
Tworzenie nowych obiektów (graczy) w klasie.
» 2017-04-18 14:46:18
Dzień Dobry
Chcę rozszerzyć grę w oczko o nowych graczy w zależności ile poda użytkownik. Tylko nie do końca wiem jak powinnam zmodyfikować konstruktor w oczko.cpp? Byłabym ogromnie wdzięczna, za jakieś wskazówki.
Pozdrawiam

Obiekt człowiek ma obowiązki jakby komputera, pyta graczy, czy chcą gra dalej.

oczko.h
C/C++
#ifndef OCZKO_H
#define OCZKO_H
#include "talia.h"
#include "czlowiek.h"
class Oczko
{
    Talia * t;
    Gracz * g[ 5 ];
public:
    Oczko();
    ~Oczko();
    void graj();
};

#endif // OCZKO_H

oczko.cpp
C/C++
#include "oczko.h"
#include <iostream>
using namespace std;
Oczko::Oczko()
{
    t = new Talia( 52 );
    t->wartosciOczko();
    for( int i = 0; i < 5; ++i )
    {
        g[ i ] = NULL;
    }
    g[ 0 ] = new Gracz;
    g[ 1 ] = new Czlowiek;
}

Oczko::~Oczko()
{
    delete t;
    for( int i = 0; i < 5; ++i )
    if( g[ i ] != NULL )
         delete g[ i ];
   
}

void Oczko::graj()
{
    t->tasuj();
    bool warunek;
    do
    {
        warunek = false;
        for( int i = 0; i < 5; ++i )
        {
            if( g[ i ] != NULL && g[ i ]->czyNastepna() )
            {
                warunek = true;
                g[ i ]->dodajKarte( t->dajKarte() );
            }
        }
    } while( warunek );
   
    for( int i = 0; i < 5; ++i )
    {
        if( g[ i ] != NULL )
        { g[ i ]->wyswietl();
            cout << "Punkty: " << g[ i ]->policzPunkty() << endl;
        }
    }
}








P-160244
michal11
» 2017-04-18 14:48:58
Twórz ich w tej pętli w konstruktorze a nie nullujesz elementy tablicy

C/C++
for( int i = 0; i < 5; ++i )
{
    g[ i ] = new Gracz;
}

pamiętaj tylko, że nie możesz później zrobić
g[ 1 ] = new Czlowiek;
 bo nadpiszesz istniejący element tablicy (i będziesz miała wyciek). Moim zdaniem, jeżeli Czlowiek jest unikalny dla gry to nie powinien być elementem tablicy tylko oddzielną zmienną.
P-160245
Alex_Cooperek
Temat założony przez niniejszego użytkownika
» 2017-04-18 16:00:28
Rzeczywiście udało mi się i tworzą się dodatkowi gracze. W pierwszej pętli tworzę osobno graczy i ludzi. Jeszcze chciałabym się zapytać, jak mogłabym dodawać nazwy dla wybranych graczy, ponieważ nie mogę zrobić takiej operacji
C/C++
string nazwa;
for( int i = 0; i < liczba; i++ )
     g[ i ] = nazwa;


Tutaj poprawiony już kod

C/C++
#include "oczko.h"
#include <iostream>
using namespace std;
Oczko::Oczko()
{
    t = new Talia( 52 );
    t->wartosciOczko();
    cout << "Podaj ilosc graczy: ";
    cin >> liczba_graczy;
    for( int i = 0; i < liczba_graczy; ++i )
    {
        g[ i ] = new Gracz;
        c[ i ] = new Czlowiek;
    }
    //g[0]=new Gracz;
    //g[1]=new Czlowiek;
}

Oczko::~Oczko()
{
    delete t;
    for( int i = 0; i < liczba_graczy; ++i )
    { //if(g[i]!=NULL)
        delete g[ i ];
        delete c[ i ];
    }
}

void Oczko::graj()
{
    t->tasuj();
    bool warunek;
    do
    {
        warunek = false;
        for( int i = 0; i < liczba_graczy; ++i )
        {
            if( /*g[i]!=NULL &&*/ g[ i ]->czyNastepna() )
            {
                warunek = true;
                g[ i ]->dodajKarte( t->dajKarte() );
            }
        }
    } while( warunek );
   
    for( int i = 0; i < liczba_graczy; ++i )
    {
        //if(g[i]!=NULL)
        g[ i ]->wyswietl();
        cout << "Punkty: " << g[ i ]->policzPunkty() << endl;
       
    }
   
}





P-160246
michal11
» 2017-04-18 17:47:52
O jakie nazwy ci chodzi? Jeżeli o nazwę zmiennej to jest nią odpowiednia komórka pamięci, a jeżeli masz pole w klasie które się nazywa nazwa to musisz się do takiego pola odwołać albo bezpośrednio przez operator ./-> lub przez funkcję.
P-160250
Alex_Cooperek
Temat założony przez niniejszego użytkownika
» 2017-04-18 18:26:33
Chciałabym, by użytkownik mógł nazwać swojego gracza i poźniej w trakcie rozgrywki miałaby się ta nazwa wyświetlać. Np.
Piotr Twoje karty to ...
Jest na początku polecenie, by gracze podali swoje nazwy w grze i stworzyłam tablicę, która, by tą nazwę miała przechowywać dla konkretnego indeksu, tylko nie wiem jak umieścić polecenie czytania nazwy w funkcji graj, by nazwa mi w pętli się wyświetlała.
C/C++
#include "oczko.h"
#include <iostream>
using namespace std;
Oczko::Oczko()
{
    t = new Talia( 52 );
    t->wartosciOczko();
    cout << "Podaj ilosc graczy: ";
    cin >> liczba_graczy;
    string nazwa_gracza;
    string * tablica_nazw;
    tablica_nazw = new string[ liczba_graczy ];
   
    for( int i = 0; i < liczba_graczy; ++i )
    {
        g[ i ] = new Gracz;
        c[ i ] = new Czlowiek;
        cout << "Podaj nazwe swojego gracza: ";
        cin >> nazwa_gracza;
        tablica_nazw[ i ] = nazwa_gracza;
       
    }
   
    //g[0]=new Gracz;
    //g[1]=new Czlowiek;
}

Oczko::~Oczko()
{
    delete t;
    for( int i = 0; i < liczba_graczy; ++i )
    { //if(g[i]!=NULL)
        delete g[ i ];
        delete c[ i ];
        // delete tablica_nazw[i];
    }
}

void Oczko::graj()
{
    t->tasuj();
   
   
    bool warunek;
    do
    {
       
        warunek = false;
        for( int i = 0; i < liczba_graczy; ++i )
        {
           
            if( /*g[i]!=NULL &&*/ g[ i ]->czyNastepna() )
            {
                warunek = true;
                g[ i ]->dodajKarte( t->dajKarte() );
            }
        }
    } while( warunek );
   
    for( int i = 0; i < liczba_graczy; ++i )
    {
        //if(g[i]!=NULL)
       
        g[ i ]->wyswietl();
        cout << "Punkty: " << g[ i ]->policzPunkty() << endl;
       
    }
   
}
P-160251
michal11
» 2017-04-18 18:45:24
Pokaż nagłówek klasy Gracz i Czlowiek (+ ew. jakieś klasy bazowe).
P-160252
Alex_Cooperek
Temat założony przez niniejszego użytkownika
» 2017-04-18 18:47:14
Nagłówek klasy gracz
C/C++
#ifndef GRACZ_H
#define GRACZ_H
#include "karta.h"
#include <vector>

class Gracz
{
    vector < Karta *> tablica;
    string nazwa_gracza;
public:
    Gracz();
   
    string dodaj_nazwe();
    void dodajKarte( Karta * k );
    void wyswietl();
    int policzPunkty();
    virtual bool czyNastepna();
};

#endif // GRACZ_H

Człowiek
C/C++
#ifndef CZLOWIEK_H
#define CZLOWIEK_H
#include "gracz.h"

class Czlowiek
    : public Gracz
{
public:
    Czlowiek();
    bool czyNastepna();
};

#endif // CZLOWIEK_H
P-160253
michal11
» 2017-04-18 19:18:17
Dlaczego funkcja dodaj_nazwe zwraca stringa?

Dodaj w klasie Gracz metodę
void ustawNazwe( const std::string & nazwa );
 w której będziesz ustawiała nazwę dla tego gracza i wywołuj ją w konstruktorze klasy Oczko na rzecz obiektu
g[ i ]
 zaraz po wczytaniu nazwy.
P-160255
« 1 » 2 3
  Strona 1 z 3 Następna strona