Sztuczna inteligencja w grze karcianej oczko

0

Witam. Mam następujący problem. Chcę aby pogram wyświetlał mi sumę kart krupiera oraz sumę gracza, wyświetlana jest tylko suma gracza natomiast z pierwszą opcją mam mały problem.
Oto kod:

<strong> </strong> #include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <ctime>

using namespace std;

int x[4];
int zaklad;
int karta[]={2,3,4,5,6,7,8,9,10,2,3,4,11};
string karta_symbol[]={"dwojka","trojka","czworka","piatka","szostka","siodemka","osemka","dziewiatka","dziesiatka","walet","dama","krol","as"};
int oczko_ja;
int oczko_krupier;
char kolejna;
int zmienna;
bool wygrana;
bool remis;






void poczatek();
void player();
void krupier();
void podlicz();








void poczatek()
{
cout<<"Podaj wartosc zakladu ";
cin>>zaklad;
system("cls");
}



void player() //funkcja losujaca karty dla gracza
{
srand(int(time(NULL))); //czysci pamiec podreczna
cout<<"Twoje pierwsze dwie karty to: ";
x[0]=rand()%13+1; //losuje pierwsza karte
x[1]=rand()%13+1; //losuje druga karte
cout<<karta_symbol[x[0]]<<" ";
cout<<karta_symbol[x[1]]<<"\n";
oczko_ja+=karta[x[0]];//przypisuje do wyniku pierwsza karte
oczko_ja+=karta[x[1]];//przypisuje druga
zmienna=2; //2 poniewaz ma losowac kolejna karte, karty numer 0 i 1 zostaly juz wylosowane
cout<<"Kolejna karta? t/n "; //pyta sie czy gracz bierze kolejna karte
cin>>kolejna;



    cout<<"przegrales"<<endl;
while(kolejna=='t' & oczko_ja<=21 & zmienna<=4) //dopoki odpowiedz=tak i wynik nie jest wiekszy niz 21.
{ /*zmienna<=4 pilnuje zeby wylosowal jeszcze max. 3 karty*/

x[zmienna]=rand()%13+1; //losowanie
cout<<karta_symbol[x[zmienna]];
oczko_ja+=karta[x[zmienna]];// przypisanie do wyniku
cout<<" Twoja suma kart to: "<<oczko_ja;
zmienna++; //zmienna zwiksza sie o 1
cout<<"\n Kolejna karta? t/n ";
cin>>kolejna;
}
}


void krupier() //ta sama zasada co u player'a
{
srand(int(time(NULL)));
x[0]=rand()%13+1;
x[1]=rand()%13+1;
oczko_krupier+=karta[x[0]];
oczko_krupier+=karta[x[1]];
zmienna=2;
while(oczko_krupier<=17 & zmienna<=4) /*dopoki wynik krupiera jest mniejszy lub rowny 17; losuje dodatkowo max. 3 karty*/

{
x[zmienna]=rand()%13+1;
oczko_krupier+=karta[x[zmienna]];
cout<<"  ssss kart to: "<<oczko_krupier;

zmienna++;
}
}

void podlicz()
{
system("cls"); //dla zasady czysci ekran
//
if (oczko_ja>=21)
wygrana=false; //jesli wynik gracza wiekszy niz 21, nie wygral
else if (oczko_krupier>21)
wygrana=true; //jesli wynik krupiera wiekszy niz 21, wygral gracz
else if (oczko_ja==oczko_krupier)
remis=true; //jezeli wyniki sa takie same mamy remis
else if (oczko_krupier>oczko_ja)
wygrana=false; //jesli krupier ma wiecej niz gracz, gracz przegral
else if (oczko_ja>oczko_krupier)
wygrana=true; //jesli gracz ma wiecej niz krupier, gracz wygral
//
if (wygrana==true)
cout<<"Wygrales "<<zaklad;
else if (wygrana==false)
cout<<"Przegrales "<<zaklad;
else if (remis==true)
cout<<"Remis";
getch();
}
int main()
{

poczatek();
player();
krupier();
podlicz();
getch();
}

0

Wyciąg wypisywanie sumy kart dla gracza i dla krupiera poza while.

0

Próbowałam w ten sposób ale nadal nic. Program w ogóle nie wyświetla komunikatu suma kart krupiera

0
void krupier()
{
        srand(int(time(NULL)));
        x[0]=rand()%13+1;
        x[1]=rand()%13+1;
        oczko_krupier+=karta[x[0]];
        oczko_krupier+=karta[x[1]];
        zmienna=2;
        while(oczko_krupier<=17 & zmienna<=4) {
                x[zmienna]=rand()%13+1;
                oczko_krupier+=karta[x[zmienna]];
                zmienna++;
        }
        cout<<"Suma krupiera kart to:"<<oczko_krupier<<endl;
}

I tak samo dla playera, powinno wypisywać.

0

Oczy mi krawią jak widzę ten twój kod.

#include <iostream>
#include <vector>
#include <ctime>
#include <algorithm>
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 Deck
{
private:
    vector<Card> Deck;
public:
    void add(Card c)
    {
        Deck.push_back(c);
    }
    Card popCard()
    {
        int index = rand()%Deck.size();
        Card tmp = Deck[index];
        Deck[index] = Deck.back();
        Deck.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++) //karty 2-10
            {
                Card tmp(j+2,figury[j],kolory[i]);
                Deck.push_back(tmp);
            }
            for (int j=9; j<12; j++) //walet, dama, krol
            {
                Card tmp(j-7,figury[j],kolory[i]); //generujemy karte, tutaj ustalana jest jej "wartosc"
                Deck.push_back(tmp);
            }
            Card tmp(11,figury[12],kolory[i]); //as
            Deck.push_back(tmp);
        }
    }
    int getValue() //funkcja zwraca wartosc wszystkich kart w talii
    {
        int sum = 0;
        for (unsigned int i =0; i<Deck.size(); i++)
            sum+=Deck[i].getValue();
        return sum;
    }
    bool empty() const
    {
        return Deck.empty();
    }
};

int inputInteger()
{
    int returnValue;
    while (!(cin >> returnValue))
    {
        cin.clear();
        cin.ignore();
        cout << "Nalezy podac liczbe calkowita!\n";
    }
    return returnValue;
}

int main()
{
	srand(time(0));
    int numerOfPlayers = 0;
    cout<<"Ilu ma byc graczy?"<<endl;
    numerOfPlayers = inputInteger();
    Deck* players = new Deck[numerOfPlayers]; //bo każdy trzyma w ręcę swoją mini talię
    Deck Deck;
    Deck.createFull(); //generujemy cala talie
	/*
	wybranie karty z talii i danie jej do ręki i-temu graczowi to:
	players[i].add(Deck.popCard())
	policzenie ile ktoś ma w ręce to players[i].getValue()
	*/
    return 0;
}

Wyjdź od tego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1