La programmation orientée objet et le langage C++



Documents pareils
Comment sélectionner des sommets, des arêtes et des faces avec Blender?

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Introduction à l informatique en BCPST

CTIconnect PRO. Guide Rapide

Niveau 1. Atelier d'initiation à l'ordinateur ... Fondation de la Bibliothèque Memphrémagog inc. Magog (Québec) J1X 2E7 Tél.

Fiche Mémo : Options d accessibilité sous Windows et Internet Explorer 5

Optimiser pour les appareils mobiles

Prendre en main le logiciel ActivInspire 1.4

Silhouette Studio Leçon N 2

AVEC LIVE TRADER, VISEZ PLUS HAUT POUR VOS INVESTISSEMENTS

SOMMAIRE. Présentation assistée sur ordinateur. Collège F.Rabelais 1/10

Guide de l utilisateur. Faites connaissance avec la nouvelle plateforme interactive de

Mise en scène d un modèle dans l espace 3D

«Petit guide d utilisation Prezi» par Marc Nolet

L informatique en BCPST

Bien travailler sur plusieurs écrans

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Table des matières. F. Saint-Germain / S. Carasco Document réalisé avec OpenOffice.org Page 1/13

BUREAU VIRTUEL. Utilisation de l application sur ipad. Guide utilisateur. Sciences Po Utilisation du bureau virtuel sur ipad 1 / 6

Des outils numériques simples et conviviaux!

Utilisation du logiciel Epson Easy Interactive Tools

Composition d un ordinateur :

13) Calibrage du tableau Interwrite Dualboard

ESPACE MULTIMEDIA DU CANTON DE ROCHESERVIERE

Virtual Universe aperçu numéro 1

Utilisation de la plateforme VIA ecollaboration

Pour accéder au Prêt numérique

Dans l idéal, ceci devrait être fait en amont pour chaque image envoyée sur l espace de stockage de votre site internet.

Cahier n o 6. Mon ordinateur. Fichiers et dossiers Sauvegarde et classement

MEMENTO D'UTILISATION Du T.N.I. SmartBoard (Version )

Création d un document PublishView

N importe qui possédant un code MS valide peut initier la rencontre. Néanmoins, il serait préférable de laisser cette

L écran du marais : Comment configurer le viewer OpensSim

Logiciel libre, OpenMeetings permet de créer ou simplement de participer à des conférences en ligne.

Modes Opératoires WinTrans Mai 13 ~ 1 ~

Quel que soit L élève - Il est valorisé par l utilisation d un outil technologique haut de gamme - Il peut travailler seul et à son rythme.

Open-Sankoré. Mise en route. Guide utilisateur Février 2013 NTICE (E. S.)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

CREER ET ANIMER SON ESPACE DE TRAVAIL COLLABORATIF

Java 7 Les fondamentaux du langage Java

SANKORÉ. Le manuel qui manquait. Traite de la version du logiciel Sankoré

Conservez la documentation à portée de main pour toute référence future. Le terme «pointeur» dans ce manuel désigne le pointeur interactif YA-P10.

Intégrer des médias. Plateforme e-tourisme. demo.minisites.encharentemaritime.com

ENVOI EN NOMBRE DE MESSAGES AUDIO

µrv : Realité Virtuelle

GUIDE DE DÉMARRAGE. SitagriPro Infinite FINANCEAGRI. Un service. c o r p o r a t e

PC, Tablette, Smartphone, comment choisir ce qui me convient le mieux?

Cette fonctionnalité est paramétrable et accessible dans le module administration via le menu "Dossier / Administration".

Premiers Pas avec OneNote 2013

À la découverte de l ordinateur

Réalisation d un diaporama en haute définition avec. Adobe Premiere Elements 3.0 ou Adobe Premiere Pro 2.0. Encodage pour Internet

Manuel utilisateur «VisioJeunes»

Manuel Utilisateur Chariot odys.sante-lorraine.fr

L espace de travail de Photoshop

MANUEL TBI - INTERWRITE

