Skocz do zawartości


Problem z pracą zaliczeniową


Brak odpowiedzi do tego tematu

#1 piechus

    Nowy na forum

  • Użytkownicy
  • 1 Postów:

Napisano nie, 17 sty 2016 - 17:38

Witam mam problem z pracą zaliczeniową. W programie chodzi o to że program wyciaga karty z plikówtekstowych i mówi jakie wychodzą układy.
Na końcu program porównuje który układ pokerowy jest mocniejszy gracza nr 1 czy gracza nr 2.
#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", "2pary", "", "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)
{
// Poker
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)
{
// Kareta
for (int i = 0; i < 2; ++i)
{
if (reka[i] / 4 == reka [i+3] / 4)
{
ret = reka[i + 3] + Kareta;
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(int argc, char** argv)
{
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 zmodyfikuj pliki"<<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");
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 lub 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; ;
}
system( "pause" );
system( "cls" );
{

std::ifstream inf;
inf.open("Gracz 2.txt");
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 lub 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;

system( "pause" );
system( "cls" );


return 0;
}
}
}


Problem polega na tym że nie wiem jak napisać by program porównywał który układ pokerowy jest mocniejszy Gracza nr 1 czy Gracza nr 2.
Swoja drogą jak ktoś ma koncepcje jak zapisać algorytm sortujący dla pozostałych układów był bym wdzięczny.
Ps. Programu nie pisałem sam pomógł mi kolega z politechniki (sam jestem na studiach zaocznych)