Skip to content

Commit 488f3ef

Browse files
Nettoyage, commentaires.
Fermeture de la fenêtre n'attend plus la fin des animations
1 parent fe4f70e commit 488f3ef

File tree

11 files changed

+184
-173
lines changed

11 files changed

+184
-173
lines changed

SabaccModel.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -442,11 +442,6 @@ void JeuSabacc::initTour() {
442442

443443
m_tour++;
444444
LOGDEBUG << u8"début tour: " << m_tour << std::endl;
445-
//nouveau tour, aucun joueur n'a passé ni pioché
446-
// todo test
447-
//for (uint32_t i = 0; i < NB_POSITIONS; ++i) {
448-
// m_joueurs[i].m_aPasseCeTour = false;
449-
//}
450445
}
451446

452447

@@ -480,7 +475,7 @@ void JeuSabacc::appliqueConnaissanceJoueur(Position pj, PCGAlea& rng)
480475
}
481476
}
482477

483-
//TODO virer les vecteurs
478+
484479
void JeuSabacc::listerActionsLegales(std::vector<Action>& actions) const
485480
{
486481
actions.clear();
@@ -1299,9 +1294,6 @@ bool JeuSabacc::finTourJoueurActuel(PCGAlea& rng)
12991294
initTour(); // MISE A JOUR: m_tour, reset m_aPasseCeTour
13001295
// MISE A JOUR: m_phaseActuelle (remis à JETON par initTour implicitement ou explicitement)
13011296
m_phaseActuelle = PHASE_JETON; // Assure qu'on recommence par la phase jeton
1302-
// Réinitialise aussi m_doitPasser pour le nouveau tour (sauf si un nouvel embargo est joué)
1303-
// TODO
1304-
//for (uint32_t i = 0; i < NB_POSITIONS; ++i) m_joueurs[i].m_doitPasser = false;
13051297
}
13061298
}
13071299
else {

SabaccUI.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ SabaccUI::SabaccUI() : m_jeu(), m_vue(m_jeu), m_rng(rand())
1515
m_jeu.m_joueurs[Position::N].m_type = TYPE_JOUEUR::TJ_MONTE_CARLO_SIMPLE;
1616
m_jeu.m_joueurs[Position::E].m_type = TYPE_JOUEUR::TJ_MONTE_CARLO_SIMPLE;
1717

18-
//m_jeu.initJeu(m_rng);
19-
//ouvre la view et lance le thread
18+
//lance le thread de la vue qui va la créer
2019
m_vue.demarre();
2120

2221
LOGDEBUG.setActif(false);
2322
}
2423

