Skip to content

Latest commit

 

History

History
394 lines (278 loc) · 13.7 KB

coaching_01.org

File metadata and controls

394 lines (278 loc) · 13.7 KB

G.Tech 1 – Projet#7 – C++ sous Linux / Git

Table of Contents

Introduction

Travail à réaliser durant le projet

  • Réalisation du Jeux Snake
    • Un grand classique existant sur tout type de supports
    • À jouer au clavier dans une fenêtre en mode graphique

    Note: Specs techniques du jeu fournies en temps voulu.

  • Développement en Langage C++ / Environnement Linux
    • Versionnement avec Git et partage avec Github.com
    • Utilisation du Shell Bash et des outils en ligne de commande

Organisation Générale [100%] :TODOélèves

  • Classe découpée en Groupes A et B
  • [X] Constitution des binômes (voire trinômes, me contacter):
    • [X] Mettez à jour le fichier Google Drive “Constitution des binômes”
      • [X] Tout le monde est dans un binôme ?
        • [X] Groupe A
        • [X] Groupe B
    • IMPORTANT: Binômes & Numéros des binômes ne devront plus changer ensuite! (Si problème contacter Alain Simac ou moi-même)
  • Coachings (présentiel): lundi, mercredi, vendredi (matin)
  • F.A.Q. (distanciel): vendredi après-midi (sem. 1, 2 et 3)
  • Soutenances les <2022-02-10 jeu.> et <2022-02-11 ven.>
  • Discord + E-mail: communication écrite + F.A.Q.
  • Nouveauté: Mes documents dispos sur Github.com:

    https://github.com/nbercher/gt1_cpp

    Remarque: Vous pourrez également cloner mon dépôt avec Git:

    git clone https://github.com/nbercher/gt1_cpp coach
        

    Et vous mettre à jour à tout moment: git pull

Comment nous allons travailler

  • Coachings présentiels
    • Partie cours (mais pas tout le temps)
    • Beaucoup de pratique, entraide entre élèves encouragée (qque soit le binôme)
    • Objectifs pour le prochain coaching
  • Entre les coachings
    • Vous travaillez en autonomie sur votre projet
    • Vous vous entraidez pour cela (discutez de vos difficultés, vos solutions, etc.)
    • F.A.Q.: C’est la “Foire Aux Questions”
      • Venez avec vos questions, vos besoins, etc.

Planning et Livrables

  • Semaine 1: Mise en place, Bases C++ & POO
    • Mise en place: WSL, VS Code, outils Linux, etc.
    • Bases du langage C++ et POO
    • <2022-01-19 mer.> Livrable: Dépôt Github.com
    • <2022-01-21 ven.> Diagramme UML de vos classes d’objets
      • BUG: Se fera plus tard!
    • Si possible on commencera:
      • Snake: SDL2 clavier & affichage
  • Semaine 2: Snake: SDL2 clavier & affichage, boucle du jeu, classes & objets
    • <2022-01-26 mer.> Évaluation Git
    • <2022-01-28 ven.> Livrable: “Déplacement d’un seul carré” (la tête du snake)
  • Semaine 3: Snake: Classes & objets pour gestion du ver et collisions
    • <2022-02-02 mer.> Gestion du ver fonctionnelle
    • <2022-02-04 ven.> Livrable: Version beta du jeu Snake
  • Semaine 4: Finalisations du jeu Snake, Soutenances
    • <2022-02-09 mer. 23:59> Livrable: Version finale du jeu Snake
    • <2022-02-10 jeu.> et <2022-02-11 ven.> Soutenances

Notation & Soutenance

  • Notation:
    • Évaluation Git: Maîtrise Git + Github.com
    • Qualité de la soutenance
    • Jeux Snake:
      • Conforme aux demandes, jouable, sans bugs
      • Code lisible, propre et optimisé
      • Utilisation et maîtrise pour la création de: Langage C++, librarie SDL2
      • Maîtrise des outils (environnement Langage C++, SDL2)
      • Bonus: Options rajoutées au jeu
  • Soutenances:
    • Dans la forme: ~15 minutes/binôme
      • Préparer des slides
      • Dans un binôme chaque élève doit présenter (présentation à répartir)
      • Expression, vocabulaire, orthographe
    • Dans le fond:
      • Votre maîtrise du sujet
      • Votre compréhension des potentiels problèmes non-résolus
      • Le point sur votre marge de progression et d’amélioration

Mise en place des outils (WSL, VS Code)