Avertissement : Nos logiciels évoluent rendant parfois les nouvelles versions incompatibles avec les anciennes.

Premiers pas avec NetSupport SCHOOL

Introduction à Windows 8

L'émulateur multi-système

Mon aide mémoire traitement de texte (Microsoft Word)

Qu est-ce qu un Ordinateur

AIDE à l utilisation du cédérom «L athlétisme à l école» Niveau Primaire SOMMAIRE

SmartClass+ Plateforme de gestion de classe. Qu importe le lieu, le moment, l appareil. ipad, Mac Android Windows Téléphones intelligents «AVEC»

WINDOWS 8. Windows 8 se distingue par la présence de 2 interfaces complémentaires :

Leçon N 5 PICASA Généralités

Utilisation de l éditeur.

Devenez un véritable développeur web en 3 mois!

Ateliers Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le RaspberryPi?

Chaque ordinateur est constitué de différentes unités de stockage de données (Disque dur, Graveur ) que l on peut imaginer comme de grandes armoires.

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Arborescence et création de dossiers

Paramètres d accessibilité des systèmes d exploitation Windows et Mac

I. QU'EST-CE QU'UN ORDINATEUR? Un ordinateur est relié à plein de périphériques

Prise en main du logiciel Smart BOARD

Programmation Web. Madalina Croitoru IUT Montpellier

Bases Java - Eclipse / Netbeans

ÉVOLUTION DE L INTERFACE

l'ordinateur les bases

E-Remises Paramétrage des navigateurs

1 Démarrer L écran Isis La boite à outils Mode principal Mode gadget Mode graphique...

Support de formation Notebook

Guide d utilisation du ipad

Initiation à LabView : Les exemples d applications :

SCOLASYNC : Logiciel de gestion de flotte de «supports USB», synchronisation de fichiers.

L ordinateur portable VAIO

Utiliser le service de messagerie électronique de Google : gmail (1)

CAPTURE DES PROFESSIONNELS

FORMATION MULTIMÉDIA LVE

Découvrir l'ordinateur (niveau 2)

TRUCS & ASTUCES SYSTEME. 1-Raccourcis Programme sur le Bureau (7)

Les pré-requis pour créer un.ave pour Android

Manuel d utilisation de V3D Events - Visiteurs

Mes premiers diaporamas avec Open Office Impress?

L environnement de travail de Windows 8

Rapport projet MMI. Luis Domingues, I3 Naomi Favre, I3 Tiago De Deus, I3. Luis Domingues, Tiago De Deus, Naomi Favre SP Interfaces Multimodales

La saisie d un texte

Notions fondamentales du langage C# Version 1.0

Windows 7 Système d exploitation. INF Outils bureautiques, logiciels et Internet

Un ordinateur, c est quoi?

Sommaire. Page d accueil. Comment effectuer une mise à jour? Comment insérer le logo de sa société? Comment effectuer une sauvegarde?

Transcription:

Cours précédents La programmation orientée objet et le langage C++ Pablo Rauzy rauzy @ enst fr pablo.rauzy.name/teaching.html#epu-cpp EISE4 @ Polytech UPMC 22 octobre 2014 Cours 5 Nouveautés du C++ par rapport au C. Programmation orientée objet, encapsulation. Les classes en C++. Surcharge des opérateurs. Héritage. Modèles. Exceptions. La STL. Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 1 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 2 / 26 SFML Cours précédents SFML Documentation SFML La SFML (Simple and Fast Multimedia Library) est une bibliothèque graphique conçue pour la programmation de jeux vidéo. Tutoriels : http://sfml-dev.org/tutorials/1.6/. Documentation : http://sfml-dev.org/documentation/1.6/. Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 3 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 4 / 26

