需要帮助在文本文件中生成随机的54副牌

时间:2017-11-05 21:30:02

标签: c++

我需要帮助我的代码,它是一个非常长的代码,它运行不正常,如果你想要测试它。但是假设用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;
    }   
}

1 个答案:

答案 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;
}