szukanie zaawansowane
 [ Posty: 6 ] 
Autor Wiadomość
Kobieta Offline
PostNapisane: 17 kwi 2017, o 19:36 
Użytkownik

Posty: 9
Lokalizacja: Kraków
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#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]);
    }*/
}
Góra
Mężczyzna Offline
PostNapisane: 18 kwi 2017, o 23:52 
Użytkownik

Posty: 1471
Lokalizacja: Trójmiasto
Kod:
1
2
3
4
5
6
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.
Góra
Kobieta Offline
PostNapisane: 19 kwi 2017, o 14:40 
Użytkownik

Posty: 9
Lokalizacja: Kraków
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#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:
1
2
błąd: declaration of 'Gracz::Gracz()' outside of class is not definition [-fpermissive]
 Gracz::Gracz();


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


Kod:
1
2
3
 błąd: 'Gracz::Gracz(const string&)' previously defined here
     Gracz(const string &nazwa):nazwa_gracza(nazwa){}
     ^
Góra
Mężczyzna Offline
PostNapisane: 19 kwi 2017, o 16:11 
Użytkownik

Posty: 1471
Lokalizacja: Trójmiasto
no ale w treści błędów masz wprost napisane co nie gra, popraw to na początek.
Góra
Kobieta Offline
PostNapisane: 19 kwi 2017, o 20:07 
Użytkownik

Posty: 9
Lokalizacja: Kraków
Znaczy, teoretycznie wiem co oznaczają błędy, tylko nie wiem jak to naprawić
Góra
Mężczyzna Offline
PostNapisane: 20 kwi 2017, o 01:33 
Użytkownik

Posty: 1965
Lokalizacja: Warszawa
to na początek powiedz co robi wg Ciebie ta linijka w pliku .cpp:
Kod:
1
2
 Gracz::Gracz();
Góra
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 6 ] 


 Zobacz podobne tematy
 Tytuł tematu   Autor   Odpowiedzi 
 [Pascal] Dodawanie macierzy  Natasha  2
 [C++] Dodawanie własnych plików .h  mikkuexc  4
 Mnożenie (dodawanie) liczb binarnych.  Mariolos  4
 [C++] Dodawanie macierzy  Majka99  6
 [C++] macierze dodawanie, odejmowanie, mnożenie  chudiniii  15
 
Atom [Regulamin Forum] [Instrukcja LaTeX-a] [Poradnik] [F.A.Q.] [Reklama] [Kontakt]
Copyright (C) Karpatka.pl