🚀 Preuves “SAE 1.01” et/ou SAE 2.01

SAE 1.01 implémentation d'un besoin client

▶︎ Les apprentissages critiques

1. AC11.01 | Implémenter des conceptions simples 2. AC11.02 | Élaborer des conceptions simples **** 3. AC11.03 | Faire des essais et évaluer leurs résultats en regard des spécifications

▶︎ Analyse et réflexivité sur vos actions (à compléter max 1 page par question)

<aside> 💡 Quelles ont été vos démarches, prises de décisions, degré d'implication et d'autonomie ?

</aside>

Pour valider les apprentissages critiques, nous avons réalisé la SAE S1.01 : Implémentation d’un besoin client. L’objectif de ce projet était de développer une IA capable de gagner systématiquement au jeu de Marienbad, également connu sous le nom de Nim, un jeu mathématique stratégique où les joueurs retirent, à tour de rôle, un ou plusieurs objets d’une seule rangée. Le perdant est celui qui prend le dernier objet, sauf si les règles définissent ce dernier coup comme gagnant. Ce jeu est célèbre pour son analyse en théorie des jeux, notamment grâce à une règle clé basée sur la représentation binaire des quantités. Pour structurer notre travail, nous avons divisé le projet en trois grandes étapes : d’abord la répartition des tâches et la mise en place d’un emploi du temps, ensuite la création de la version joueur contre joueur, et enfin la réalisation de la version ordinateur contre joueur. Dès le début, nous avons défini les rôles : je devais développer les méthodes pour le mode joueur contre joueur, tandis que mon binôme s’occupait des méthodes de test. Cependant, en raison d’un retard accumulé dans le projet, nous avons dû adapter nos responsabilités : mon binôme a finalement pris en charge certaines des méthodes que je devais réaliser, tandis que je me concentrais sur la version ordinateur contre joueur.

Pour cette dernière, plusieurs options étaient possibles. La version aléatoire consistait à faire retirer à l’ordinateur un nombre d’allumettes choisi au hasard. La version gagne quand il en a l’occasion impliquait que l’ordinateur joue de manière aléatoire jusqu’à ce qu’il puisse effectuer un coup gagnant. Enfin, la version gagnante nécessitait que l’ordinateur applique une stratégie mathématique pour effectuer un coup gagnant à chaque fois que cela était possible, et, à défaut, joue de manière aléatoire. En raison d’une erreur dans la compréhension des consignes et du temps limité, nous n’avons pu implémenter que les deux premières versions. La version gagnante demandait une analyse plus approfondie et une meilleure gestion des priorités, ce que nous n’avons pas pu accomplir dans le délai imparti. Ce projet, réalisé en autonomie et en parallèle d’autres travaux, a nécessité une organisation rigoureuse pour répondre aux attentes du client. Malgré les défis rencontrés, notamment liés au respect des délais et à la compréhension des consignes, cette SAE nous a permis de renforcer nos compétences en gestion de projet, en programmation et en stratégie. Avec une meilleure planification et une clarification des objectifs dès le départ, nous aurions pu optimiser la réalisation de cette SAE.

<aside> 💡 Quelles ressources avez vous choisies et combinées pour réaliser vos tâches et résoudre les problèmes rencontrés dans cette SAé ?

</aside>

Pour réaliser les tâches demandées dans cette SAE, nous avons utilisé Geany, un éditeur de texte léger basé sur GTK+ et Scintilla, qui intègre les fonctionnalités essentielles d’un environnement de développement intégré. Cet outil a été utilisé pour implémenter les différentes versions attendues du projet. Nous avons également complété nos travaux à l’aide des cours fournis et de nos propres recherches sur le sujet, en consultant des plateformes comme Wikipédia, GitHub ou encore ChatGPT.

Les premières difficultés rencontrées au cours de cette SAE se sont manifestées lors de l’organisation du projet. En raison d’une charge de travail accumulée, il a fallu repenser entièrement la planification initiale pour mieux gérer les priorités. Pour faciliter la coordination avec mon binôme, nous avons utilisé le réseau social Instagram afin de nous tenir informés en temps réel des avancées respectives sur le projet et des éventuels problèmes rencontrés, notamment lors de l’implémentation des méthodes. Cette approche collaborative, bien que non conventionnelle, s’est révélée utile pour améliorer la communication et suivre l’état d’avancement des différentes tâches.

<aside> 💡 En vous appuyant sur vos traces, justifiez la maitrise des apprentissages visés, ainsi que la prise en compte des composantes essentielles pour le développement de vos compétences.

</aside>

Implémenter des conceptions simples et Élaborer des conceptions simples :

Afin de répondre aux attentes des apprentissages critiques, j’ai choisi de regrouper l’élaboration et l’implémentation de conceptions simples, ces deux notions étant étroitement liées dans le cadre du développement du projet. Ces apprentissages ont été mis en œuvre lors de la création des fonctionnalités du jeu de Nim, notamment pour assurer un affichage correct et fonctionnel des lignes d’allumettes. À cette fin, plusieurs méthodes clés ont été conçues et implémentées, parmi lesquelles « AfficherJeu », ainsi que « Allumette » ou « nbLignes », utilisées aussi bien dans la version joueur contre joueur que dans la version joueur contre ordinateur. La méthode « AfficherJeu » permet d’afficher dynamiquement les lignes du jeu et leur évolution au cours de la partie, tandis que la méthode « Allumette » ou « nbLignes » offre la possibilité de définir le nombre de lignes selon le choix du joueur au démarrage de la partie.

L’élaboration de ces fonctionnalités a nécessité une phase de réflexion approfondie sur la structure du programme et les interactions entre les différentes méthodes, suivie d’une phase d’implémentation visant à traduire ces concepts en un code opérationnel. Par exemple, la méthode « AfficherJeu » repose sur une double boucle imbriquée parcourant un tableau (int[] allumettes) généré par la méthode « Allumette ». La première boucle parcourt les indices du tableau, représentant les différentes lignes disponibles dans le jeu, tandis que la seconde boucle récupère les valeurs associées à ces indices, correspondant au nombre d’allumettes par ligne. Cette approche permet de représenter visuellement l’évolution des lignes d’allumettes à chaque étape de la partie.

Ainsi, l’élaboration des conceptions simples a consisté à structurer les fonctionnalités de manière logique et cohérente, tandis que l’implémentation s’est concentrée sur leur mise en œuvre technique à travers des algorithmes précis et adaptés. Ce travail combiné a permis d’atteindre les objectifs pédagogiques fixés, tout en garantissant un fonctionnement optimal et une expérience utilisateur fluide.

Faire des essais et évaluer leurs résultats en regard des spécifications :

Pour répondre aux attentes de l’apprentissage critique « Faire des essais et évaluer leurs résultats en regard des spécifications », j’ai mis en place diverses méthodes de test permettant de vérifier la robustesse et la conformité de mes implémentations face aux spécifications. Ces tests incluent des cas normaux, des cas limites et des cas d’erreurs, afin d’assurer la fiabilité des méthodes utilisées dans le jeu de Nim.

Dans le cadre de cette SAE, j’ai notamment développé des tests pour des méthodes essentielles au bon fonctionnement du jeu. Un exemple significatif est la méthode « laGagne », qui détermine les actions de l’ordinateur dans la version « gagne quand il en a l’occasion ». Pour valider cette méthode, j’ai utilisé des méthodes de test comme « testTrouverIndiceNonVide » et « testCasTrouverIndiceNonVide », qui sont conçues pour tester et évaluer une autre méthode clé, « trouverIndiceNonVide ».