CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Aide Qt pendu

StabiloFurtif
StabiloFurtif
Niveau 7
10 novembre 2015 à 15:10:38

J'ai quelques soucis : je n'arrive pas à générer de mot aléatoire avec un dico.txt (bien contenu dans les dossiers)

J'ai essayé plusieurs manières de le générer en l’appelant dès le début du programme ou par un bouton, mais rien...

main.cpp

  1. include <QApplication>
  2. include "FenJeu.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

FenJeu fenetreDuPendu;
fenetreDuPendu.show();

return app.exec();

}

FenJeu.h

  1. ifndef FENJEU_H
  2. define FENJEU_H
  1. include <QWidget>
  2. include <QPushButton>
  3. include <QLineEdit>
  4. include <QLabel>
  5. include <QMainWindow>
  6. include <QMenu>
  7. include <QMenuBar>
  8. include <QAction>
  9. include <QKeySequence>
  10. include <QApplication>
  11. include <QTextEdit>
  12. include <QDialog>
  13. include <QVBoxLayout>
  14. include <QHBoxLayout>
  15. include <QStatusBar>
  16. include <QGridLayout>
  17. include <QString>
  18. include <QFile>
  19. include <QSpinBox>
  20. include <QMessageBox>
  21. include <QTextStream>

class FenJeu : public QMainWindow
{
Q_OBJECT
public :
FenJeu();

private slots:
void piocherMot();
void verifierLettresMots();

private :
QTextEdit *reglesDeJeu;
QTextEdit *aPropos;
QLineEdit *motATrouver;
QPushButton *genererMot;

QPushButton *a;
...
QPushButton *z;

QPushButton *fermerAide;
QPushButton *fermerAbout;
QString motPiocher;

};

  1. endif // FENJEU_H

FenJeu.cpp

  1. include "FenJeu.h"

