No więc mam taki problem. Potrzebuje stworzyć program który będzie symulacją gry w wojnę. Program powinien działać w ten sposób że każda karta ma swoją wartość i wedle tej wartości są dokonywane porównania. Doszedłem do takiego momentu i nie wiem co z tym teraz zrobić ; (. A dokładniej dzieję się teraz tak że za każdym razem wygrywa gracz pierwszy bądź drugi, nie ma w ogóle takiej sytuacji że na przemian któryś z graczy zgarnia karty. Jestem początkujący wiec bądźcie wyrozumiali. Na początek wystarczy żeby wyświetlało tylko który aktualnie gracz wygrywa i program doszedł do samego końca. Z wyświetlaniem to już sobie później poradzę. Chodzi o fakt żeby program działał poprawnie. Przepraszam za mało czytelny kod.
#include <cstdlib>
#include <iostream>
using namespace std;
struct Karta
{
char *figura;
char *kolor;
int war;
};
struct lista
{
Karta karty;
lista *nastepna;
};
void zlozTalie(Karta *wTalia, char *wFigura[],char *wKolor[])
{
for(int i=0; i<52; i++)
{
wTalia[i].figura=wFigura[i%13];
wTalia[i].war= i%13;
wTalia[i].kolor=wKolor[i/13];
}
}
void tasuj (Karta *wTalia)
{
for(int i=0; i<52;i++)
{
int j=rand()%52;
Karta t=wTalia[i];
wTalia[i]=wTalia[j];
wTalia[j]=t;
}
}
void wyswietl(Karta *wTalia)
{
for(int i=0 ; i<52 ; i++)
{
cout<<wTalia[i].figura<<"\t";
if(strcmp(wTalia[i].kolor,"trefl")==0) cout<<char(5);
if(strcmp(wTalia[i].kolor,"karo")==0) cout<<char(4);
if(strcmp(wTalia[i].kolor,"kier")==0) cout<<char(3);
if(strcmp(wTalia[i].kolor,"pik")==0) cout<<char(6);
cout<<endl;
}
}
void wyswietl_karte(Karta do_wyswietlenia)
{
cout <<do_wyswietlenia.figura;
if(strcmp(do_wyswietlenia.kolor,"trefl")==0) cout<<char(5);
if(strcmp(do_wyswietlenia.kolor,"karo")==0) cout<<char(4);
if(strcmp(do_wyswietlenia.kolor,"kier")==0) cout<<char(3);
if(strcmp(do_wyswietlenia.kolor,"pik")==0) cout<<char(6);
cout<<endl;
}
void rozdaj (lista* gracz1, lista* gracz2, Karta talia[], lista* & koniec1, lista* & koniec2)
{
lista* tmp1 = gracz1;
lista* tmp2 = gracz2;
tmp1 -> karty = talia[0];
tmp2 -> karty = talia[1];
for (int i = 2; i < 52; i++)
{
if (i%2 == 0)
{
tmp1 -> nastepna = new lista;
tmp1 = tmp1 -> nastepna;
tmp1 -> karty = talia[i];
}
else
{
tmp2 -> nastepna = new lista;
tmp2 = tmp2 -> nastepna;
tmp2 -> karty = talia[i];
}
}
koniec1 = tmp1;
koniec2 = tmp2;
koniec1 -> nastepna = 0;
koniec2 -> nastepna = 0;
}
void wyswietl_lista(lista* gracz)
{
lista* tmp = gracz;
while (tmp)
{
wyswietl_karte(tmp -> karty);
tmp = tmp -> nastepna;
}
}
void wojna (lista* & gracz1, lista* & gracz2, lista* & koniec1, lista* & koniec2)
{
lista* tmp1 = gracz1;
lista* tmp2 = gracz2;
tmp1 = tmp1 -> nastepna -> nastepna;
tmp2 = tmp2 -> nastepna -> nastepna;
while(tmp1 -> karty.war == tmp2 -> karty.war)
{
tmp1 = tmp1 -> nastepna -> nastepna;
tmp2 = tmp2 -> nastepna -> nastepna;
cout << "wojna";
}
if((tmp1 -> karty.war) < (tmp2 -> karty.war))
{
koniec2 -> nastepna = gracz2;
gracz2 = tmp2 -> nastepna;
tmp2 -> nastepna = 0;
koniec1 -> nastepna = gracz1;
gracz1 = tmp1 -> nastepna;
tmp1 -> nastepna = 0;
cout << "gracz 2 wojna";
}
else
{
koniec1 -> nastepna = gracz1;
gracz1 = tmp1 -> nastepna;
tmp1 -> nastepna = 0;
koniec2 -> nastepna = gracz2;
gracz2 = tmp2 -> nastepna;
tmp2 -> nastepna = 0;
cout << "gracz 1 wojna";
}
while(koniec1 -> nastepna)
koniec1 = koniec1 -> nastepna;
while(koniec2 -> nastepna)
koniec2 = koniec2 -> nastepna;
}
int main(int argc, char *argv[])
{
Karta talia[52];
char *figura[13]=
{"2","3","4","5","6","7","8","9","10","walet","dama","krol","as"};
char *kolor[4]={"trefl","karo","kier","pik"};
srand(time(0));
zlozTalie(talia, figura, kolor);
//cout<<"talia ulozona"<<endl;
//wyswietl(talia);
tasuj(talia);
//cout<<"talia potasowana"<<endl;
lista *gracz1 = new lista;
lista *gracz2 = new lista;
lista *koniec1, *koniec2;
rozdaj (gracz1, gracz2, talia, koniec1, koniec2);
//wyswietl_lista(gracz1);
cout << endl << endl;
//wyswietl_lista(gracz2);
lista* tmp1 = gracz1;
lista* tmp2 = gracz2;
while(tmp1 !=0 && tmp2 !=0 )
{
if((tmp1 -> karty.war) == (tmp2 -> karty.war))
wojna(gracz1, gracz2, koniec1, koniec2);
else if((tmp1 -> karty.war) < (tmp2 -> karty.war))
{
koniec2 -> nastepna = tmp1;
koniec2 = koniec2 -> nastepna;
koniec2 -> nastepna = tmp2;
koniec2 = koniec2 -> nastepna;
koniec2 -> nastepna = 0;
cout << "gracz 2" << endl;
}
else
{
koniec1 -> nastepna = tmp2;
koniec1 = koniec1 -> nastepna;
koniec1 -> nastepna = tmp1;
koniec1 = koniec1 -> nastepna;
koniec1 -> nastepna = 0;
cout << "gracz 1" << endl;
}
koniec1 -> nastepna = tmp2;
koniec1 = koniec1 -> nastepna;
koniec1 -> nastepna = tmp1;
koniec1 = koniec1 -> nastepna;
koniec1 -> nastepna = 0;
}
cout << endl << endl;
//wyswietl_lista(gracz1);
cout << endl << endl;
system("PAUSE");
return EXIT_SUCCESS;
}