Le C++ moderne par le développement de jeux
- Objectifs pédagogiques
- Sections du cours
- Avis
Titulaire d’un diplôme d’ingénieur et après plusieurs années d’expérience, j’ai créé mon entreprise pour partager mes connaissances d’une part et me consacrer à divers projets d’autre part.
J’ai créé ce cours à destination des amateurs, des étudiants et des professionnels qui souhaitent découvrir ou redécouvrir le C++. Ce cours est conçu pour apprendre le C++ moderne (c++17) depuis zéro en prenant tout de suite de bonnes habitudes pour créer rapidement des applications robustes et performantes.
Il est décomposé en deux parties qui suivent chacune un fil conducteur : un programme de Juste Prix pour la première partie et un jeu d’arcade en seconde partie : Asteroids. Ces deux exemples ont l’avantage d’être ludiques et de permettre d’aborder toutes les notions de bases du C++, ces bases pouvant servir aussi bien à la création d’un jeu-vidéo que d’un autre logiciel ou d’un driver.
Dans ce cours, vous découvrirez :
- ce qu’est la programmation C++ (dans sa version 2017)
- les outils nécessaires à la programmation
- comment utiliser la mémoire de l’ordinateur grâce aux variables
- comment conditionner du code et créer des boucles grâce aux diverses structures de contrôle (if, while, for, switch)
- comment convertir des données d’un type à un autre
- ce que sont les références
- ce que sont les pointeurs bruts
- comment créer des fonctions
- comment structurer son code proprement pour un code lisible et modulaire
- comment créer et utiliser des tableaux de données
- comment gérer le temps (chronomètre)
- comment générer un nombre aléatoire
- comment gérer les chaînes de caractères (données textuelles)
- comment installer une bibliothèque externe
- comment créer et utiliser des objets
- comment créer des classes (types d’objets)
- comment utiliser l’héritage
- ce qu’est le polymorphisme et comment l’utiliser
- comment gérer de la mémoire dynamique (tableaux dynamiques, pointeurs intelligents)
- comment gérer les exceptions (outil permettant de bien gérer les erreurs)
- comment créer des templates (modèles de classes et de fonctions : moins de code pour plus d’efficacité !)
- comment lire/écrire dans un fichier
Et tout ceci dans les règles de l’art, avec des conseils, les bonnes pratiques à adopter pour un code lisible, efficace et performant.
Alors, n’attendez plus et inscrivez-vous dès maintenant : c’est parti !
-
1Qu’est-ce que la programmation ?Leçon vidéo
Dans cette session, vous apprendrez ce qu’est la programmation, ce qu’est un langage informatique et comment l’ordinateur, à partir d’un code source C++, peut générer un programme exécutable : grâce au compilateur.
-
2Code::Blocks, configuration et présentation des principales fonctionnalitésLeçon vidéo
Dans cette session, après vous avoir fait installé Code::Blocks, je vous ferai découvrir ses principales fonctionnalités, celles qui sont indispensables pour la suite : création de projet, compilation, exécution.
Je vous montrerez également comment configurer Code::Blocks pour suivre cette formation (étape indispensable au bon suivi de la formation). La configuration présentée dans cette session vous est conseillée pour tous vos projets.
[Message de juin 2020 : La version de Code::Blocks a évolué depuis le tournage de cette session. La version 2017 pouvait poser problème (sous Windows notamment) : je vous conseille désormais d’installer la version 20.03. Les projets de cette formation ont tous été revérifiés et sont bien fonctionnels sous Linux et Windows.]
Pour les utilisateurs de Mac OS, il est possible d’utiliser XCode pour suivre cette formation. Je n’ai malheureusement pas de Mac mais ce que je présente dans la formation est standard et donc fonctionnel (en théorie, car je n’ai pas pu tester) sur les OS les plus courants.
-
3Le vocabulaire de la programmationQuiz
Quelques mots de vocabulaire.
-
4Bienvenue au Juste Prix !Leçon vidéo
Dans cette session, vous apprendrez le code minimal d’une application C++ et comment afficher du texte à l’écran.
À la fin de cette session, notre programme souhaite la bienvenue à l’utilisateur.
-
5Mémorisation d’un prixLeçon vidéo
Dans cette session, vous apprendrez à enregistrer un nombre dans la mémoire de l’ordinateur en créant une variable.
À la fin de cette session, notre programme aura un prix en mémoire, prix que l’utilisateur aura pour objectif de deviner.
-
6Proposition d’un prixLeçon vidéo
Dans cette session, vous apprendrez à demander à l’utilisateur de saisir une information et à enregistrer cette information dans une variable.
À la fin de cette session, notre programme enregistrera en mémoire la première proposition de l’utilisateur.
-
7Les bases de la programmationQuiz
-
8C’est plus ! ou C’est moins !Leçon vidéo
Dans cette session, vous apprendrez à exécuter un bloc de code différent selon une condition.
Vous découvrirez également ce qu’est la portée d’une variable.À la fin de cette session, notre programme répond "C’est plus !" ou "C’est moins !" selon la valeur saisie par l’utilisateur.
-
9Le jeu est enfin jouable !Leçon vidéo
Dans cette session, vous apprendrez à exécuter un bloc de code plusieurs fois de suite grâce à la boucle while.
À la fin de cette session, notre jeu du juste prix est jouable !
-
10Et si on faisait plusieurs parties ?Leçon vidéo
Dans cette session, vous apprendrez à exécuter un bloc de code un nombre de fois prédéfini grâce à la boucle for. Vous apprendrez également à parcourir un ensemble de valeurs grâce au "range-based for", une autre syntaxe du for.
À la fin de cette session, notre jeu du juste prix enchaînera 3 parties.
-
11Un menu pour notre jeuLeçon vidéo
Dans cette session, vous découvrirez le switch, structure de contrôle qui permet d’exécuter du code différent selon les valeurs possibles d’une variable.
À la fin de cette session, notre programme s’ouvrira sur un menu qui laissera différents choix à l’utilisateur.
-
12Les structures de contrôleQuiz
-
13Les types fondamentaux et les conversionsLeçon vidéo
Dans cette session, nous ferons un point sur les types fondamentaux et vous découvrirez comment convertir une variable en un type donné grâce au cast.
-
14Les référencesLeçon vidéo
Dans cette session, je récapitulerai ce qu’est une variable et vous apprendrez à donner plusieurs noms à une même zone mémoire grâce aux références.
-
15Les pointeursLeçon vidéo
Dans cette session, vous découvrirez les pointeurs bruts, notion fondamentale dans les anciennes versions du C++, leur utilité s’est vue diminuée depuis C++11. Ils restent toutefois un élément indispensable du langage.
-
16Les références et pointeursQuiz
-
17Les constantes et énumérationsLeçon vidéo
Dans cette session, vous apprendrez à créer des constantes mais aussi un type avec comme valeurs possibles un ensemble de constantes : l’énumération.
-
18Structurons notre code grâce aux fonctionsLeçon vidéo
Dans cette session, vous apprendrez à structurer votre code grâce aux fonctions, afin d’avoir un code plus lisible et réutilisable.
-
19Séparons les déclarations des définitions !Leçon vidéo
Dans cette session, vous apprendrez à séparer les déclarations (ou prototypes) des fonctions de leurs définitions (ou implémentations). Vous verrez également ce qu’est la surcharge de fonction et comment donner une valeur par défaut à un paramètre.
-
20Nombre de secondesQuiz
-
21Récapitulons les scoresLeçon vidéo
Dans cette session, vous apprendrez à enregistrer en mémoire un ensemble de valeurs grâce aux tableaux de taille fixe (array).
À la fin de cette session, notre jeu récapitulera les scores des 3 parties écoulées.
-
22Chronométrons nos parties !Leçon vidéo
Dans cette session, vous découvrirez une petite partie de la bibliothèque chrono.
À la fin de cette session, les parties seront chronométrées !
-
23Un peu d’aléatoire !Leçon vidéo
Dans cette session, vous apprendrez à générer des nombres aléatoires.
À la fin de cette session, notre jeu tirera ses prix aléatoirement à chaque lancement : chaque partie sera maintenant unique !
-
24Quelques fonctionnalités de la SLQuiz
-
25Les mots et phrases : des chaînes de caractèresLeçon vidéo
Dans cette session, vous apprendrez à manipuler les chaîne de caractères, c’est à dire les mots et les phrases grâce au type std::string et au type std::string_view.
-
26Débugger ses programmesLeçon vidéo
Dans cette session, vous apprendrez à utiliser le débuggeur pour retrouver la source des erreurs rencontrées à l’exécution. Vous apprendrez à faire dérouler le programme pas à pas, à utiliser des points d’arrêts (breakpoints) et à surveiller la valeur de vos variables.
-
27Sujet, ressources et corrigéLeçon vidéo
L’objectif de cette session est de vous faire programmer seul le jeu du pendu, car la programmation doit se pratiquer pour vraiment être maîtrisée.
-
28Un objet : facile d’utilisation même si complexité interneLeçon vidéo
Dans cette session, vous apprendrez ce qu’est un objet en programmation : une boîte noire avec des fonctionnalités dont on peut ignorer le fonctionnement interne : on parle d’encapsulation.
-
29Une bibliothèque pour gérer l’affichage d’une fenêtre : la SFMLLeçon vidéo
Dans cette session, nous installerons ensemble la bibliothèque SFML, qui fournit des outils permettant entre autres de créer une fenêtre et d’y dessiner des formes et des images !
À la fin de cette session, votre projet sera configuré, prêt à être codé !
Un document PDF avec les erreurs les plus communes rencontrées sur ce projet et quelques pistes pour y remédier est attaché à cette session.
-
30Créons une fenêtre et donnons de la couleur à notre programmeLeçon vidéo
Dans cette session, vous apprendrez à créer une fenêtre en SFML et à y dessiner des cercles.
-
31La programmation orientée objetQuiz
-
32Créons un vaisseauLeçon vidéo
Dans cette session, vous apprendrez à créer votre propre classe, avec ses méthodes (fonctionnalités) et ses attributs (état).
À la fin de cette session : vous aurez créé une classe Vaisseau pour notre jeu Astéroïdes. Sous la forme d’un cercle blanc pour le moment, il pourra commencer à se déplacer.
-
33Une meilleure allure pour notre vaisseauLeçon vidéo
Dans cette session, vous apprendrez ce qu’est un constructeur : une méthode particulière qui permet d’initialiser un objet. Vous verrez également ce qu’est le destructeur, autre méthode particulière qui est elle appelée au moment de la destruction de l’objet.
À la fin de cette session, notre vaisseau ressemblera visuellement à un vrai vaisseau.
-
34Un vaisseau plus réaliste : accélération et vitesseLeçon vidéo
Dans cette session, vous apprendrez également à créer des attributs et des méthodes de classe avec le mot clé static et vous découvrirerez ce qu’est la constcorrectness pour un code de meilleure qualité.
À la fin de cette session, notre vaisseau accélérera et ralentira de façon plus réaliste.
-
35Déplaçons-nous dans toutes les directionsLeçon vidéo
Dans cette session, vous apprendrez à surcharger les opérateurs, ce qui va vous permettre de définir et d’utiliser les opérateurs (+, *, /, …) avec vos propres types !
À la fin de cette session, notre vaisseau pourra tourner et donc se déplacer dans toute la fenêtre.
-
36Des coordonnées pour mieux se repérerQuiz
-
37Les types d’objet : des classesQuiz
-
38Créons un obstacle : un astéroïdeLeçon vidéoDans cette session, vous apprendrez ce qu’est l’héritage, qui permet de mutualiser du code (éviter de le recopier) lorsque plusieurs classes ont des propriétés et/ou des comportements communs. Vous découvrirez également le mot clé protected.
À la fin de cette session, un astéroïde se déplacera à l’écran.
-
39Plusieurs astéroïdes à l’écranLeçon vidéo
Dans cette session, vous apprendrez ce que sont le type statique et le type dynamique d’une variable. Vous découvrirez ainsi toute la puissance du polymorphisme et comment créer des méthodes virtuelles.
À la fin de cette session, notre vaisseau se déplacera au milieu de plusieurs astéroïdes.
-
40Quelques bonnes pratiquesLeçon vidéo
Dans cette session, je vais vous faire découvrir quelques bonnes pratiques à adopter pour éviter certaines erreurs et avoir un code plus clair et robuste :
- vous apprendrez que les constructeurs sont par défaut des constructeurs de conversion, possiblement utilisés implicitement par le compilateur et vous apprendrez à utiliser le mot clé explicit pour changer ce comportement ;
- vous verrez que par défaut, le compilateur génère des constructeurs de copie et l’opérateur d’affectation (=) dans toutes les classes et je vous apprendrez à l’en empêcher lorsque ce n’est pas souhaité ;
- et vous découvrirez le mot clé override qui indique au compilateur que vous surchargez une méthode de la classe parente.
-
41Évitons les astéroïdes !Leçon vidéo
Dans cette session, vous apprendrez ce qu’est une fonction virtuelle pure et ce qu’est une classe abstraite. Je vous expliquerai également que toute classe mère doit avoir un destructeur virtuel.
À la fin de cette session, notre vaisseau devra éviter les astéroïdes pour ne pas exploser !
-
42Héritage et polymorphismeQuiz
-
43Un écran d’accueil pour notre jeuLeçon vidéo
Dans cette session, vous apprendrez à utiliser la classe std::vector : un tableau à taille dynamique.
À la fin de cette session, notre jeu ne démarrera plus dès le lancement de l’application mais seulement après l’appui sur une touche.
-
44Tirons des missiles avec notre vaisseauLeçon vidéo
Dans cette session, vous apprendrez la différence entre la pile et le tas et vous apprendrez à utiliser la classe std::unique_ptr, un pointeur intelligent qui va permettre de créer des objets à la volée à l’exécution.
À la fin de cette session, notre vaisseau pourra tirer.
-
45Une meilleure gestion de la mémoireLeçon vidéo
Dans cette session, nous verrons comment bien gérer les ressources (objets lourds en mémoire comme les textures), vous apprendrez également à utiliser la class std::map, un conteneur qui permet d’associer un objet à un autre.
À la fin de cette session, notre jeu sera jouable ! Et notre programme demandera moins de mémoire à l’ordinateur pour plus de performance.
-
46Les pointeurs partagésLeçon vidéo
Dans cette session, vous apprendrez à utiliser les pointeurs partagés (std::shared_ptr), un pointeur intelligent qui comme son nom l’indique permet le partage d’un objet : plusieurs pointeurs peuvent pointer vers le même objet.
Pas d’application directe dans le cas de notre jeu, cette session est donc hors fil conducteur.
-
47Allocation dynamiqueQuiz