SFML Pourquoi la SFML? Logiciel libre. Fait pour les jeux : fenêtres, graphismes 2D, son, réseau, système. Multi-plateformes : GNU/Linux, Windows, Mac OS X (et bientôt Android et ios). Multi-langages : C++ mais aussi C, Go,.NET, Java, Python, Ruby... Lorsqu on programme un jeu il faut gérer : l affichage, l interaction avec l utilisateur, le temps, (parfois) le réseau. L organisation du code d un jeu fait appel à beaucoup des concepts de programmation orientée objet que l on a vu en cours. Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 5 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 6 / 26 Affichage / Affichage Le double buffer Dans un jeu, l affichage est critique. Beaucoup de composants à gérer tout en restant fluide. Utilisation de la technique du double buffer. Automatique dans les bibliothèques haut niveau comme SFML. Si on essaye d afficher plein d éléments à l écran, un scintillement peut se produire et casser la fluidité de l affichage. La technique du double buffer consiste à avoir deux zones d affichage, et d alterner entre les deux. De cette manière, on dessine toujours sur la zone cachée, et aucun artefact gênant ne peut arriver à l écran. Chaque fois qu on a fini de dessiner, on inverse les deux zones et celle qu on vient de dessiner est affichée d un seul coup. Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 7 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 8 / 26

/ Affichage Le double buffer dans la SFML / Affichage Composants sf::renderwindow game(sf::video(300, 400), "Mon Jeu"); game.clear(sf::color(255, 255, 255)); // efface la zone de dessin (ici en blanc) // mais pas celle qui est à l écran game.draw(stuff); game.draw(more_stuff); // dessine sur la zone de dessin game.display(); // échange des zones de dessin, affiche tout ce qu on a // dessiné depuis le dernier appel à la méthode Display Il est évidemment mieux de faire le moins d opérations d affichage possible. Par exemple dans un jeu de plateau, il est possible de construire le plateau au début du niveau puis de le garder en mémoire déjà construit pour l afficher d un seul coup. Pour les autres composants du jeu, par exemple une balle en mouvement qui va systématiquement bouger, on peut les mettre dans un conteneur qui va permettre d itérer dessus pour les afficher. De la même manière, il faut mieux éviter de charger plein de petites images. On préfère donc charger une seule grosse image qui sert pour plusieurs sprites. Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 9 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 10 / 26 / Affichage Exemple : composants / Affichage Exemple : sprites typedef enum { STAND, LOOK_RIGHT, LOOK_LEFT CharacterPosition; std::vector<sf::shape> shapes; shapes.push_back(sf::shape::rectangle(0, 0, 42, 42, sf::color(0, 0, 0))); shapes.push_back(sf::shape::line(50, 60, 100, 200, 1.0, sf::color(0, 0, 0))); for (auto s : shapes) { game.draw(s); sf::image character_sprites; if (!character_sprites.loadfromfile("character.png")) { std::cerr << "Can t load character.png" << std::endl; exit(exit_failure); character_sprites.bind(); std::map<characterposition, sf::sprite *> character; sf::sprite *c; c = new sf::sprite(character_sprites); c->setsubrect(sf::intrect(0, 0, 16, 20)); character[stand] = c; c = new sf::sprite(character_sprites); c->setsubrect(sf::intrect(0, 16, 32, 20)); character[look_right] = c; c = new sf::sprite(character_sprites); c->setsubrect(sf::intrect(0, 32, 48, 20)); character[look_left] = c; game.draw(character[character_position]); Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 11 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 12 / 26

