Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

[C++] Gra w oczko. Dodawanie graczy

$
0
0

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

#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

#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 

#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

#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]);
    }*/
}

gracz.h

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

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

#endif // GRACZ_H

gracz.cpp

#include "gracz.h"

Gracz::Gracz()
{

}

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;
}

czlowiek.h

#ifndef CZLOWIEK_H
#define CZLOWIEK_H
#include "gracz.h"

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

#endif // CZLOWIEK_H

czlowiek.cpp

#include "czlowiek.h"
#include <iostream>
using namespace std;
Czlowiek::Czlowiek()
{

}

bool Czlowiek::czyNastepna()
{
    cout<<"Twoje karty to:"<<endl;
    wyswietl();

    char wybor;
    do
    {
        cout<<"Czy chcesz następną kartę?[T/N]";
        cin>>wybor;
        if(wybor=='T' || wybor=='t')
            return true;
        else if(wybor=='N' || wybor=='n')
            return false;
        cout<<"wybrano nieprawidlowa opcje"<<endl;
        cin.sync();
        cin.ignore();
    }while(wybor);


}

main.cpp

#include <iostream>
#include <string>
#include "oczko.h"
using namespace std;


int main()
{
    Oczko o;
    o.graj();
    return 0;
}

 


Viewing all articles
Browse latest Browse all 21942

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra