Skocz do zawartości
Zaloguj się, aby obserwować  
piechus

Problem z pracą zaliczeniową

Polecane posty

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)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

×