Environnement de travail

  1. WSL/Debian + g++ Linux = Environnement obligatoire pour tous!

    Je veux que tout le monde utilise les mêmes outils

  2. Vous devrez écrire du code C++ pour Linux

    Je ne veux pas de code écrit pour Windows!

  3. Votre code devra se compiler sous WSL et avec =g++=
  4. Utilisation de VS Code en mode WSL (ou Emacs)

    Seul choix possible pour vous: l’éditeur “VS Code” ou “Emacs”

ATTENTION: Pénalités pour les binômes qui ne respecteraient pas ces points

Installer WSL/Debian + outils Linux :TODOélèves:

Voir le fichier howto-wsl-env.org.

Installer VSCode + extension “Remote - WSL” :TODOélèves:

Voir le fichier howto-vscode+wsl.org.

Installer un server Xorg :TODOélèves:

Voir le fichier howto-xserver.org.

Mise en place des fichiers de travail (Github.com et Git local)

Contributions individuelles et contributions collectives

  • Vous allez commencer à développer en apprenant:
    1. Vous serez en phase d’apprentissage: code testé individuellement et qui change souvent
    2. Vous développerez les fonctionnalités petit à petit, par petits morceaux
    3. Quand un bout de code deviendra satisfaisant:
      • Il sera commité avec Git et donc partagé avec son binôme
      • Il faut être raisonnable et trouver son équilibre entre committer trop souvent / trop peu souvent

Structure des fichiers du projet

  • Mise en place des fichiers: ***VOUS DEVEZ TOUS AVOIR LA MÊME STRUCTURE DE DOSSIERS***
    ~/proj7/    <- Rappel: =~/= = =/home/eleveX/=
      ├ coach/  <- =git clone https://github.com/nbercher/gt1_cpp= (Optionel)
      └ snake/  <- =git clone [email protected]:MON_COMPTE_GITHUB/gtech1-bXX-snake.git snake= (Étape 4 du HowTo Git)
        ├ ÉLÈVE1/        <- Fichiers de l'élève1 (=contributions individuelles)
        │ ├ fichier.cpp
        │ └ fichier.hpp
        ├ ÉLÈVE2/        <- Fichiers de l'élève2 (=contributions individuelles)
        │ ├ fichier.cpp
        │ └ fichier.hpp
        ├ fichier.cpp    <- Fichiers du jeu Snake en phase de construction (=contributions collectives)
        ├ fichier.hpp
        ├ Makefile
        ├ ...
        

    En résumé:

    • ~/proj7/snake/ÉLÈVE1/ : fichiers d’élève1
    • ~/proj7/snake/ÉLÈVE2/ : fichiers d’élève2
    • ~/proj7/snake/ : fichiers du jeu
    • ~/proj7/coach/ : fichiers du coach
  • Fonctionnement et utilisation:
    • Au début, je développe dans mes fichier(s) individuel(s)
      • Je commite mes fichiers et ils sont partagés avec mon binôme
    • Le code progresse et devient intéressant:
      • Le binôme s’organise pour copier le code intéressant dans les fichiers du jeu

Rappels: Qu’est-ce que le Shell Bash?

  • Le Shell Bash est souvent appelé par abus de langage un “Terminal”
  • Pour y accéder, plusieurs choix:
    1. Lancer WSL: la fenêtre de terminal ainsi lancée vous accueille avec le Shell Bash
    2. Dans VS code en mode WSL: Créer un Terminal en mode “WSL/Debian”
  • Les deux méthodes sont équivalentes dans le sens où vous dialoguez avec le même environnement

Création de l’espace de travail (et exercices Shell Bash) :TODOélèves:

  1. Lancez le Shell Bash de votre choix
  2. Avec pwd: Où suis-je? (pwd = Print Working Directory)
    • Juste après le lancement d’un Shell, que cela donne-t-il?
    /home/MON_LOGIN/
        
  3. Avec mkdir: Créez votre dossier principal ~/proj7
    mkdir ~/proj7
        
  4. Avec ls: Listez le contenu du dossier courant
    • Liste simple
    • Liste étendue (option -l)
    • Liste des fichiers et dossiers cachés
    ls    # liste simple
    ls -l # liste étendue (format long avec détails: permissions, ownership, taille, date)
    ls -a # lister les fichiers cachés
        
  5. Avec cd: Changer de dossier: allez dans ~proj7/
    cd ~/proj7 # Aller dans le sous-dossier proj7/ de mon 'home directory'
    # Ou encore:
    cd        # Aller dans mon 'home directory'
    cd proj7/ # Aller dans le sous-dossier proj7/ qui s'y trouve
        
  6. Avec ls: Listez à nouveau le contenu du dossier courant
  7. Avec cd: Revenez dans votre ‘home directory’
    • En utilisant ~
    • En utilisant .. (=dossier parent)
    cd ~/  # Aller mon 'home directory'
    # Ou encore:
    cd ..  # Aller le dossier parent (OK si je suis dans ~proj7/)
        
  8. Avec cd: Retournez dans ~proj7/
  9. Avec git: Clonez le dépôt du coach sous le nom de dossier coach Rappel commande: git clone URL_DEPOT_DISTANT NOM_DOSSIER_LOCAL
    git clone  https://github.com/nbercher/gt1_cpp  coach
        