24+
//boucle du thread de l'UI
2525
void SabaccUI::boucle()
2626
{
2727
while (!m_fermeFenetreDemande) {
2828
//au tour d'une IA de jouer.
2929
if (m_jeu.m_joueurs[m_jeu.m_positionJActuel].m_type != TYPE_JOUEUR::TJ_HUMAIN &&
30-
!m_jeu.m_jeuTermine && !m_vue.animationEnCours()) {
30+
!m_jeu.m_jeuTermine && !m_vue.animationEnCours() && !m_fermeFenetreDemande) {
3131

3232
//choisis action
3333
Action acChoisie;
@@ -44,15 +44,15 @@ void SabaccUI::boucle()
4444
m_vue.ajouteAnimationApresAction(acChoisie);
4545
Sleep(10);
4646
m_jeu.executeAction(acChoisie, m_rng);
47-
while (m_vue.animationEnCours()) Sleep(10);
47+
while (m_vue.animationEnCours() && !m_fermeFenetreDemande) Sleep(10);
4848
}
4949

5050
//Tour d'un humain
51-
else if (m_jeu.m_joueurs[m_jeu.m_positionJActuel].m_type == TYPE_JOUEUR::TJ_HUMAIN && !m_jeu.m_jeuTermine && !m_vue.animationEnCours()) {
51+
else if (m_jeu.m_joueurs[m_jeu.m_positionJActuel].m_type == TYPE_JOUEUR::TJ_HUMAIN && !m_jeu.m_jeuTermine && !m_vue.animationEnCours() && !m_fermeFenetreDemande) {
5252
std::vector<Action> legalActions;
5353
m_actionJeuChoisie = Action::A_INDEFINIE;
5454
m_jeu.listerActionsLegales(legalActions);
55-
m_vue.definitActionsAChoisir(legalActions);
55+
m_vue.definitActionsJeuAChoisir(legalActions);
5656

5757
//attend d'avoir reçu une action choisie et que toutes les animations soient finies
5858
while (!m_redemarrageDemande && !m_fermeFenetreDemande &&( m_vue.animationEnCours()|| (m_actionJeuChoisie == Action::A_INDEFINIE && m_jeu.m_joueurs[m_jeu.m_positionJActuel].m_type == TYPE_JOUEUR::TJ_HUMAIN && !m_jeu.m_jeuTermine)))
@@ -61,7 +61,7 @@ void SabaccUI::boucle()
6161
m_actionJeuChoisie = Action::A_INDEFINIE;
6262

6363
if (aChoisie != Action::A_INDEFINIE) {
64-
m_vue.videActionsAChoisir();
64+
m_vue.videActionsJeuAChoisir();
6565

6666
m_vue.ajouteLogMessage(aChoisie);
6767
m_vue.ajouteAnimationAvantAction(aChoisie);
@@ -194,7 +194,7 @@ void SabaccUI::surFinInitManche()
194194
m_vue.ajouteAnimationSon(Son::SON_WOOSH);
195195
m_vue.ajouteGrandMessage(ss.str());
196196

197-
while (m_vue.animationEnCours())
197+
while (m_vue.animationEnCours() && !m_fermeFenetreDemande)
198198
Sleep(20);
199199
}
200200

@@ -236,6 +236,7 @@ void SabaccUI::surMAJReserveJoueur(Position p, uint32_t reserveActuelle, int del
236236
m_vue.ajouteLogMessage(ss.str());
237237
m_vue.ajouteGrandMessage(ss.str());
238238
}
239+
239240
//LorexZen joue à Ghost Recon Breakpoint comme à CallOf.
240241

241242
//calcul du score si on est perdant

SabaccUI.h

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,37 @@
1-
#pragma once
1+
#pragma once
22
#include "SabaccUI.h"
33
#include "SabaccModel.h"
44
#include "SabaccView.h"
55
#include "windows.h"
66

77
class SabaccUI : JeuSabaccListener, SabaccVueListener{
88
public:
9-
SabaccUI();
9+
SabaccUI();
10+
11+
//boucle du thread de l'UI
1012
void boucle();
1113

1214
private:
15+
//flags enregistrant les demandes faite via la vue
1316
bool m_redemarrageDemande = false;
1417
bool m_fermeFenetreDemande = false;
15-
18+
19+
//générateur de nombres aléatoires rapide
1620
PCGAlea m_rng;
21+
22+
//logique du jeu
1723
JeuSabacc m_jeu;
24+
25+
//vue
1826
SabaccVue m_vue;
1927

28+
//action choisie dans la vue
2029
Action m_actionJeuChoisie=Action::A_INDEFINIE;
30+
31+
//stocke le score des 3 dernières parties
2132
std::deque<int> m_score3Parties;
2233

23-
// Inherited via JeuSabaccListener
34+
// Héritées de JeuSabaccListener
2435
void surFinInitJeu() override;
2536
void surFinInitManche() override;
2637
void surJeuTermine() override;
@@ -30,7 +41,7 @@ class SabaccUI : JeuSabaccListener, SabaccVueListener{
3041
void surFinTourJoueur() override;
3142
void surTirageDesResultat() override;
3243

33-
// Inherited via SabaccViewListener
44+
// Héritées de SabaccViewListener
3445
void surActionJeuChoisie(Action a) override;
3546
void surRedemarreJeu() override;
3647
void surFermeFenetre() override;

SabaccView.cpp

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -167,17 +167,17 @@ void SabaccVue::boucleThread() {
167167

168168
m_fenetre.create(vm, "Sabacc de Kessel par GrillePainVert", sf::Style::Close | sf::Style::Titlebar, sf::State::Fullscreen, settings);
169169
m_fenetre.setVerticalSyncEnabled(true);
170-
m_fenetre.setMinimumSize(sf::Vector2u(1400, 800));
170+
m_fenetre.setFramerateLimit(60);
171171
chargeElements();
172172

173173
while (m_fenetre.isOpen() && m_keepRunning) {
174174
traiteEvenements();
175175
// update(); // If needed for animations or GUI state not tied to game state
176176
affiche();
177-
Sleep(15);
177+
//ici pas besoin de delai Sleep car j'ai fixé la MaxFrameRate à 60 en créant la fenetre
178178
}
179179

180-
//unload assets
180+
//unload assets pas nécessaire ici
181181

182182
//close window
183183
m_fenetre.close();
@@ -202,22 +202,13 @@ void SabaccVue::traiteEvenements() {
202202
// Mouse Button Pressed
203203
if (const auto* mouseButtonReleased = event->getIf<sf::Event::MouseButtonReleased>()) {
204204
if (mouseButtonReleased->button == sf::Mouse::Button::Left) {
205-
//todo test
206-
//if (m_jeuSabacc.m_jeuTermine || m_jeuSabacc.m_joueurs[m_jeuSabacc.m_positionJActuel].m_type == TYPE_JOUEUR::TJ_HUMAIN || !m_jeuSabacc.m_joueurs[Position::S].m_enJeu) {
207-
//if (m_jeuSabacc.m_joueurs[m_jeuSabacc.m_positionJActuel].m_type == TYPE_JOUEUR::TJ_HUMAIN) {
208-
traiteClicJoueur(mouseButtonReleased->position);
209-
//}
205+
traiteClicJoueur(mouseButtonReleased->position);
210206
}
211207
}
212-
// Press Enter Event
213-
//if (const auto* keyPressed = event->getIf<sf::Event::KeyPressed>()) {
214-
// if (keyPressed->scancode == sf::Keyboard::Scan::Enter) {
215-
// // This logic needs to be more nuanced.
216-
// // Only advance if waiting for this specific input.
217-
// // For now, let's assume AI turns are fast.
218-
// }
219-
//}
220-
// catch the resize events
208+
209+
//C'est important car le framework SFML affiche une View dont la taille est indépendante de la fenêtre
210+
//Ca peut être très utile dans pas mal de cas, mais ici je veux que ma View ait la même résolution que la fenêtre
211+
//A chaque resize la View doit être remplacée
221212
if (const auto* resizedEvent = event->getIf<sf::Event::Resized>())
222213
{
223214
// update the view to the new size of the window
@@ -543,7 +534,7 @@ void SabaccVue::afficheActionsCliquables(const sf::FloatRect& area) {
543534

544535
for (const auto& action : m_actionsAChoisir) {
545536

546-
ActionCliquable cad(m_policeTexte); // Assuming constructor takes font, or setFont is called
537+
BoutonCliquable cad(m_policeTexte); // Assuming constructor takes font, or setFont is called
547538
cad.gameAction = action;
548539

549540
std::ostringstream actionOss;
@@ -628,7 +619,7 @@ void SabaccVue::afficheActionsCliquables(const sf::FloatRect& area) {
628619
//Nouveau Jeu
629620
currentY = area.position.y + area.size.y - buttonHeight;
630621

631-
ActionCliquable actionNouveauJeu(m_policeTexte);
622+
BoutonCliquable actionNouveauJeu(m_policeTexte);
632623
actionNouveauJeu.ViewAction = VA_NOUVELLE_PARTIE;
633624
std::string actionStr("Nouvelle Partie");
634625

@@ -654,7 +645,7 @@ void SabaccVue::afficheActionsCliquables(const sf::FloatRect& area) {
654645
currentY -= 1.0f * buttonHeight + 1.0f * padding;
655646

656647
//afficher-cacher cartes
657-
ActionCliquable actionAfficherCacher(m_policeTexte);
648+
BoutonCliquable actionAfficherCacher(m_policeTexte);
658649
actionAfficherCacher.ViewAction = VA_AFFICHER_CACHER_CARTES;
659650

660651
actionStr;
@@ -684,7 +675,7 @@ void SabaccVue::afficheActionsCliquables(const sf::FloatRect& area) {
684675
m_actionsCliquables.push_back(actionAfficherCacher);
685676

686677
//changer la vitesse
687-
ActionCliquable actionVitesse(m_policeTexte);
678+
BoutonCliquable actionVitesse(m_policeTexte);
688679
actionVitesse.ViewAction = VA_CHANGE_VITESSE;
689680

690681
actionStr;
@@ -714,7 +705,7 @@ void SabaccVue::afficheActionsCliquables(const sf::FloatRect& area) {
714705
m_actionsCliquables.push_back(actionVitesse);
715706

716707
//Ferme le jeu
717-
ActionCliquable actionFerme(m_policeTexte);
708+
BoutonCliquable actionFerme(m_policeTexte);
718709
actionFerme.ViewAction = VA_FERME;
719710

720711
actionStr="X";
@@ -1066,8 +1057,8 @@ void SabaccVue::traiteClicJoueur(sf::Vector2i mousePos) {
10661057
if (cad.bounds.contains(worldPos)) {
10671058
joueSonBouton();
10681059
Action actionJeu = cad.gameAction;
1069-
VueAction actionVue = cad.ViewAction;
1070-
if (actionVue == VueAction::VA_AFFICHER_CACHER_CARTES) {
1060+
ActionBouton actionVue = cad.ViewAction;
1061+
if (actionVue == ActionBouton::VA_AFFICHER_CACHER_CARTES) {
10711062
if (!m_afficheCartes && MessageBox(m_fenetre.getNativeHandle(), L"Attention: Afficher les cartes efface les scores. Voulez-vous continuer?", L"Afficher toutes les cartes", MB_YESNO) == IDYES)
10721063
{
10731064
m_afficheCartes = true;
@@ -1079,7 +1070,7 @@ void SabaccVue::traiteClicJoueur(sf::Vector2i mousePos) {
10791070
}
10801071
return;
10811072
}
1082-
else if (actionVue == VueAction::VA_NOUVELLE_PARTIE) {
1073+
else if (actionVue == ActionBouton::VA_NOUVELLE_PARTIE) {
10831074
//appelle onGameRestart des listeners
10841075

10851076
if (m_jeuSabacc.m_jeuTermine || MessageBox(m_fenetre.getNativeHandle(), L"Voulez-vous vraiment recommencer la partie?", L"Nouvelle Partie", MB_YESNO) == IDYES) {
@@ -1094,7 +1085,7 @@ void SabaccVue::traiteClicJoueur(sf::Vector2i mousePos) {
10941085
}
10951086
return;
10961087
}
1097-
else if (actionVue == VueAction::VA_CHANGE_VITESSE) {
1088+
else if (actionVue == ActionBouton::VA_CHANGE_VITESSE) {
10981089
m_rapide = !m_rapide;
10991090
if (m_rapide) {
11001091
m_carteAnimDuree = CARTE_ANIM_DUREE_RAPIDE;
@@ -1106,7 +1097,7 @@ void SabaccVue::traiteClicJoueur(sf::Vector2i mousePos) {
11061097
}
11071098
return;
11081099
}
1109-
else if(actionVue ==VueAction::VA_FERME) {
1100+
else if(actionVue ==ActionBouton::VA_FERME) {
11101101
if (MessageBox(m_fenetre.getNativeHandle(), L"Voulez-vous vraiment quitter?", L"Quitter le Jeu", MB_YESNO) == IDYES)
11111102
m_pListener->surFermeFenetre();
11121103
return;
@@ -1120,7 +1111,7 @@ void SabaccVue::traiteClicJoueur(sf::Vector2i mousePos) {
11201111
}
11211112

11221113
void SabaccVue::ajouteLogMessage(const std::string& message) {
1123-
if (m_texteMessages.size() >= MAX_MESSAGES) {
1114+
while (m_texteMessages.size() >= MAX_MESSAGES) {
11241115
m_texteMessages.erase(m_texteMessages.begin());
11251116
}
11261117
sf::Text text(m_policeTexte);
@@ -1398,10 +1389,7 @@ void SabaccVue::affiche() {
13981389

13991390
afficheCentreTable(boardArea);
14001391

1401-
//todo test
1402-
//if (m_jeuSabacc.m_jeuTermine || m_jeuSabacc.m_joueurs[m_jeuSabacc.m_positionJActuel].m_type == TYPE_JOUEUR::TJ_HUMAIN || !m_jeuSabacc.m_joueurs[Position::S].m_enJeu) {
1403-
afficheActionsCliquables(actionArea);
1404-
//}
1392+
afficheActionsCliquables(actionArea);
14051393

14061394
afficheMessages(zoneBoiteMessages);
14071395

0 commit comments

Comments
 (0)