Interagir avec l utilisateur Boucle de gestion des évènements Les entrées utilisateurs arrivent par la souris, le clavier, et/ou un joystick, dans le cas des jeux. La gestion de ces périphériques repose sur le principe d évènements. Chaque fois que l utilisateur est actif, un évènement est généré : mouvement de la souris, clic du bouton gauche / droit / milieu, appui sur une touche,... Quand c est applicable, l évènement contient des informations utiles : position du curseur de la souris, quelle touche du clavier a été enfoncée,... La gestion des évènements doit se faire en continue. Elle est donc placée au début de la boucle principale du programme. La structure de la boucle principale d un jeu va être : sf::renderwindow game(sf::video(300, 400), "Mon Jeu"); sf::event event; while (game.isopened()) { // boucle principale // gestion des évènements // dessin des composants game.display(); Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 13 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 14 / 26 Gestion des évènements Exemple : gestion des évènements La SFML fourni une gestion complète et simple des évènements. La méthode sf::window::getevent renvoit false si il n y a pas d évènement en attente, sinon true et remplie une instance de la classe sf::event qui lui en passé par référence. La classe sf::event a un attribut Type qui permet de savoir à quel type d évènement on a à faire. Ensuite, elle contient une union de structures contenant les informations sur l évènement en question. switch (event.type) { case sf::event::closed: // fenêtre du jeu fermée game.close(); case sf::event::keypressed: // appui sur une touche case sf::key::up: // touche haut player2.moveup(); case sf::key::z: // touche Z player1.moveup(); case sf::event::mousebuttonpressed: // appui bouton de la souris default: Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 15 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 16 / 26

Exemple : gestion entrées temps-réel Entrées temps-réel bool ctrl_key = false; switch (event.type) { case sf::event::keypressed: // appui sur une touche case sf::key::lcontrol: ctrl_key = true; case sf::key::z: // touche Z if (ctrl_key) { // ctrl+z // annulation de la dernière action default: case sf::event::keyreleased: case sf::key::lcontrol ctrl_key = false; default: default: On a souvent besoin de maintenir un état des entrées, par exemple pour savoir si la touche ctrl est enfoncée au moment où l on reçoit un évènement d appui sur une autre touche du clavier. Plutôt que de devoir le faire à la main, la SFML fourni la classe sf::input qui permet de faire cela. Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 17 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 18 / 26 Exemple : gestion entrées temps-réel avec sf::input Documentation SFML const sf::input &input = win_->getinput(); switch (event.type) { case sf::event::keypressed: // appui sur une touche case sf::key::z: // touche Z if (input.iskeydown(sf::key::lcontrol)) { // ctrl+z // annulation de la dernière action default: default: Tutoriels : http://sfml-dev.org/tutorials/1.6/. Documentation : http://sfml-dev.org/documentation/1.6/. Regardons un peu : Texte. Nombres aléatoires. Temps. Audio. Caméra. Réseau. Puis voyons un exemple et parcourons son code. Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 19 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 20 / 26

Contraintes Seul ou en groupe de 2, ou 3 exceptionnellement (gros projets). Programmation d un jeu graphique 2D. Rendre un premier rapport par email pour le 5 décembre. Rendre le code du jeu pour le 19 décembre. C++, STL, SFML (pour d autres bibliothèques vérifier avec moi avant). Code propre et bien organisé. Utilisation du polymorphisme (fonctions virtuelles, classe abstraites... ) à bon escient. Pas de fuites de mémoires (vérification avec valgrind). Fournir un Makefile avec des règles all et clean. Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 21 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 22 / 26 Rapport intermédiaire Rapport final Rendre le rapport (txt, odt, ou pdf) par email. Expliquer et justifier l architecture (prévue) de votre logiciel. Répartition (prévue) des tâches dans le groupe. Rendre le rapport (txt, odt, ou pdf) avec le code. Expliquer et justifier l architecture de votre logiciel. Expliquer les difficultés rencontrées et comment vous les avez surmontées ou contournées. Répartition des tâches dans le groupe, et temps consacré à chaque tâches. Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 23 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 24 / 26

Idée de projet C est tout pour aujourd hui :) Quelques familles de jeu : Tetris Casse briques Bubble shooter Pacman Jewel Copter Tanks 2048 Snake Flipper Tron Sokoban Plateforme (Mario-like) RPG (Pokemon-Like)... Cours précédents SFML Pourquoi la SFML? Affichage Interagir avec l utilisateur Documentation SFML Texte Nombres aléatoires Temps Audio Caméra Réseau Contraintes Rapport intermédiaire Rapport final Idée de projet Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 25 / 26 Pablo Rauzy (Télécom ParisTech) Programmation objet & C++ Cours 5 26 / 26