Rappels: Qu’est-ce que Git?

  • Outil créé par par Linus Torvalds en 2005, créateur de Linux, pour continuer à développer Linux
  • Grands principes:
    • Git travaille à l’échelle d’un dossier de départ et se préoccupe uniquement de ses sous-dossiers et sous-fichiers
    • Git enregistre les changements des fichiers dans des “commits”
    • Les commits s’enchainent (analogue à une blockchain), ils forment une histoire des fichiers = “versionnement”
    • Git permet de transférer les commits par le réseau et à des utilisateurs de synchoniser leur travail
    • Git sait fusionner (merge) les codes sources édités par plusieurs personnes en même temps
  • Usages de Git:
    1. Versionner le code source: enregistrement des changements importants et à préserver
    2. Synchroniser les dépôts (ex: avec Github.com)

Mise en place dépôts Git + Github :TODOélèves:

  • Allez dans ~/proj7/ et continuez avec la mise en place du dépôt Github.com et Git local
  • Voir le fichier howto-git-workflow.org
  • Vous devez être rigoureux et suivre chacune des étapes!

Mise en place - Épilogue

Dans la pratique, vous allez utiliser:

  • VS Code pour éditer le code (ou Emacs)
  • Le “Terminal WSL” ou le “Terminal VS Code” (en mode WSL) pour:
    • Compiler votre code (g++, make)
    • Versionner votre code (Git)
  • g++ pour compiler le code
    • make pour automatiser la compilation
  • git pour versionner les codes sources (Mais aussi: le Makefile et tout autre fichier important)
  • git et Github.com pour partager les codes sources dans le binôme (Et avec le coach)
  • IMPORTANT: Se familiariser les rudiments du Shell (pwd, cd, mkdir, git, etc.)

Objectifs pour le prochain coaching :TODOélèves:

  1. ***Travaillez entre les séances!***

    Vous avez 10h/sem de C++ et 4h~8h de langues = 14h~18h/sem

    Le reste du temps = travaillez sur votre projet autant que possible!

  2. IMPORTANT: Dépôts Git (locaux) et Github.com (mirroirs) créés et fonctionnels
    1. Reportez-vous au fichier howto-git-workflow.org en cas de besoin
    2. Chaque élève devra avoir configuré et testé ceci:
      • Test 1 du howto: Synchro entre votre dépôt local et son miroir Github.com

        git pull et git push

      • Test 2 du howto: git pull croisés entre élèves du binôme

        git pull ALIAS_AUTRE_ELEVE main

        Équivalent à: Mon PC <–pull– Github.com “autre élève”

      • Votre fichier ~/proj7/snake/.git/config doit ressembler à ceci:
        ...
        [remote "origin"]
                url = [email protected]:MON_COMPTE_GITHUB/gtech1-bXX-snake.git
                fetch = +refs/heads/*:refs/remotes/origin/*
        [branch "main"]
                remote = origin
                merge = refs/heads/main
        [remote "ALIAS_AUTRE_ELEVE"]
                url = https://github.com/COMPTE_AUTRE_ÉLÈVE/gtech1-bXX-snake.git
                fetch = +refs/heads/*:refs/remotes/origin/*
                    
  3. Travaillez en autonomie le C++, avec des ressources en ligne!

    Exemple: Compilation + exécution d’un code écrit en C++ dans le fichier hello.cpp:

    1. Coder hello.cpp:
      #include <iostream>
      using namespace std;
      
      int main(void) {
          cout << "Hello!" << endl;
          return 0;
      }
              
    2. Compiler: g++ helloc.cpp -o hello
    3. Exécuter: ./hello
  4. Familiarisez-vous avec le Shell Bash, Git, etc.