Napisałem program, który owszem, działa. Nie jestem jednak pewien czy jest on dobry od strony stylistycznej. Może robię jakieś karygodne błędy. Nie mam nikogo kto mógłby podpowiedzieć jakie robię błędy albo co robię dobrze. Może piszę w jakimś okropnym stylu? Może "tak się nie robi"?
#include <iostream>
#include <vector>
#include <chrono>
#include <thread>
#include <algorithm>
#include <random>
#include <time.h>
#include <cstdlib>
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine gen(seed);
void Tasuj(std::vector<int> & talia)
{
for (int i=0; i<24; i++) talia.push_back(i % 6);
std::shuffle(talia.begin(), talia.end(), gen);
}
void Rozdaj(std::vector<int> & talia, std::vector<int>& vec_a, std::vector<int>& vec_b)
{
for (int i=0; i<12; i++) vec_a.push_back(talia[i]);
for (int i=12; i<24; i++) vec_b.push_back(talia[i]);
}
void KartaNaStol(std::pair<std::vector<int>, std::vector<int>> & stol, std::vector<int> & vec_A, std::vector<int> & vec_B )
{
if ((!vec_A.empty()) && (!vec_B.empty())) {
stol.first.push_back(*(vec_A.end() - 1));
vec_A.pop_back();
stol.second.push_back(*(vec_B.end() - 1));
vec_B.pop_back();
}
}
void Przeloz(std::pair<std::vector<int>, std::vector<int>> & stol,std::vector<int> & vec, int ktowygral)
{
if (ktowygral)
{
while (!stol.first.empty())
{
vec.insert(vec.begin(), stol.first[0]);
stol.first.erase(stol.first.begin());
}
while (!stol.second.empty())
{
vec.insert(vec.begin(), stol.second[0]);
stol.second.erase(stol.second.begin());
}
}else{
while (!stol.second.empty())
{
vec.insert(vec.begin(), stol.second[0]);
stol.second.erase(stol.second.begin());
}
while (!stol.first.empty())
{
vec.insert(vec.begin(), stol.first[0]);
stol.first.erase(stol.first.begin());
}
}
}
void Porownaj(std::pair<std::vector<int>, std::vector<int>> & stol, std::vector<int> & vec_A, std::vector<int> & vec_B )
{
if ((!stol.first.empty()) && (!stol.second.empty()))
{
if ((*(stol.first.end() -1)) > (*(stol.second.end() -1))) {
Przeloz(stol, vec_A, 0);
}
if ((*(stol.first.end() -1)) < (*(stol.second.end() -1))) {
Przeloz(stol, vec_B, 1);
}
if ((stol.first.size() > 0)&&(stol.first.size() > 0))
if ((*(stol.first.end() -1)) == (*(stol.second.end() -1)))
{
KartaNaStol(stol, vec_A, vec_B);
}
}
}
int main() {
int przegrany{0};
uint64_t ile_A{0}, ile_B{0};
std::vector<int> talia;
std::vector<int> vec_A;
std::vector<int> vec_B;
std::pair<std::vector<int>, std::vector<int>> stol;
for (uint64_t rozdania = 0; rozdania < 1000000000; rozdania++)
{
Tasuj(talia);
Rozdaj(talia, vec_A, vec_B);
while (!vec_A.empty() && !vec_B.empty())
{
KartaNaStol(stol, vec_A, vec_B);
Porownaj(stol, vec_A, vec_B);
}
if (vec_A.empty()) przegrany=0;
if (vec_B.empty()) przegrany=1;
if (przegrany) ile_A++; else ile_B++;
if (rozdania % 60000 == 0) std::cout << "Gracz A wygral " << ile_A << " razy" << "\t" "Gracz B wygral " << ile_B << " razy\n";
talia.clear();
vec_A.clear();
vec_B.clear();
stol.first.clear();
stol.second.clear();
}
std::cout << ile_A << "\t" << ile_B << " Na koniec\n";
std::cin.get();
return 0;
}