Skip to content
Snippets Groups Projects
Commit 272040a2 authored by Ulysse Durand's avatar Ulysse Durand
Browse files

test

parent 204d5ef3
Branches
No related tags found
No related merge requests found
......@@ -35,7 +35,7 @@ qt_add_qml_module(appmotus
RESOURCES
QML_FILES GameWindow.qml
SOURCES jeu.h jeu.cpp
SOURCES grillemanager.h grillemanager.cpp
SOURCES
QML_FILES Case.qml
QML_FILES Grille.qml
SOURCES lettermodel.h lettermodel.cpp
......
......@@ -11,28 +11,20 @@ Item {
anchors.fill: parent
Grid {
id: letterGrid
columns: 8
id: grid
columns: 5
rows: 5
spacing: 4
anchors.centerIn: parent
width: 600
height: 400
spacing: 5
Repeater {
model: letterModel // <-- C++ ListModel exposé ici
delegate: Rectangle {
width: 60
height: 60
color: "#dddddd"
border.color: "#888"
radius: 5
Text {
anchors.centerIn: parent
text: model.letter
font.pixelSize: 24
}
model: grid.columns * grid.rows
Rectangle {
id: cell
width: 50
height: 50
color: "lightgray"
border.color: "black"
objectName: "cell_" + index % grid.columns + "_" + Math.floor(index / grid.columns)
}
}
}
......
......@@ -46,12 +46,5 @@ Window {
id: pageLoader
anchors.centerIn: parent
// Once the page is loaded, notify C++
onItemChanged: {
if (item) {
// Call a function in C++ and pass the root item of GameWindow
jeu.setGameWindowItem(item);
}
}
}
}
......@@ -3,7 +3,6 @@
#include <random>
#include <iostream>
#include <filesystem>
#include "grillemanager.h"
#include "fullligneexception.h"
#include <QString>
......@@ -13,12 +12,20 @@ namespace fs = std::filesystem;
#include "nowordexception.h"
#include "brain.h"
Brain::Brain(QQmlComponent *grilleComponent, string dicodir, QQuickItem * parentItem) : dicodir(dicodir), parentItem(parentItem), grilleComponent(grilleComponent) {
Brain::Brain(string dicodir) : dicodir(dicodir) {
vector<string> files = getTxtFiles();
// TODO
// Initialise le menu déroulant avec files
}
string Brain::getGrid() {
string res = "";
for (int i=0;i<mNbEssaisMax;i++) {
res += lignes[i]->getMot();
}
return res;
}
vector<string> Brain::getTxtFiles() {
vector<string> txtFiles;
......@@ -103,8 +110,6 @@ void Brain::initGame() {
// Convertir std::string (getMot()) en QString
QString motQString = QString::fromStdString(getMot()); // Conversion de std::string en QString
GrilleManager grille(motQString); // Passer le QString à GrilleManager
grille.createGrid(grilleComponent, parentItem,this, mNbEssaisMax, mTailleMot); // Créer la grille
} catch (NoWordException e) {
cout << e.what() << endl;
}
......
......@@ -13,7 +13,7 @@ using namespace std;
class Brain
{
public:
Brain(QQmlComponent *grilleComponent, string dicodir, QQuickItem * parentItem);
Brain(string dicodir);
void trouveMot();
void setFichierDico(string fichierDico);
void setNombreEssais(int nbEssais);
......@@ -25,6 +25,7 @@ public:
vector<string> getTxtFiles();
void entreLettre(char lettre);
void supprLettre();
string getGrid();
vector<Ligne*> lignes;
private:
......@@ -35,8 +36,6 @@ private:
int nbEssais;
int mTailleMot;
map<char, int> lettres;
QQuickItem * parentItem;
QQmlComponent *grilleComponent;
};
#endif // BRAIN_H
#include "grillemanager.h"
GrilleManager::GrilleManager(const QString &mot, QObject *parent)
: QObject(parent), m_mot(mot) {}
void GrilleManager::createGrid(QQmlComponent *grilleComponent, QQuickItem * parentItem,Brain* brain, int rows, int columns) {
m_cases.clear(); // Vide la grille avant de la remplir
// Remplir la grille avec des cases
for (int i = 0; i < rows * columns; ++i) {
VraieCase* lacase = brain->lignes[i / columns]->contenu[i % columns];
// Si on est à la première case, on met la première lettre du mot, sinon on met '_'
if (i < m_mot.length()) {
lacase->setLetter(m_mot[i]); // Conversion automatique depuis QString
} else {
lacase->setLetter(QString("_")); // Conversion du char '_' en QString
}
m_cases.append(lacase);
}
// context->setContextProperty("jeu", jeu);
if (grilleComponent->status() == QQmlComponent::Ready) {
QObject *object = grilleComponent->create();
QQuickItem *item = qobject_cast<QQuickItem *>(object);
if (item) {
// Add it to the parent item
item->setParentItem(parentItem);
}
} else {
qWarning() << "Failed to load QML component:" << grilleComponent->errorString();
}
emit casesChanged(); // Émettre le signal pour indiquer que la grille a changé
}
QQmlListProperty<VraieCase> GrilleManager::getCases() {
return QQmlListProperty<VraieCase>(this, &m_cases); // Passer un pointeur à la liste
}
#ifndef GRILLEMANAGER_H
#define GRILLEMANAGER_H
#include <QObject>
#include <QQmlListProperty>
#include "vraiecase.h"
#include "brain.h"
class GrilleManager : public QObject {
Q_OBJECT
Q_PROPERTY(QQmlListProperty<VraieCase> cases READ getCases NOTIFY casesChanged)
public:
explicit GrilleManager(const QString &mot, QObject *parent = nullptr); // Le mot en argument
void createGrid(QQmlComponent *grilleComponent, QQuickItem * parentItem, Brain* brain, int rows, int columns); // Créer la grille
QQmlListProperty<VraieCase> getCases(); // Obtenir les cases
signals:
void casesChanged();
private:
QString m_mot;
QList<VraieCase *> m_cases; // Liste des cases de la grille
};
#endif // GRILLEMANAGER_H
#include "jeu.h"
#include <iostream>
#include <QString>
Jeu::Jeu(QObject *parent) : QObject(parent) {
Jeu::Jeu(QObject *parent) : QObject(parent), grilleManager("", this) {
}
// void Jeu::setMot(const QString& mot) {
......@@ -17,24 +18,23 @@ QString Jeu::getMotAffiche() {
return mot;
}
void Jeu::setContext(QQmlComponent *grilleComponent, QQuickItem* parentItem) {
grilleComponent = grilleComponent;
parentItem = parentItem;
brain = new Brain(grilleComponent,"./",parentItem);
}
void Jeu::onClavierClick(QString lettre) {
if (!m_letterModel)
return;
if (currentIndex < 40) { // on évite de dépasser la grille
m_letterModel->setLetter(currentIndex, lettre);
currentIndex++;
}
// if (currentIndex < 40) { // on évite de dépasser la grille
// m_letterModel->setLetter(currentIndex, lettre);
// currentIndex++;
// }
brain->entreLettre(lettre.toStdString()[0]);
for (int index = 0; index < 40; index ++) {
m_letterModel->setLetter(index, QString::fromLatin1(&brain->getGrid()[index], 1));
}
}
......
......@@ -5,13 +5,11 @@
#include <QQuickItem>
#include <QQmlComponent>
#include "brain.h"
#include "grillemanager.h"
#include "lettermodel.h"
class Jeu : public QObject {
Q_OBJECT
Q_PROPERTY(QString motAffiche READ getMotAffiche NOTIFY motChanged)
Q_PROPERTY(GrilleManager* grilleManager READ getGrilleManager CONSTANT)
Q_PROPERTY(QQuickItem* gameWindow READ getGameWindow NOTIFY gameWindowChanged)
public:
......@@ -20,9 +18,7 @@ public:
Q_INVOKABLE void onClavierClick(QString lettre);
Q_INVOKABLE void initGame();
Q_INVOKABLE void startGame(); // pour init depuis QML
GrilleManager* getGrilleManager() { return &grilleManager; }
QQuickItem* getGameWindow() const { return gameWindow; } // Getter for gameWindow
void setContext(QQmlComponent *grilleComponent, QQuickItem* parentItem);
void setLetterModel(LetterModel* model); // Setter pour le modèle
......@@ -33,8 +29,6 @@ signals:
private:
Brain* brain;
QString mot;
GrilleManager grilleManager;
QQmlComponent* grilleComponent;
QQuickItem* gameWindow; // Pointer to the QQuickItem of the GameWindow
LetterModel* m_letterModel = nullptr; // Modèle QML
int currentIndex = 0; // Pour suivre où on écrit
......
......@@ -20,24 +20,33 @@ bool Ligne::isGameCleared() {
show();
for (int i = 0; i < bonmot.length(); i++) {
char bonnelettre = toupper(bonmot[i]); // Convert to uppercase
QChar lettreacomparer = contenu[i]->getLetter().at(0); // Get the QChar from contenu
int etat1 = (bonnelettre == lettreacomparer.toUpper().toLatin1()) ? 1 : 0;
char lettreacomparer = contenu[i]->getLetter(); // Get the QChar from contenu
int etat1 = (bonnelettre == lettreacomparer) ? 1 : 0;
int etat2 = Ligne::dansMot(lettreacomparer, bonmot);
int etat = etat1+etat2;
cout << etat1 << etat2 << endl;
contenu[i]->setEtat(etat);
}
cout << "TEST" << endl;
show();
return (nbjustes == 2*bonmot.length());
}
string Ligne::getMot() {
string res = "";
for (int i=0;i<bonmot.length();i++) {
res = res + contenu[i]->getLetter();
}
return res;
}
void Ligne::show() {
cout << "La ligne : |";
for (int i=0;i<bonmot.length();i++) {
if (contenu[i]->getEtat() == 1) {cout << "\033[33m";}
if (contenu[i]->getEtat() == 2) {cout << "\033[31m";}
cout << contenu[i]->getLetter().toStdString();
cout << contenu[i]->getLetter();
if (contenu[i]->getEtat() >= 1) cout << "\033[30m";
}
cout << "|" << endl;
......@@ -45,7 +54,7 @@ void Ligne::show() {
bool Ligne::dansMot(QChar lettre, string mot) {
for (int i=0;i<mot.length();i++) {
if (toupper(mot[i]) == lettre.toLatin1()) {
if (mot[i] == lettre) {
return true;
}
}
......@@ -56,7 +65,7 @@ void Ligne::entreLettre(char lettre) {
if (positionCurseur == bonmot.length()) {
throw FullLigneException();
}
contenu[positionCurseur]->setLetter(QChar(lettre)); // Conversion ici
contenu[positionCurseur]->setLetter(lettre); // Conversion ici
positionCurseur++;
}
......@@ -65,6 +74,6 @@ void Ligne::supprLettre() {
throw EmptyLigneException();
}
cout << "Suppression d'une lettre" << endl;
contenu[positionCurseur - 1]->setLetter(QChar(' '));
contenu[positionCurseur - 1]->setLetter(' ');
positionCurseur--;
}
......@@ -23,6 +23,7 @@ public:
void supprLettre();
void show();
vector<VraieCase*> contenu;
string getMot();
private:
string bonmot;
......
......@@ -5,7 +5,6 @@
#include <QQmlApplicationEngine>
#include "jeu.h"
#include "vraiecase.h"
#include "grillemanager.h"
#include "lettermodel.h"
int main(int argc, char *argv[]) {
......@@ -13,7 +12,6 @@ int main(int argc, char *argv[]) {
QQmlApplicationEngine engine;
qmlRegisterType<VraieCase>("motus", 1, 0, "VraieCase");
qmlRegisterType<GrilleManager>("motus", 1, 0, "GrilleManager");
......@@ -25,16 +23,12 @@ int main(int argc, char *argv[]) {
QObject *rootObject = engine.rootObjects().first(); // Gets the first root object
QQuickItem *rootItem = qobject_cast<QQuickItem *>(rootObject);
QQmlComponent grilleComponent(&engine, QUrl::fromLocalFile("../../Grille.qml"));
QQuickItem *parentItem = rootItem;
// Créer l'objet Jeu sans mot
Jeu jeu;
Jeu jeu(rootObject);
jeu.setLetterModel(&letterModel);
engine.rootContext()->setContextProperty("jeu", &jeu);
jeu.setContext(&grilleComponent,parentItem);
return app.exec();
}
......
#include "vraiecase.h"
VraieCase::VraieCase(QObject *parent) : QObject(parent), lettre(""), etat(0) {}
VraieCase::VraieCase() : lettre(' '), etat(0) {}
QString VraieCase::getLetter() const {
char VraieCase::getLetter() const {
return lettre;
}
void VraieCase::setLetter(const QString &letter) {
void VraieCase::setLetter(const char &letter) {
if (lettre != letter) {
lettre = letter;
emit letterChanged();
}
}
......@@ -20,6 +19,5 @@ int VraieCase::getEtat() const {
void VraieCase::setEtat(int e) {
if (etat != e) {
etat = e;
emit etatChanged();
}
}
......@@ -2,28 +2,18 @@
#define VRAIECASE_H
#include <QObject>
#include <QString>
class VraieCase : public QObject {
Q_OBJECT
Q_PROPERTY(QString letter READ getLetter WRITE setLetter NOTIFY letterChanged)
Q_PROPERTY(int etat READ getEtat WRITE setEtat NOTIFY etatChanged)
class VraieCase {
public:
explicit VraieCase(QObject *parent = nullptr);
VraieCase();
QString getLetter() const;
void setLetter(const QString &letter); // Mise à jour du type
char getLetter() const;
void setLetter(const char &letter); // Mise à jour du type
int getEtat() const;
void setEtat(int etat);
signals:
void letterChanged();
void etatChanged();
private:
QString lettre;
char lettre;
int etat;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment