Witam,
Mam problem przy kompresji programu z macOS do Windows 10. Gra karciana w wojnę.
Otóż napisałem program na laptopie i wszystko działa program rozdaje karty między graczem a komputerem po 26 kart. Przy skopiowaniu kodu i kilku małych zmianach bibliotek oraz poprawieniu funkcji Sleep na windows program rozdaje nie równo karty, tj. 34 dla gracza reszta dla komputera. Szukam rozwiązania już dobre pare dni i nie potrafię zaradzić problemowi.
Kod z macOS wrzucam poniżej, proszę o pomoc w znalezieniu problemu gdyż jest to mój projekt na zaliczenie 1 semestru z C++
=============
#include <iostream>
#include <cstdlib> //losowanie
#include <ctime> //losowanie
#include <unistd.h> //zasypianie na jakis czas komputera
using namespace std;
int gracz[4][13];
int komputer[4][13];
int licznik; //liczy ile Ci jeszcze zostalo kart
int x; //do caseow
int y; //case
int k; //losowanie kart
string imie; //imie gracza
int main()
{
cout<<"###############################################################"<<endl;
cout<<"W pierwszej kolejnosci prosze podac twoje imie: ";
cin>>imie;
cout<<"###############################################################"<<endl<<endl<<endl;
cout<<"GRA KARCIANA WOJNA"<<endl;
cout<<"Autor: Adrian Adamus"<<endl<<endl;
start: //punkt powrotu po zakonczonym casie
cout<<" MENU GLOWNE"<<endl;
cout<<"####################"<<endl;
cout<<"1. Graj vs komputer"<<endl;
cout<<" 2. Jak grac"<<endl;
cout<<" 3. Wyjdz z gry"<<endl;
cout<<"####################"<<endl<<endl;
cout<<"Wybierz opcje: ";
cin>>x;
switch(x)
{
case 2:cout<<endl<<"Przetasowaną talię kart dzieli się na dwie części, rozdaje graczom i kładzie koszulkami do góry. Pierwszy i drugi zawodnik równocześnie wykładają po jednej karcie i porównują ich wartości. Gracz mający kartę o wyższej wartości odbiera karty i kładzie je pod spodem swojej talii. Jeśli karty mają taką samą siłę (as na asa, król na króla, itp.), rozpętuje się wojna, należy odkryć po jednej karcie, położyć je koszulkami do góry na swoich kartach odkrytych, a następnie wyciągnąć następną kartę, położyć odkryte na zakrytych kartach i wówczas są one porównywane. Karta o wyższej wartości wygrywa, a zwycięzca wojny odbiera wszystkie karty wykorzystane w wojnie. Proces jest powtarzany, jeśli w okresie wojny znowu nie można wyłonić zwycięzcy. Wygrywa ten, kto pierwszy zabierze wszystkie karty przeciwnikowi. Gra potrafi być bardzo długa, gdyż zebrane karty są przekładane pod spód talii i mogą one później zostać wykorzystane wielokrotnie; partia może trwać nawet ponad kilka godzin, jednak zwykle znudzeni monotonią gracze rezygnują dużo wcześniej. Z tego względu zyskuje popularność głównie u najmłodszych, niezdolnych do zapamiętania reguł bardziej skomplikowanych rozgrywek."<<endl<<endl;
cout<<"1. cofnij do glownego menu"<<endl;
cout<<"Wybierz opcje: ";
cin>>x;
while(x!=1)
{
cout<<"Prosze podac odpowiednia opcje!"<<endl;
cout<<"Wybierz opcje: ";
cin>>x;
cout<<endl;
}
goto start;
break; //konczy on case 2
case 3:cout<<endl<<"Do widzenia!"<<endl<<endl; return 0; break;
default:cout<<endl<<"Wybierz opcje z podanych trzech!"<<endl<<endl; goto start; break;
case 1:cout<<endl<< "W puli sa 52 karty"<<endl;
cout<<"Trwa losowanie kart..."<<endl<<endl;
int h=26;
for(int e=1;e<=h;e++) //losowanie 26 kart dla komputera
{
losowanie:
int o;
srand((unsigned int)time(NULL));
o=rand()%13;
int p;
srand((unsigned int)time(NULL));
p=rand()%4;
komputer[p][o]=+1; //gdy karta sie powtorzy to losuje od nowa
if(komputer[p][o]==2)
{
komputer[p][o]=-1;
h--;
goto losowanie;
}
sleep(1);
}
for(int i=0;i<=3;i++) //dawanie reszty kart graczowi
for(int j=0;j<=12;j++)
if(komputer[i][j]==0)
gracz[i][j]=1;
h:
cout<<endl<<endl;
powojnie:
licznik=0; //RESETOWANIE licznika
for(int i=0;i<=3;i++) //licznik kart gracza
for(int j=0;j<=12;j++)
if(gracz[i][j]==1)
licznik=licznik+1;
if(licznik==52)
{
cout<<endl<<endl;
cout<<"#############################"<<endl;
cout<<imie<<" wygrywa gre wojna!"<<endl;
cout<<"#############################"<<endl;
goto start;
}
if(licznik==0)
{
cout<<endl<<endl;
cout<<"###########################"<<endl;
cout<<"Komputer wygrywa gre wojna!"<<endl;
cout<<"###########################"<<endl;
goto start;
}
for(int h=0;h<=0;h++)
{
cout<<"############################"<<endl;
cout<<"Posiadasz "<<licznik<<" Kart"<<endl;
cout<<"----------------------------"<<endl;
cout<<"Wcisnij 1 aby rzucic karte"<<endl;
cout<<"Wcisnij 2 aby wrocic do menu"<<endl;
cout<<"----------------------------"<<endl;
cout<<"Wybierz opcje z podanych dwoch: ";
cin>>y;
cout<<"############################"<<endl<<endl;
//gdy nie bedzie z zakresu to wyskakuje blad i masz podac jeszcze raz
while(y!=1 && y!=2)
{
cout<<"Prosze podac odpowiednia opcje!"<<endl;
cout<<"Wybierz opcje z podanych dwoch: ";
cin>>y;
}
//opuszczenie gry
if(y==2)
{
cout<<"Gracz opuszcza gre"<<endl;
cout<<"Wygrywa komputer!"<<endl<<endl;
goto start;
}
//gra
if(y==1)
{
//losowanie karty ktora wyklada gracz
r:
int q;
srand((unsigned int)time(NULL));
q=rand()%13;
int w;
srand((unsigned int)time(NULL));
w=rand()%4;
if(gracz[w][q]==0)
goto r;
else
if(q==0)
cout<<imie<<" wylozyl na stol 2";
else if(q==1)
cout<<imie<<" wylozyl na stol 3";
else if(q==2)
cout<<imie<<" wylozyl na stol 4";
else if(q==3)
cout<<imie<<" wylozyl na stol 5";
else if(q==4)
cout<<imie<<" wylozyl na stol 6";
else if(q==5)
cout<<imie<<" wylozyl na stol 7";
else if(q==6)
cout<<imie<<" wylozyl na stol 8";
else if(q==7)
cout<<imie<<" wylozyl na stol 9";
else if(q==8)
cout<<imie<<" wylozyl na stol 10";
else if(q==9)
cout<<imie<<" wylozyl na stol walet";
else if(q==10)
cout<<imie<<" wylozyl na stol dama";
else if(q==11)
cout<<imie<<" wylozyl na stol krol";
else if(q==12)
cout<<imie<<" wylozyl na stol As";
cout<<endl<<endl<<"Czekanie na ruch komputera..."<<endl<<endl;
t:
int n;
srand((unsigned int)time(NULL));
n=rand()%13;
int m;
srand((unsigned int)time(NULL));
m=rand()%4;
if(komputer[m][n]==0)
goto t;
else
if(n==0)
cout<<"Komputer wylozyl na stol 2";
else if(n==1)
cout<<"Komputer wylozyl na stol 3";
else if(n==2)
cout<<"Komputer wylozyl na stol 4";
else if(n==3)
cout<<"Komputer wylozyl na stol 5";
else if(n==4)
cout<<"Komputer wylozyl na stol 6";
else if(n==5)
cout<<"Komputer wylozyl na stol 7";
else if(n==6)
cout<<"Komputer wylozyl na stol 8";
else if(n==7)
cout<<"Komputer wylozyl na stol 9";
else if(n==8)
cout<<"Komputer wylozyl na stol 10";
else if(n==9)
cout<<"Komputer wylozyl na stol walet";
else if(n==10)
cout<<"Komputer wylozyl na stol dama";
else if(n==11)
cout<<"Komputer wylozyl na stol krol";
else if(n==12)
cout<<"Komputer wylozyl na stol As";
cout<<endl<<endl;
if(q>n)//wygrywa gracz
{
cout<<"wygrywa "<<imie<<"!"<<endl;
komputer[m][n]=0;
gracz[m][n]=1;
//sprawdzanie wygranej gracza
if(licznik==52)
{
cout<<endl<<endl;
cout<<"#############################"<<endl;
cout<<imie<<" wygrywa gre wojna!"<<endl;
cout<<"#############################"<<endl;
goto start;
}
goto h;
}
if(q<n)//wygrywa komputer
{
cout<<"wygrywa komputer!"<<endl;
gracz[w][q]=0;
komputer[w][q]=1;
//sprawdzanie wygranej komputera
if(licznik==0)
{
cout<<endl<<endl;
cout<<"###########################"<<endl;
cout<<"Komputer wygrywa gre wojna!"<<endl;
cout<<"###########################"<<endl;
goto start;
}
goto h;
}
if(q==n) //wojna
{
cout<<"\t \t \t \t \t WOJNA!"<<endl<<"Trwa wystawianie zakrytych 2 kart oraz 3 odkrytej..."<<endl<<endl;
for(int q=0;q<=2;q++)
{
gracz:
//losowanie kart gracza
xd:
int v;
srand((unsigned int)time(NULL));
v=rand()%13;
int b;
srand((unsigned int)time(NULL));
b=rand()%4;
//jesli nie ma karty to losuje jeszcze raz
if(gracz[b][v]==0 || gracz[b][v]==2)
goto xd;
gracz[b][v]=2;
sleep(0.3);
komp:
//losowanie kart komputera
il:
int k;
srand((unsigned int)time(NULL));
k=rand()%13;
int l;
srand((unsigned int)time(NULL));
l=rand()%4;
//jesli nie ma karty to losuje jeszcze raz
if(komputer[l][k]==0 || komputer[l][k]==2)
goto il;
komputer[l][k]=2;
//sprawdzanie czy kazdy wylosowal po 3 karty
if(q==2)
{
int sprawdzaniekomp=0; //licznik komputera ile ma kart wojennych
int sprawdzaniegra=0; //licznik gracza ile ma kart wojennych
for(int i=0;i<=3;i++) //sprawdzanie komputera
for(int j=0;j<=12;j++)
if(komputer[i][j]==2)
sprawdzaniekomp++;
for(int i=0;i<=3;i++) //sprawdzanie gracza
for(int j=0;j<=12;j++)
if(komputer[i][j]==2)
sprawdzaniegra++;
if(sprawdzaniekomp!=3) //jezeli nie ma komputer do losuje jeszcze raz
goto komp;
if(sprawdzaniegra!=3) //jezeli nie ma gracz to losuje jeszcze raz
goto gracz;
}
//zakonczenie sprawdzania czy kazy wylosowal po 3 karty
//zapobieganie kolejnej wojny
if(q==2)
{
if(k==v)
{
komputer[l][k]-=2;
gracz[b][v]-=2;
goto il;
}
}
//koniec zapobiegania wojny
if(q==2)
{
if(v==0)
cout<<imie<<" wylozyl na stol 2";
else if(v==1)
cout<<imie<<" wylozyl na stol 3";
else if(v==2)
cout<<imie<<" wylozyl na stol 4";
else if(v==3)
cout<<imie<<" wylozyl na stol 5";
else if(v==4)
cout<<imie<<" wylozyl na stol 6";
else if(v==5)
cout<<imie<<" wylozyl na stol 7";
else if(v==6)
cout<<imie<<" wylozyl na stol 8";
else if(v==7)
cout<<imie<<" wylozyl na stol 9";
else if(v==8)
cout<<imie<<" wylozyl na stol 10";
else if(v==9)
cout<<imie<<" wylozyl na stol walet";
else if(v==10)
cout<<imie<<" wylozyl na stol dama";
else if(v==11)
cout<<imie<<" wylozyl na stol krol";
else if(v==12)
cout<<imie<<" wylozyl na stol As";
cout<<endl<<endl;
if(k==0)
cout<<"Komputer wylozyl na stol 2";
else if(k==1)
cout<<"Komputer wylozyl na stol 3";
else if(k==2)
cout<<"Komputer wylozyl na stol 4";
else if(k==3)
cout<<"Komputer wylozyl na stol 5";
else if(k==4)
cout<<"Komputer wylozyl na stol 6";
else if(k==5)
cout<<"Komputer wylozyl na stol 7";
else if(k==6)
cout<<"Komputer wylozyl na stol 8";
else if(k==7)
cout<<"Komputer wylozyl na stol 9";
else if(k==8)
cout<<"Komputer wylozyl na stol 10";
else if(k==9)
cout<<"Komputer wylozyl na stol walet";
else if(k==10)
cout<<"Komputer wylozyl na stol dama";
else if(k==11)
cout<<"Komputer wylozyl na stol krol";
else if(k==12)
cout<<"Komputer wylozyl na stol As";
cout<<endl<<endl;
//wygrywa komputer
if(k>v)
{
cout<<"Wojne wygrywa komputer!"<<endl;
for(int i=0;i<=3;i++) //zamiana z 2 na 1
for(int j=0;j<=12;j++)
if(komputer[i][j]==2)
komputer[i][j]=1;
for(int i=0;i<=3;i++) //zamiana z 2 na 1
for(int j=0;j<=12;j++)
if(gracz[i][j]==2)
{
komputer[i][j]=1;
gracz[i][j]=0;
}
goto powojnie;
}//zakonczenie if(k>v)
//wygrywa gracz
if(k<v)
{
cout<<"Wojne wygrywa "<<imie<<"!"<<endl;
for(int i=0;i<=3;i++) //zamiana z 2 na 1
for(int j=0;j<=12;j++)
if(gracz[i][j]==2)
gracz[i][j]=1;
for(int i=0;i<=3;i++) //zamiana z 2 na 1
for(int j=0;j<=12;j++)
if(komputer[i][j]==2)
{
gracz[i][j]=1;
komputer[i][j]=0;
}
goto powojnie;
}//zakonczenie if(k<v)
}//zakonczenie if==2
}//zakonczenie for (313 linijka)
}//zakonczenie wojny
}//zakonczenie gry
}//zakonczenie petli for (145 linijka)
break;
}//zakonczenie switcha
return 0;
}
/*
//wyswietlanie kart
cout<<"Karty komputera"<<endl;
for(int i=0;i<=3;i++) //wyswietlenie kart komputera
{
for(int j=0;j<=12;j++)
cout<<komputer[i][j]<<"\t";
cout<<endl;
}
cout<<"Karty gracza"<<endl;
for(int i=0;i<=3;i++) //wyswietlenie kart gracza
{
for(int j=0;j<=12;j++)
cout<<gracz[i][j]<<"\t";
cout<<endl;
}
*/