-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.cpp
113 lines (93 loc) · 2.67 KB
/
main.cpp
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
#include <FL/Fl.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Double_Window.H>
#include <FL/fl_draw.H>
#include <algorithm>
#include <array>
#include <chrono>
#include <iostream>
#include <math.h>
#include <random>
#include <string>
#include <time.h>
#include <vector>
#include "Board.h"
using namespace std;
/*--------------------------------------------------
MainWindow class.
Do not edit!!!!
--------------------------------------------------*/
class MainWindow : public Fl_Window {
Board* board = nullptr;
bool inMenu = true; // Nous commençons dans l'état du menu
public:
MainWindow() : Fl_Window(500, 500, "Sokoban") {
Fl::add_timeout(1.0 / 60, Timer_CB, this); // En supposant un taux de rafraîchissement de 60 Hz pour plus de simplicité
resizable(this);
}
~MainWindow() { // Destructeur
delete board; // Nettoyer la mémoire lorsque MainWindow est détruit
}
void draw() override {
Fl_Window::draw();
if (inMenu) {
// Définit la couleur du texte et dessine le menu
fl_color(FL_BLACK);
fl_draw("Appuyez sur 'a' pour le niveau 1", 140, 250);
fl_draw("Appuyez sur 'b' pour le niveau 2", 140, 270);
} else {
board->draw();
}
}
int handle(int event) override {
switch (event) {
case FL_MOVE:
if (!inMenu && board) {
board->mouseMove(Point{Fl::event_x(), Fl::event_y()});
}
return 1;
case FL_PUSH:
if (!inMenu && board) {
board->mouseClick(Point{Fl::event_x(), Fl::event_y()});
}
return 1;
case FL_KEYDOWN:
if (inMenu) {
// Nous gérons les sélections de menu ici
switch (Fl::event_key()) {
case 'a':
delete board; // Nettoyer tout tableau précédemment alloué
board = new Board("map1.txt");
inMenu = false;
break;
case 'b':
delete board; // Nettoyer tout tableau précédemment alloué
board = new Board("map2.txt");
inMenu = false;
break;
}
} else if (board) {
board->keyPressed(Fl::event_key());
}
return 1;
default:
return 0;
}
return 0;
}
static void Timer_CB(void *userdata) {
MainWindow *o = static_cast<MainWindow *>(userdata);
o->redraw();
Fl::repeat_timeout(1.0 / 60, Timer_CB, userdata);
}
};
/*--------------------------------------------------
main
Do not edit
--------------------------------------------------*/
int main(int argc, char *argv[]) {
srand(static_cast<unsigned>(time(nullptr)));
MainWindow window;
window.show(argc, argv);
return Fl::run();
}