FenJeu::FenJeu()
{
//Création de QMainWindow et ses menus:
QMenu *menuFichier = menuBar()->addMenu("&Fichier");
QMenu *menuAffichage = menuBar()->addMenu("&Affichage");
QMenu *menuAide = menuBar()->addMenu("&Aide");
QWidget *fenetreDeJeu = new QWidget;

QStatusBar *barreDEtat = statusBar();
barreDEtat->showMessage("Pret", 10000);
QLabel *messageBarreDEtat = new QLabel("Jeu du Pendu");
barreDEtat->addPermanentWidget(messageBarreDEtat);

QAction *actionRecommencer = menuFichier->addAction("&Recommencer");
actionRecommencer->setShortcut(QKeySequence("Ctrl+R"));
actionRecommencer->setIcon(QIcon("arrow_refresh.png"));
actionRecommencer->setStatusTip("Générera un nouveau mot à trouver");

QAction *actionQuitter = menuFichier->addAction("&Quitter");
actionQuitter->setShortcut(QKeySequence("Ctrl+Q"));
actionQuitter->setIcon(QIcon("door_in.png"));

QAction *actionGrandEcran = menuAffichage->addAction("&Grand Ecran");
actionGrandEcran->setShortcut(QKeySequence("F10"));
actionGrandEcran->setIcon(QIcon("magnifier_zoom_in.png"));
actionGrandEcran->setStatusTip("Mettre le jeu en plein écran");

QAction *actionPetitEcran = menuAffichage->addAction(("&Petit Ecran"));
actionPetitEcran->setShortcut(QKeySequence("F9"));
actionPetitEcran->setIcon(QIcon("magifier_zoom_out.png"));
actionPetitEcran->setStatusTip("Mettre en fenetre minimal");

QAction *actionRegles = menuAide->addAction("Regles");
actionRegles->setShortcut(QKeySequence("F2"));
actionRegles->setIcon(QIcon("help.png"));
actionRegles->setStatusTip("Afficher les règles");

QAction *actionAbout = menuAide->addAction("&A propos");
actionAbout->setIcon(QIcon("information.png"));
actionAbout->setShortcut(QKeySequence("Ctrl+A"));
actionAbout->setStatusTip("Info générale du jeu");

QDialog *affichageRegles = new QDialog(this);
fermerAide = new QPushButton("Fermer l'aide");
fermerAide->setIcon(QIcon("controller.png"));
QString regles;
regles += "Vous devez retrouver le mot en moins de 8 coups\n";
regles += "Pour cela cliquer sur les boutons alphabets\n";
regles += "Les mots font entre 1 et 25 caractères\n";
regles += "\nBonne chance !";
reglesDeJeu = new QTextEdit;
reglesDeJeu->setPlainText(regles);
reglesDeJeu->setReadOnly(true);
QVBoxLayout *fenetreDAide = new QVBoxLayout;
fenetreDAide->addWidget(reglesDeJeu);
fenetreDAide->addWidget(fermerAide);
affichageRegles->setLayout(fenetreDAide);

QDialog *affichageAbout = new QDialog(this);
fermerAbout = new QPushButton;
fermerAbout->setIcon(QIcon("controller.png"));
QString about;
about += "Ce jeu du pendu a été réalisé par\n";
about += "\nElProgrammorDelaNoche";
aPropos = new QTextEdit;
aPropos->setPlainText(about);
aPropos->setReadOnly(true);
QVBoxLayout *layoutAbout = new QVBoxLayout;
layoutAbout->addWidget(aPropos);
layoutAbout->addWidget(fermerAbout);
affichageAbout->setLayout(layoutAbout);

connect(fermerAbout, SIGNAL(clicked()), affichageAbout, SLOT(close()));
connect(actionAbout, SIGNAL(triggered()), affichageAbout, SLOT(exec()));
connect(actionPetitEcran, SIGNAL(triggered()), this, SLOT(showNormal()));
connect(fermerAide, SIGNAL(clicked()), affichageRegles, SLOT(close()));
connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(actionGrandEcran, SIGNAL(triggered()), this, SLOT(showMaximized()));
connect(actionRegles, SIGNAL(triggered()), affichageRegles, SLOT(exec()));
connect(actionRecommencer, SIGNAL(triggered()), this, SLOT(piocherMot()));

setWindowTitle("Jeu du Pendu");
setWindowIcon(QIcon("Pendu.png"));

//Création de la zone de jeu:
//Ensemble:

QHBoxLayout *organisationPages = new QHBoxLayout;
QGridLayout *pageGauche = new QGridLayout;
QLabel *pageDroite = new QLabel;

//Page de Gauche:
motATrouver = new QLineEdit;
motATrouver->setAlignment(Qt::AlignHCenter);
a = new QPushButton("a"); b = new QPushButton("b"); c = new QPushButton("c"); d = new QPushButton("d"); e = new QPushButton("e");
f = new QPushButton("f"); g = new QPushButton("g"); h = new QPushButton("h"); i = new QPushButton("i"); j = new QPushButton("j");
k = new QPushButton("k"); l = new QPushButton("l"); m = new QPushButton("m"); n = new QPushButton("n"); o = new QPushButton("o");
p = new QPushButton("p"); q = new QPushButton("q"); r = new QPushButton("r"); s = new QPushButton("s"); t = new QPushButton("t");
u = new QPushButton("u"); v = new QPushButton("v"); w = new QPushButton("w"); x = new QPushButton("x"); y = new QPushButton("y");
z = new QPushButton("z");

pageGauche->addWidget(motATrouver, 0, 0, 3, 6);
pageGauche->addWidget(a); pageGauche->addWidget(b); pageGauche->addWidget(c); pageGauche->addWidget(d); pageGauche->addWidget(e);
pageGauche->addWidget(f); pageGauche->addWidget(g); pageGauche->addWidget(h); pageGauche->addWidget(i); pageGauche->addWidget(j);
pageGauche->addWidget(k); pageGauche->addWidget(l); pageGauche->addWidget(m); pageGauche->addWidget(n); pageGauche->addWidget(o);
pageGauche->addWidget(p); pageGauche->addWidget(q); pageGauche->addWidget(r);
pageGauche->addWidget(s); pageGauche->addWidget(t); pageGauche->addWidget(u); pageGauche->addWidget(v); pageGauche->addWidget(w);
pageGauche->addWidget(x); pageGauche->addWidget(y); pageGauche->addWidget(z);
pageGauche->setAlignment(Qt::AlignCenter);

connect(a, SIGNAL(clicked()), this, SLOT(verifierLettresMots()));
...
connect(z, SIGNAL(clicked()), this, SLOT(verifierLettresMots()));

//Page de Droite:
pageDroite->setPixmap(QPixmap("pendu1.jpg"));
pageDroite->setAlignment(Qt::AlignCenter);

//Fin:
organisationPages->addLayout(pageGauche);
organisationPages->addWidget(pageDroite);

fenetreDeJeu->setLayout(organisationPages);
setCentralWidget(fenetreDeJeu);

}

void FenJeu::piocherMot()
{
QFile file("dico.txt");
if (!file.open(QIODevice::ReadOnly))
return;
QTextStream fichier(&file);

int nbLignes(0);
QString caractere;
caractere.clear();
motPiocher.clear();

while (!fichier.atEnd())
{
fichier >> caractere;
if(caractere == "\n")
nbLignes++;
}

fichier.seek(0);
int ligneAleat = rand() % nbLignes;
int t(0);

while (t != ligneAleat)
{
fichier >> caractere;
if(caractere == "\n")
t++;
}

fichier >> motPiocher;
motATrouver->setText(motPiocher);
motATrouver->setEchoMode(QLineEdit::Password);
motATrouver->setReadOnly(true);
}

