#include <cstdlib>
#include <iostream>
#include <string>
#include <windows.h>
#include <fstream>
#include <algorithm>
using namespace std;
enum WartoscReki
{
Para = 0x100,
DwiePary = 0x200,
Trojka = 0x300,
Strit = 0x400,
kolor = 0x500,
Full = 0x600,
Kareta = 0x700,
Poker = 0x800,
};
static const std::string uklad[] = {"Nic", "Para", "Dwie Pary", "Trojka", "Strit", "Kolor", "Full", "Kareta", "Poker"};
static const std::string kolory = "TKAP";
static const std::string wartosci = "234567891WDKA";
int str2karta(const std::string& k)
{
if(k.length() != 2)
return -1;
std::string::size_type wartosc = wartosci.find(k[0]);
std::string::size_type kolor = kolory.find(k[1]);
if(wartosc == std::string::npos || kolor == std::string::npos)
return -1;
return wartosc*4+kolor;
}
std::string karta2str(int k)
{
return std::string(1, wartosci[k/4]) + std::string(1, kolory[k%4]);
}
bool CzyPoker(int reka[5], int &ret)
{
for (int i = 0; i < 4; ++i)
{
if (reka[i] / 4 +1 != reka[i + 1] / 4 || reka[i] % 4 != reka[i + 1] % 4)
return false;
}
ret = reka[4] + Poker;
return true;
}
bool CzyKareta(int reka[5], int &ret)
{
for (int i = 0; i < 2; ++i)
{
if (reka[i] / 4 == reka [i+3] / 4)
{
ret = reka[i + 3] + Kareta;
return true;
}
}
return false;
}
bool CzyFull(int reka[5], int &ret)
{
for (int i = 0; i < 2; ++i)
{
if (reka[i] / 4 == reka [i+1] / 4 && reka [i+2] / 4 == reka [i+1] / 4 | reka[i+3] / 4 == reka [i+4] / 4)
{
ret = reka[i+4] + Full;
return true;
}
}
return false;
}
bool CzyKolor(int reka[5], int &ret)
{
for (int i = 0; i < 4; ++i)
{
if (reka[i] % 4 != reka[i + 1] % 4)
return false;
}
ret = reka[4] + kolor;
return true;
}
bool CzyStrit(int reka[5], int &ret)
{
for (int i = 0; i < 4; ++i)
{
if (reka[i] / 4 +1 != reka[i + 1] / 4)
return false;
}
ret = reka[4] + Strit;
return true;
}
bool CzyTrojka(int reka[5], int &ret)
{
for (int i = 0; i < 2; ++i)
{
if (reka[i+2] / 4 == reka [i+3] / 4 && reka[i+2] / 4 == reka [i+4] / 4)
{
ret = reka[i+3] + Trojka;
return true;
}
}
return false;
}
bool CzyDwiePary(int reka[5], int &ret)
{
for (int i = 0; i < 2; ++i)
{
if (reka[i] / 4 == reka [i+1] / 4 | reka[i+2] / 4 == reka [i+3] || reka[i+1] / 4 == reka [i+2] / 4 | reka[i+3] / 4 == reka [i+4])
{
ret = reka[i+4] + DwiePary;
return true;
}
}
return false;
}
bool CzyPara(int reka[5], int &ret)
{
for (int i = 0; i < 2; ++i)
{
if (reka[i] / 4 == reka [i+1] / 4 || reka[i+3] / 4 == reka [i+4] / 4 )
{
ret = reka[i+4] + Para;
return true;
}
}
return false;
}
int WartoscReki(int reka[5])
{
int ret = 0;
if (CzyPoker(reka, ret))
return ret;
if (CzyKareta(reka, ret))
return ret;
if (CzyFull(reka, ret))
return ret;
if (CzyKolor(reka, ret))
return ret;
if (CzyStrit(reka, ret))
return ret;
if (CzyTrojka(reka, ret))
return ret;
if (CzyDwiePary(reka, ret))
return ret;
if (CzyPara(reka, ret))
return ret;
return reka[4];
}
int main(){
std::cout<<"================================================================"<<std::endl;
std::cout<<"POKER."<<std::endl;
std::cout<<"Program do analizy ukladow kart."<<std::endl;
std::cout<<"================================================================"<<std::endl;
system( "pause" );
system( "cls" );
std::cout<<"================================================================"<<std::endl;
std::cout<<"Aby sprawdzic uklad pokerowy wprowadz karty do pliku"<<std::endl;
std::cout<<"Gracz 1.txt i Gracz 2.txt"<<std::endl;
std::cout<<"================================================================"<<std::endl;
system( "pause" );
system( "cls" );
std::cout<<"================================================================"<<std::endl;
std::cout<<"Rodzaje kart"<<std::endl;
std::cout <<"==============================================================="<<std::endl;
std::cout<<"1 - Dziesiatka 2 - Dwojka 3 - Trojka ... W - Walet ...\n"<<std::endl;
std::cout<<"================================================================"<<std::endl;
std::cout<<"Rodzaje kolorow\n"<<std::endl;
std::cout<<"================================================================"<<std::endl;
std::cout<<"P - Pik K - Kier T - Trefl A - Karo \n"<<std::endl;
std::cout<<"================================================================"<<std::endl;
system( "pause" );
system( "cls" );
{
{
std::ifstream inf;
inf.open("Gracz 1.txt");
std::cout<<"Karty Gracza 1"<<std::endl;
if(!inf)
{
std::cout<<"Nie mozna otworzyc pliku: "<<std::endl;
return 1;
}
std::string strkarta;
int karty[5];
int i = 0;
while(inf>>strkarta && i<5)
{
karty[i] = str2karta(strkarta);
if(karty[i]<0)
{
std::cout<<"Nieprawidlowa karta: "<<strkarta<<std::endl;
return 1;
}
++i;
}
if(i != 5)
{
std::cout<<"Do obliczenia ukladu potrzeba 5 kart. Popraw plik Gracz 1.txt i sprobuj ponownie."<<std::endl;
return 1;
}
std::sort(karty, karty+5);
int ret = WartoscReki(karty);
std::cout<< "Z wczytanych kart: ";
std::for_each(karty, karty+5, [](int k){std::cout<<karta2str(k)<<" ";});
std::cout<<" Mozna zbudowac " << uklad[ret>>8] << " Najwyzsza karta: " << karta2str(ret&0xFF)<<std::endl; ;
}
system( "pause" );
system( "cls" );
{
std::ifstream inf;
inf.open("Gracz 2.txt");
std::cout<<"Karty Gracza 2"<<std::endl;
if(!inf)
{
std::cout<<"Nie mozna otworzyc pliku: "<<std::endl;
return 1;
}
std::string strkarta;
int karty[5];
int i = 0;
while(inf>>strkarta && i<5)
{
karty[i] = str2karta(strkarta);
if(karty[i]<0)
{
std::cout<<"Nieprawidlowa karta: "<<strkarta<<std::endl;
return 1;
}
++i;
}
if(i != 5)
{
std::cout<<"Do obliczenia ukladu potrzeba 5 kart. Popraw plik Gracz 2.txt i sprobuj ponownie."<<std::endl;
return 1;
}
std::sort(karty, karty+5);
int ret = WartoscReki(karty);
std::cout<< "Z wczytanych kart: ";
std::for_each(karty, karty+5, [](int k){std::cout<<karta2str(k)<<" ";});
std::cout<<" Mozna zbudowac " << uklad[ret>>8] << " Najwyzsza karta: " << karta2str(ret&0xFF)<<std::endl;
return 0;
}
}
}
Oto kod mojego programu pokerowego.
Kod jest kompletny i program działa.
Niestety mam problem bo nie wiem jak zapisać wyniki dla Gracza nr 1 i Gracza nr 2 i stwierdzić który gracz wygrał.
Proszę o pomoc.