Arrivant à l’EPITA avec un bagage en programmation nul, mon premier travail fut celui d’apprendre le langage Pascal à l’aide du manuel Programmer en Turbo Pascal 7 de Claude Delannoy (édition Eyrolles). L’apprentissage des bases de l’algorithmique a du se faire rapidement afin de comprendre son groupe. Une fois ceci fait cela m’a permis de pouvoir réaliser des petits exercices du type de ceux en TP d’informatique et de TD d’algorithmique.
Langage Delphi orienté objet
De la même manière en me mettant dans le livre Delphi 3 de Dick Lantim (édition Eyrolles), j’ai pu réaliser un programme d’installation. Pour avoir une utilisation efficace de ce langage, il faut régulièrement regarder l’aide logicielle. Il y a dans ce programme une fonction qui permet la création de répertoire, et une autre qui copie les fichiers dans ce répertoire. Pour accéder à la création de répertoire, une deuxième fenêtre apparaît. Voici ci-dessous une représentation de ce bref programme.

Algorithme de cheminement
Les unités se déplaceront selon 16 directions.
Ma première idée qui est venu fut celle de faire en sorte que les unités se déplacent par lignes droites successives : l’unité regarde si elle est sur une diagonale parfaite (45°) du point de départ au point d’arrivée puis sur une petite diagonale (30 ou 60°), et finit par rejoindre le point d’arrivée en suivant l’axe horizontal ou vertical. Cet algorithme est bon pour tout trajet ou des unités peuvent marcher n’importe où. Comme dans 42 minutes pour vivre les unités se déplaceront en évitant les obstacles, il faut faire appel aux algorithmes de chemin le plus court. En étudiant un site américain sur ce sujet,
http://www.gamasutra.com/features/programming/19990212/sm_01.htm
j’avais trouvé un algorithme, nommé Simple
Trace, permettant de faire le contour de zones infranchissables, il était
pratique car il ne prenait pas beaucoup de ressources. Son défaut
est qu’il ne permet pas à des unités situées dans
une cavité d’en sortir, entre autres, comme nous le voir ci dessous.

Si une unité est coincée par un obstacle alors elle change de direction jusqu’à ce que le Tile d’après soit une zone où celle ci peut marcher. Le tout premier problème fut lorsque l’unité arrivait dans un coin en bas à droite, elle essayait de bouger face à elle et elle tournait dans le sens des aiguilles d’une montre. La première direction qu’elle pouvait utiliser était la direction inverse, puis elle regardait la direction suivante et ré avançait et ainsi de suite, l’unité marchait d’avant en arrière à l’infini. Pour éviter cela, je pensais qu’interdire de retourner sur leur pas serait une bonne idée, mais en fait, il arrive que les unités se coincent mais cela limite leur état de stupidité profonde. Cet algorithme serait donc parfait pour des troupes aux sols dotés d’une intelligence faible et comme le but de notre projet entre autre est le développement de l’intelligence artificielle, cet algorithme n’est pas en accord avec notre cahier des charges.
Pour obtenir le meilleur résultat, on pourrait utiliser l’algorithme Dijkstra mais l’algorithme A* reprend le même système que Dijkstra sauf qu’il évite de calculer ce qui se passe lorsque l’unité s’éloigne du but à atteindre.
