-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
85 lines (71 loc) · 3.18 KB
/
main.cpp
File metadata and controls
85 lines (71 loc) · 3.18 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
#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <ctime>
#include "Simulation.h"
#include "Acid.h"
#include "Stone.h"
#include "Steel.h"
#include "Sand.h"
int main() {
// initialisation
std::srand(std::time(0));
const int Size_Cell = 5; // taille d'une cellule en pixels
const int width = 150, height = 150; // dimensions de la grille
Simulation simulation(width, height); // crée la simulation
// Test : ajoute une cellule d'acide au centre de la grille
sf::RenderWindow window(sf::VideoMode(width * Size_Cell, height * Size_Cell), "Falling Sand Game"); // crée la fenêtre d'affichage SFML
sf::Clock gameclock; // horloge pour contrôler la vitesse de la simulation
enum Material { ACID, STONE, STEEL, SAND }; // matériaux disponibles
Material currentMat = ACID; // "acid" sélectionné par défaut
// --- AJOUT : Variable pour gérer la pause ---
bool isPaused = false;
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close(); // fermeture de la fenêtre
}
// changement de matériau
if (event.type == sf::Event::KeyPressed) {
switch (event.key.code) {
// --- AJOUT : Gestion de la touche Espace pour Pause/Reprise ---
case sf::Keyboard::Space: isPaused = !isPaused; break;
case sf::Keyboard::A: currentMat = ACID; break;
case sf::Keyboard::S: currentMat = SAND; break;
case sf::Keyboard::O: currentMat = STONE; break;
case sf::Keyboard::E: currentMat = STEEL; break;
default: break;
}
}
}
// placement de matériau
if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
sf::Vector2i mousePos = sf::Mouse::getPosition(window); // récupère la position de la souris
// convertit les coordonnées pixels
int x = mousePos.x / Size_Cell;
int y = mousePos.y / Size_Cell;
// vérifie que les coordonnées sont correctes
if (x >= 0 && x < width && y >= 0 && y < height) {
// crée le nouveau matériau
Cellule* newCell = nullptr;
switch (currentMat) {
case ACID: newCell = new Acid(x, y); break;
case SAND: newCell = new Sand(x, y); break;
case STONE: newCell = new Stone(x, y); break;
case STEEL: newCell = new Steel(x, y); break;
}
simulation.createBlock(newCell, 3); // Ajoute un carré 3x3
}
}
// mise à jour de la simulation à intervalle régulier
// --- MODIFICATION : Mise à jour seulement si NON PAUSE ---
if (!isPaused && gameclock.getElapsedTime().asSeconds() > 0.1f) {
simulation.update();
gameclock.restart();
}
window.clear(); // nettoie la fenêtre
simulation.draw(window, Size_Cell); // dessine l'état actuel de la simulation
window.display(); // affiche le résultat à l'écran
}
return 0;
}