[C++] Gra w oczko. Dodawanie graczy

Alex_Cooperek
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 4 paź 2016, o 12:52
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 1 raz

[C++] Gra w oczko. Dodawanie graczy

Post autor: Alex_Cooperek »

Dzień Dobry

Na zajęciach mamy za zadanie rozszerzyć, udoskonalić działanie gry w oczko. M.in. chciałabym dodać kolejnych graczy. I tu jest problem, że nie do końca wiem jak. Myślałam o tablicy obiektów, że użytkownik na początku napiszę liczbę graczy i tyle się utworzy. Tylko nie do końca rozumiem działanie programu, nie było mnie na jednych zajęciach. Czy mógłby ktoś spojrzeć na plik oczko.cpp i może w jakiś krótkich słowach wytłumaczy mi działanie, bo tego fragmentu nie rozumiem, nie wiem do końca jak działa.

oczko.cpp

Kod: Zaznacz cały

#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;
        }
    }
}
oczko.h

Kod: Zaznacz cały

#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
talia.h

Kod: Zaznacz cały

#ifndef TALIA_H
#define TALIA_H
#include "karta.h"
 
class Talia
{
    Karta **tablica;
    int ilosc;
    int indeks;
public:
    Talia(int ilosc=52);
    ~Talia();
    Karta *dajKarte();
    void wyswietl();
    void wartosciWojna();
    void wartosciOczko();
    void tasuj();
};
 
#endif // TALIA_H
talia.cpp

Kod: Zaznacz cały

#include "talia.h"
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
Talia::Talia(int ilosc):ilosc(ilosc),indeks(0)
{
    tablica=new Karta*[ilosc];
    for(int i=0;i<ilosc;++i)
        tablica[i]=new Karta(i%4,12-(i%52)/4,0);
 
}
 
Talia::~Talia()
{
    for(int i=0;i<ilosc;++i)
        if(tablica[i]!=NULL)
            delete tablica[i];
    delete []tablica;
}
 
Karta * Talia::dajKarte()
{
    return tablica[indeks++];
}
 
void Talia::wyswietl()
{
    for(int i=indeks;i<ilosc;++i)
        tablica[i]->wyswietl();
}
 
void Talia::wartosciWojna()
{
    for(int i=0;i<ilosc;++i)
        tablica[i]->ustawWartosc(tablica[i]->dajFigure());
}
 
void Talia::wartosciOczko()
{
    for(int i=0;i<ilosc;++i)
    {
        int numer=tablica[i]->dajFigure();
        tablica[i]->ustawWartosc(numer==12?11:(numer%9)+2);
    }
}
 
void Talia::tasuj()
{
    srand(time(NULL));
    random_shuffle(tablica,tablica+ilosc);
    /*for(int i=0;i<ilosc;++i)
    {
        int a=rand()%ilosc;
        int b=rand()%ilosc;
        //Karta * temp=tablica[a];
        //tablica[a]=tablica[b];
        //tablica[b]=temp;
        swap(tablica[a],tablica[b]);
    }*/
}
Gouranga
Użytkownik
Użytkownik
Posty: 1592
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[C++] Gra w oczko. Dodawanie graczy

Post autor: Gouranga »

Kod: Zaznacz cały

for(int i=0;i<5;++i)
    {
        g[i]=NULL;
    }
    g[0]=new Gracz;
    g[1]=new Czlowiek;
tu masz ewidentnie to czego szukasz, tablica z 5 graczami wypełniona NULLami i masz w niej tylko dwa obiekty.
Alex_Cooperek
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 4 paź 2016, o 12:52
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 1 raz

[C++] Gra w oczko. Dodawanie graczy

Post autor: Alex_Cooperek »

O rzeczywiście, zmodyfikowałam to. Chciałabym również dodać nazwy graczom, tylko cały czas wyskakująmi błędy, a nie wiem dlaczego
gracz.h

Kod: Zaznacz cały

#ifndef GRACZ_H
#define GRACZ_H
#include "karta.h"
#include <vector>

class Gracz
{
    vector<Karta *> tablica;
    string nazwa_gracza;
public:
    Gracz();
    Gracz(const string &nazwa):nazwa_gracza(nazwa){}
    void dodaj_nazwe(const string &nazwa);

    //void dodaj_nazwe(const string &nazwa);
    void dodajKarte(Karta* k);
    void wyswietl();
    int policzPunkty();
    virtual bool czyNastepna();

};

#endif // GRACZ_H
gracz.cpp

Kod: Zaznacz cały

#include "gracz.h"
using namespace std;

Gracz::Gracz();
Gracz::Gracz(const string &nazwa):nazwa_gracza(nazwa){}
void Gracz::dodaj_nazwe(const string &nazwa)
{
   nazwa_gracza = nazwa;
}



void Gracz::dodajKarte(Karta *k)
{
    tablica.push_back(k);
}

void Gracz::wyswietl()
{
    //for(int i=0;i<tablica.size();++i)
    for(auto k:tablica)
        k->wyswietl();
}

int Gracz::policzPunkty()
{
    int punkty=0;
    for(Karta *k:tablica)
        punkty+=k->dajWartosc();
    return punkty;

}

bool Gracz::czyNastepna()
{
    if(policzPunkty()<=15)
        return true;
    else
        return false;
}

I takie trzy błędy mi wyskakują

Kod: Zaznacz cały

błąd: declaration of 'Gracz::Gracz()' outside of class is not definition [-fpermissive]
 Gracz::Gracz();

Kod: Zaznacz cały

 błąd: redefinition of 'Gracz::Gracz(const string&)'
 Gracz::Gracz(const string &nazwa):nazwa_gracza(nazwa){}

Kod: Zaznacz cały

 błąd: 'Gracz::Gracz(const string&)' previously defined here
     Gracz(const string &nazwa):nazwa_gracza(nazwa){}
     ^
Ostatnio zmieniony 19 kwie 2017, o 15:25 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Gouranga
Użytkownik
Użytkownik
Posty: 1592
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[C++] Gra w oczko. Dodawanie graczy

Post autor: Gouranga »

no ale w treści błędów masz wprost napisane co nie gra, popraw to na początek.
Alex_Cooperek
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 4 paź 2016, o 12:52
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 1 raz

[C++] Gra w oczko. Dodawanie graczy

Post autor: Alex_Cooperek »

Znaczy, teoretycznie wiem co oznaczają błędy, tylko nie wiem jak to naprawić
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Gra w oczko. Dodawanie graczy

Post autor: kalwi »

to na początek powiedz co robi wg Ciebie ta linijka w pliku .cpp:

Kod: Zaznacz cały

 Gracz::Gracz();
ODPOWIEDZ