需要帮助 在文本文件中随机生成 54 副牌
NEED HELP Generating a random 54 deck of cards in a text file
我需要代码方面的帮助,这是一个很长的代码,它不能很好地工作,如果你愿意,请测试它。但假设创建一副随机的 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;
}
}
我正在试验一个计算笛卡尔乘积的模板,你的问题似乎是测试我的模板的好方法。我在这里发布我所拥有的内容,以便您可以学习一些改进代码的方法,特别是将常见算法分解为可重用的函数以及一些较新的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;
}
相关文章:
- 初始化一副牌C++
- 将一副牌循环100次(一副牌)
- C++ 随机套牌问题
- 链表一副牌,只出现51张牌,没有出现52张
- 随机洗牌似乎会产生相同的结果,但仅在前两个实例中产生相同的结果.我如何避免这种情况
- 需要帮助 在文本文件中随机生成 54 副牌
- 如何使用 std::shuffle 以随机顺序对具有唯一指针的向量进行洗牌
- 卡片牌:我该如何制作,所以我只会随机绘制一次卡片
- 放置在结构中的一副牌
- 使用向量c++存储和洗牌一副牌
- 在同时为 C++03 和 C++14 的代码中进行简单随机洗牌的最佳实践是什么?
- 我在生成两副单独随机的纸牌时遇到问题
- 如何在c++中生成一副牌
- 随机顺序洗牌cv::Mat在OpenCV中
- 从一副牌中发牌(不重复的牌)
- 如何在映射中随机洗牌值
- 随机洗牌操作
- 查询随机洗牌
- 链表vs.动态数组实现一副牌?c++
- 如何随机随机洗牌矢量中的元素