Projets / Programmation, 1ère et 2ème années
Programmation, 1ère et 2ème années
Ce sont les vrais programmes console, enregistrés étape par étape. Chaque saisie se tape toute seule, puis Entrée affiche l'écran suivant. Textes de la console d'origine, en français.
Jeu de cartes LineIt
1ère année, C, binôme
Un jeu de cartes pour 2 à 5 joueurs, dans la console. Chaque joueur construit une ligne de cartes qui monte ou qui descend. Le plateau est dessiné en couleurs, et les 106 cartes reposent sur un type structuré.

Version interactive sur ordinateur.
Gestionnaire de covoiturage
2ème année, C++, projet individuel
Une application console dans l'esprit de BlaBlaCar, construite sur deux classes, voyageur et trajet. Elle inscrit des voyageurs sur des trajets, crée, modifie et supprime trajets et utilisateurs, et filtre les trajets par prix ou par date.

Version interactive sur ordinateur.
Gestionnaire de boutique en ligne
2ème année, C++, projet individuel
La gestion d'une boutique, construite sur une hiérarchie de classes. Personne est la classe de base, client et employé en héritent, et gérant hérite d'employé. Chaque rôle a ses propres menus. Les gérants changent les stocks, ajoutent produits et clients, et consultent les scores des employés.

Version interactive sur ordinateur.
Robot qui résout un labyrinthe
2ème année, Python, équipe de 3, LEGO Spike
Le robot suit un ruban noir collé sur un sol blanc. Des pastilles de couleur balisent le labyrinthe, bleu pour une intersection, rouge pour une impasse, jaune pour le trésor. Il explore en profondeur. À chaque intersection, il essaie à droite, puis tout droit, puis à gauche, et il fait demi-tour dans les impasses. Chaque intersection devient un nœud, placé grâce à l'odométrie des roues. Une fois le trésor trouvé, Dijkstra sur les nœuds découverts donne le plus court chemin du retour.
Le robot n'était disponible qu'en séance de TP. Entre deux séances, l'équipe testait son code sur le simulateur GearsBot.
def exploration(robot, noeuds): while not robot.tresor: robot.suivre_ligne() # jusqu'à une pastille couleur = robot.capteur.couleur() if couleur == ROUGE: # impasse robot.demi_tour() robot.dernier_noeud.marquer(IMPASSE) elif couleur == BLEU: # intersection noeud_bleu(robot, noeuds) elif couleur == JAUNE: # trésor tresor = noeuds.ajouter(robot.position) relier(robot.dernier_noeud, tresor) robot.tresor = True robot.demi_tour() def noeud_bleu(robot, noeuds): noeud = noeuds.proche(robot.position) # odométrie if noeud is None: noeud = noeuds.ajouter(robot.position) noeud.lire_chemins() # lignes vues elif robot.nouvelle_ligne: # boucle fermée relier(robot.dernier_noeud, noeud) robot.demi_tour() return relier(robot.dernier_noeud, noeud) # voisins robot.dernier_noeud = noeud for virage in (DROITE, TOUT_DROIT, GAUCHE): if noeud.chemins[robot.orientation + virage] == DETECTE: robot.tourner(virage) return robot.tourner_vers(noeud.parent) # retour arrière def dijkstra(noeud): noeuds_verifies.append(noeud) for voisin in noeud.voisins: d = noeud.distance + distance(noeud, voisin) if voisin.distance > d: voisin.distance = d dictio_noeuds[voisin] = noeud noeuds_atteints.append(voisin) n = plus_proche(noeuds_atteints, hors noeuds_verifies) if n: dijkstra(n) def retour(robot, depart, tresor): tresor.distance = 0 dijkstra(tresor) chemin = tracer_chemin(depart) # inversé for noeud in chemin[1:]: robot.tourner_vers(noeud) robot.suivre_ligne()