我需要帮助我的代码,它是一个非常长的代码,它运行不正常,如果你想要测试它。但是假设用54张牌创建一张随机牌组。您可以通过我的代码判断它是如何工作的。它是法语,但你可以很容易地理解它。我需要知道什么不能使它运作良好,因为在创建文本文件时,它看起来像我希望它看起来,但有时每个值不是4张卡。另外,如果有一个更简单的方法来使用我拥有的相同库,那么让你知道的话真是太棒了:)谢谢!!!
#include <iostream>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <fstream>
using namespace std;
typedef struct carte
{
string nom;
int valeur;
string sorte;
bool donne=false;
}carte;
void Hasard(carte paquet2[])
{
srand (time(NULL));
int rnd;
int cmpt[14];
int first=1;
int last=14;
fstream fichierecriture("fichierpokerhasard.txt", ios::out);
if (!fichierecriture)
{
cout<<"Impossible d'ouvrir le fichier"<<endl;
}
for(int i=0;i<14;i++)
{
cmpt[i]=1;
}
for(int i=0;i<54;i++)
{
//Random de la carte
rnd = rand() % last + first;
//AS
if(rnd==1)
{
if(cmpt[0]==5)
{
first=2;
i--;
}
else
{
paquet2[i].nom="AS";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[0]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[0]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[0]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[0]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[0]++;
}
}
//2
if(rnd==2)
{
if(cmpt[1]==5)
{
if(first==2)
{
first=3;
}
i--;
}
else
{
paquet2[i].nom="2";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[1]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[1]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[1]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[1]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[1]++;
}
}
//3
if(rnd==3)
{
if(cmpt[2]==5)
{
if(first==3)
{
first=4;
}
i--;
}
else
{
paquet2[i].nom="3";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[2]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[2]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[2]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[2]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[2]++;
}
}
//4
if(rnd==4)
{
if(cmpt[3]==5)
{
if(first==4)
{
first=5;
}
i--;
}
else
{
paquet2[i].nom="4";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[3]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[3]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[3]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[3]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[3]++;
}
}
//5
if(rnd==5)
{
if(cmpt[4]==5)
{
if(first==5)
{
first=6;
}
i--;
}
else
{
paquet2[i].nom="5";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[4]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[4]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[4]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[4]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[4]++;
}
}
//6
if(rnd==6)
{
if(cmpt[5]==5)
{
if(first==6)
{
first=7;
}
i--;
}
else
{
paquet2[i].nom="6";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[5]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[5]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[5]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[5]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[5]++;
}
}
//7
if(rnd==7)
{
if(cmpt[6]==5)
{
if(first==7)
{
first=8;
}
i--;
}
else
{
paquet2[i].nom="7";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[6]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[6]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[6]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[6]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[6]++;
}
}
//8
if(rnd==8)
{
if(cmpt[7]==5)
{
if(first==8)
{
first=9;
}
i--;
}
else
{
paquet2[i].nom="8";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[7]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[7]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[7]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[7]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[7]++;
}
}
//9
if(rnd==9)
{
if(cmpt[8]==5)
{
if(first==9)
{
first=10;
}
i--;
}
else
{
paquet2[i].nom="9";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[8]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[8]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[8]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[8]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[8]++;
}
}
//10
if(rnd==10)
{
if(cmpt[9]==5)
{
if(first==10)
{
first=11;
}
i--;
}
else
{
paquet2[i].nom="10";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[9]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[9]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[9]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[9]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[9]++;
}
}
//Valet
if(rnd==11)
{
if(cmpt[10]==5)
{
if(first==11)
{
first=12;
}
i--;
}
else
{
paquet2[i].nom="V";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[10]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[10]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[10]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[10]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[10]++;
}
}
//Dame
if(rnd==12)
{
if(cmpt[11]==5)
{
if(first==12)
{
first=13;
}
i--;
}
else
{
paquet2[i].nom="D";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[11]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[11]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[11]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[11]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[11]++;
}
}
//Roi
if(rnd==13)
{
if(cmpt[12]==5)
{
if(first==13)
{
first=14;
}
i--;
}
else
{
paquet2[i].nom="R";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[12]==1)
{
paquet2[i].sorte="pique";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[12]==2)
{
paquet2[i].sorte="coeur";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[12]==3)
{
paquet2[i].sorte="trefle";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[12]==4)
{
paquet2[i].sorte="carreau";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[12]++;
}
}
//Joker
if(rnd==14)
{
if(cmpt[13]==3)
{
last=13;
}
if(i!=53)
{
i--;
}
else
{
paquet2[i].nom="JK";
fichierecriture<<paquet2[i].nom<<endl;
paquet2[i].valeur=rnd;
fichierecriture<<paquet2[i].valeur<<endl;
if(cmpt[13]==1)
{
paquet2[i].sorte="jk1";
fichierecriture<<paquet2[i].sorte<<endl;
}
if(cmpt[13]==2)
{
paquet2[i].sorte="jk2";
fichierecriture<<paquet2[i].sorte<<endl;
}
cmpt[13]++;
}
}
}
fichierecriture.close();
}
int main()
{
int choix;
carte paquet[54];
cout<<"1 - Jouer avec le hasard"<<endl;
cout<<"2 - Jouer selon le fichier texte"<<endl;
cout<<"3 - Quitter le jeu de poker"<<endl;
cout<<"Entrez votre choix : ";
cin>>choix;
switch (choix)
{
case 1:
Hasard(paquet);
break;
case 2:
break;
case 3:
cout<<"Fin du jeu de poker"<<endl;
break;
default:
cout << "Choix invalide" << endl << endl;
break;
}
}
答案 0 :(得分:0)
我正在尝试用于计算笛卡尔积的模板,而您的问题似乎是测试我的模板的好方法。我发布了我在这里的内容,所以你可以学习一些改进代码的方法,特别是将常用算法分解为可以重用的函数和一些较新的C ++库和样式。
此代码构造了一副52张卡片加上2个笑话,然后随机选择一张卡片并将其打印到stdout。
#include <vector>
#include <string>
#include <tuple>
#include <iostream>
#include <random>
namespace test
{
template<typename TN>
constexpr auto cartprod(long combo, TN list)
{
const auto size = list.size();
const auto& elem = list.at(combo % size);
return std::make_tuple(elem);
}
template<typename T0, typename ...T1toN>
constexpr auto cartprod(long combo, T0 list, T1toN... lists)
{
const auto size = list.size();
const auto& elem = list.at(combo % size);
combo /= size;
const auto next = cartprod(combo, lists...);
const auto first = std::make_tuple(elem);
return std::tuple_cat(first, next);
}
template<typename TN>
constexpr auto cartprod_size(TN list)
{
return list.size();
}
template<typename T0, typename ...T1toN>
constexpr auto cartprod_size(T0 list, T1toN... lists)
{
return list.size() * cartprod_size(lists...);
}
}
int main()
{
std::vector<std::string> sortes = {"pique","coeur", "trefle", "carreau"};
std::vector<std::string> nomes = {"AS", "2", "3", "4", "5", "6", "7", "8", "9", "10", "V", "D", "R" };
std::vector<std::string> jokers = {"JK1", "JK2"};
auto combos = test::cartprod_size(sortes, nomes);
std::mt19937 rng;
rng.seed(std::random_device()());
std::uniform_int_distribution<std::mt19937::result_type> rnd(1, combos + jokers.size());
const auto choice = rnd(rng);
if(choice > combos)
{
std::cout << jokers[choice - combos - 1] << std::endl;
} else
{
std::string sorte, nom;
std::tie(sorte,nom) = test::cartprod(choice - 1, sortes, nomes);
std::cout << nom << " " << sorte << std::endl;
}
return 0;
}