void FenJeu::verifierLettresMots()
{

if(a->isChecked())
{
for(int i(0) ; i < motPiocher.size() ; ++i)
{
if(motPiocher[i] == 'a')
motATrouver[i].setEchoMode(QLineEdit::Normal);
}
a->setCheckable(false);
}
...
if(z->isChecked())
{
for(int i(0) ; i < motPiocher.size() ; ++i)
{
if(motPiocher[i] == 'z')
motATrouver[i].setEchoMode(QLineEdit::Normal);
}
z->setCheckable(false);
}
}

Fonction du mot générer:

void FenJeu::piocherMot()
{
QFile file("dico.txt");
if (!file.open(QIODevice::ReadOnly))
return;
QTextStream fichier(&file);

int nbLignes(0);
QString caractere;
caractere.clear();
motPiocher.clear();

while (!fichier.atEnd())
{
fichier >> caractere;
if(caractere == "\n")
nbLignes++;
}

fichier.seek(0);
int ligneAleat = rand() % nbLignes;
int t(0);

while (t != ligneAleat)
{
fichier >> caractere;
if(caractere == "\n")
t++;
}

fichier >> motPiocher;
motATrouver->setText(motPiocher);
motATrouver->setEchoMode(QLineEdit::Password);
motATrouver->setReadOnly(true);
}

Après avoir gratter pas mal de temps et en faisant autre chose en plus, j'arrive à compiler mais...

J'ai l'impression que le texte n'est pas mis dans la QLineEdit puisque celle ci n'affiche rien...

Donc j'aurais besoin de votre aide pour :
- afficher ce fameux motPiocher(surtout le piocher d'ailleurs)
- trouver une méthode qui modifierai l'image si aucune lettre n'a été trouvé dans le mot

Chocolayte
Chocolayte
Niveau 73
10 novembre 2015 à 19:24:22

Plop. J'ai installé Qt spécialement pour toi. [[sticker:p/1kkn]]

void MainWindow::piocherMot()
{
    srand(time(NULL));
    QFile fichier("C:\\Users\\choco\\Documents\\PocPendu\\dico.txt");

    if (!fichier.open(QIODevice::ReadOnly))
    {
        ui->lineEdit->setText("error");
        return;
    }

    // Random number
    int nbLigne = 0;
    while (!fichier.atEnd())
    {
        fichier.readLine();
        ++nbLigne;
    }

    int hasard = rand() % nbLigne;

    fichier.seek(0);

    QString line;
    for (int i = 0; i < hasard ; i++)
        line = fichier.readLine();

    fichier.close();

    ui->lineEdit->setText(line);
}

Cette fonction est ok chez moi. Pas super optimisée mais elle fait le boulot. :noel:

J'ai pas réfléchi pour la 2 dsl.

StabiloFurtif
StabiloFurtif
Niveau 7
11 novembre 2015 à 14:49:44

Super merci !!!!!!
Par contre je n'ai toujours pas trouvé la solution pour le deuxième cas mais j'essaye d'y arriver :ok:

Chocolayte
Chocolayte
Niveau 73
11 novembre 2015 à 15:51:45

Disons que c'est un peu relou de se plonger dans le code sans au minima :
- une indentation des lignes (c'est pénible, y'a des balises code sur jvc)
- un rendu de l'interface graphique, pour se représenter plus facilement ton jeu. J'avais pas pigé que tes a b c d étaient des boutons, instinctivement

Tu veux donc agir sur cette propriété si j'ai bien compris:
pageDroite->setPixmap(QPixmap("pendu1.jpg"));

Le problème, c'est que ta méthode verifierLettresMots() est catastrophique. Tu répètes tout ça 26 fois ? :noel:
Faut la revoir intégralement. Je m'y pencherai ce soir ou demain, sous réserve que quelqu'un le fasse avant moi.

Chocolayte
Chocolayte
Niveau 73
11 novembre 2015 à 16:01:50

Enfin non, j'me sens pas de tout refaire.
Ce serait quelque chose dans ce principe (cette fonction marche, normalement)

void FenJeu::verifierLettresMots()
{
    bool wordContains = false;

    if(a->isChecked())
    {
        for(int i(0) ; i < motPiocher.size() ; ++i)
        {
            if(motPiocher[i] == 'a')
            {
                wordContains = true;
                motATrouver[i].setEchoMode(QLineEdit::Normal);
            }
        }
        a->setCheckable(false);
    }
    ...
    if(z->isChecked())
    {
        for(int i(0) ; i < motPiocher.size() ; ++i)
        {
            if(motPiocher[i] == 'z')
            {
                wordContains = true;
                motATrouver[i].setEchoMode(QLineEdit::Normal);
            }
        }
        z->setCheckable(false);
    }

    if (wordContains == true)
        pageDroite->setPixmap(QPixmap("pendu1.jpg"));
   else
        pageDroite->setPixmap(QPixmap("pendu2.jpg"));
}
MegaFaramir
MegaFaramir
Niveau 10
12 novembre 2015 à 12:03:55

J'ai essayé de me pencher dessus mais j'avoue que j'ai un peu de mal aussi ^^ je te préviens si par hasard je trouve une solution :ok:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment