Ecole Polytechnique Fédérale de Lausanne
Section Sciences de la vie
Programmation Orientée Objet
Tutoriel librairie graphique (SFML)

I. Ouvrir une fenêtre et compiler un premier programme SFML

Pour commencer, nous allons simplement créer une application affichant une fenêtre vide (noire), notre première application graphique!

Simultanément, nous allons voir comment utiliser le gestionnaire de compilation scons.

Dans un dossier de votre choix, créez un dossier nommé pong. A l'intérieur de celui-ci, créez les dossiers suivants:

A l'intérieur de src, créez un fichier main.cpp avec le contenu suivant:

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(800, 600), "InfoSV Pong");
    
    sf::RectangleShape rectangle;
	rectangle.setSize(sf::Vector2f(100, 50)); // Taille (100x50)
	rectangle.setPosition(10, 20); //Position sur l\'écran");
    while (window.isOpen())
    {
		sf::Event event;
		while (window.pollEvent(event)){
			// Les événements seront gérés plus tard ici
		}
		
        window.clear();
        window.draw(rectangle);
        window.display();
    }

    return EXIT_SUCCESS;
}

Ce code sera expliqué sous peu. Avant cela, nous allons le compiler à l'aide de scons.

Dans le dossier principal, créez un fichier nommé SConstruct avec le contenu suivant:

SConscript('src/SConscript', variant_dir='build', duplicate=0)

Ce fichier indique à scons que la compilation se fera dans le dossier build (créé automatiquement) avec les instructions situées dans le fichier src/SConscript. Créez donc ce dernier en téléchargeant le fichier SConscript (clic droit, puis enregistrer sous).

Exécutez maintenant la commande scons dans le dossier principal. Votre programme devrait se compiler. Vous pouvez maintenant exécuter la commande ./build/pong pour exécuter le programme et vous devriez obtenir une fenêtre noire comme ci-dessous.

Note
Remarquez qu'il n'est pas possible de la fermer en cliquant sur le bouton; il faudra donc quitter le programme par un Ctrl+C dans la console. Cela vient du fait que nous n'avons pas encore implémenté la gestion des événements, qui viendra dans un prochain chapitre