piechus Napisano Styczeń 17, 2016 Zgłoś Share Napisano Styczeń 17, 2016 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) Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.