-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmainwindow.cpp
More file actions
151 lines (127 loc) · 5.05 KB
/
mainwindow.cpp
File metadata and controls
151 lines (127 loc) · 5.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "graphicspartie.h"
#include "partie.h"
#include "mainmenu.h"
#include "newgame.h"
#include "settings.h"
#include "ia_min_max.h"
#include <QPushButton>
#include <QMessageBox>
#include <QSpacerItem>
#include <QInputDialog>
#include <QGraphicsView>
/**
* @file mainwindow.cpp
* @brief Implémentation de la classe MainWindow.
*
* Ce fichier contient la gestion de la fenêtre principale de l'application, y compris
* la navigation entre le menu principal, les paramètres et la création d'une nouvelle partie.
*/
/**
* @brief Constructeur de la classe MainWindow.
*
* Initialise la fenêtre principale et configure le menu principal comme vue par défaut.
*
* @param parent Pointeur vers le widget parent (par défaut nullptr).
*/
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
insectes = {"Fourmi", "Abeille", "Scarabe", "Araignee", "Sauterelle"};
QString style_sheet = R"(
QWidget {
background: qlineargradient(
x1: 0, y1: 0, x2: 1, y2: 1,
stop: 0 #3c1053, /* Deep purple */
stop: 0.5 #16222a, /* Dark teal */
stop: 1 #1b3b5f /* Deep blue for bottom-right */
);
}
)";
setStyleSheet(style_sheet);
setup_main_menu();
}
/**
* @brief Configure et affiche le menu principal.
*
* Cette méthode crée le widget `MainMenu`, le définit comme widget central,
* et connecte ses signaux aux slots correspondants pour la navigation.
*/
void MainWindow::setup_main_menu()
{
MainMenu* main_menu = new MainMenu();
setCentralWidget(main_menu);
connect(main_menu, &MainMenu::go_to_new_game, this, &MainWindow::setup_newgame);
connect(main_menu, &MainMenu::go_to_settings, this, &MainWindow::setup_settings);
}
/**
* @brief Configure et affiche l'écran de création d'une nouvelle partie.
*
* Cette méthode crée le widget `NewGame`, le définit comme widget central,
* et connecte ses signaux aux slots pour retourner au menu principal ou démarrer une partie.
*/
void MainWindow::setup_newgame()
{
NewGame* new_game = new NewGame();
setCentralWidget(new_game);
connect(new_game, &NewGame::retour_menu, this, &MainWindow::setup_main_menu);
connect(new_game, &NewGame::demarrer_nouvelle_partie, this, &MainWindow::nouvelle_partie);
connect(new_game, &NewGame::charger_nouvelle_partie, this, &MainWindow::charger_partie);
}
/**
* @brief Configure et affiche l'écran des paramètres.
*
* Cette méthode crée le widget `Settings`, le définit comme widget central,
* et connecte ses signaux aux slots pour retourner au menu principal ou changer les paramètres.
*/
void MainWindow::setup_settings()
{
Settings* settings = new Settings();
setCentralWidget(settings);
connect(settings, &Settings::retour_menu_principal, this, &MainWindow::setup_main_menu);
connect(settings, &Settings::parametres_changes, this, &MainWindow::changer_parametres);
}
/**
* @brief Démarre une nouvelle partie.
*
* Cette méthode initialise une instance de la classe `Partie` ainsi qu'une représentation graphique
* de la partie (`GraphicsPartie`), et les définit comme widget central.
*/
void MainWindow::nouvelle_partie()
{
std::unique_ptr<Partie> partie = std::make_unique<Partie>(pseudo1, pseudo2, nb_undos, insectes, presence_ia);
GraphicsPartie* partie_graphique = new GraphicsPartie(std::move(partie));
setCentralWidget(partie_graphique);
connect(partie_graphique, &GraphicsPartie::retour_menu, this, &MainWindow::setup_main_menu);
}
void MainWindow::charger_partie(std::string joueur1, std::string joueur2, unsigned int nb_retours, std::vector<std::string> insectes, std::vector<Action> actions)
{
std::unique_ptr<Partie> partie = std::make_unique<Partie>(joueur1, joueur2, nb_retours, insectes, actions);
GraphicsPartie* partie_graphique = new GraphicsPartie(std::move(partie));
setCentralWidget(partie_graphique);
connect(partie_graphique, &GraphicsPartie::retour_menu, this, &MainWindow::setup_main_menu);
}
/**
* @brief Met à jour les paramètres de l'application.
*
* Cette méthode est appelée lorsque les paramètres sont modifiés dans l'écran des paramètres.
* Elle met à jour les informations comme les pseudos, l'état de l'IA, et le nombre d'annulations possibles.
*
* @param pseudo1 Pseudo du joueur 1.
* @param pseudo2 Pseudo du joueur 2.
* @param IA Indique si l'IA est activée.
* @param nb_undos Nombre d'annulations autorisées.
* @param insectes les insectes utilisés (extensions comprises)
*/
void MainWindow::changer_parametres(QString pseudo1, QString pseudo2, unsigned int nb_undos, std::vector<std::string> extensions, bool presence_ia)
{
this->pseudo1 = pseudo1.toStdString();
this->pseudo2 = pseudo2.toStdString();
this->presence_ia = presence_ia;
this->nb_undos = nb_undos;
insectes = {"Fourmi", "Abeille", "Scarabe", "Araignee", "Sauterelle"};
insectes.insert(insectes.end(), extensions.begin(), extensions.end());
}