Hop là, petit repêchage du topic juste avant qu'il se fasse attraper par les méchants cadenas

!
Je refais une synthèse (complétée et remise à jour) du comportement que devront avoir les IA et les interface pour permettre à un humain de jouer (je qualifierai cependant génériquement le tout d'IA) ...
* Le jeu de Puissance 4 (rappel : 7 colonnes et 6 lignes) se joue sur TI 89/92+/V200
* Les IA peuvent être programmées en n'importe quel langage acceptée par ces calculatrices (TI-Basic, C, Asm)
* Les IA sont lancées à tour de rôle par un méta-programme, l'arbitre
* L'IA dispose d'un répertoire complet de nom quelconque pour y faire ce qu'elle veut
* Par défaut, le programme principal de l'IA s'appelle
joueur(), mais n'importe quel autre nom peut être choisi, il suffit d'en avertir le programme arbitre (ceci n'est pas de votre ressort, vous n'avez pas à vous en occuper)
* Le programme
joueur() (ou tout autre nom) ne devra pas utiliser d'arguments
* Pour communiquer avec l'arbitre, l'IA utilise 2 variables appelées par défaut
colonne (qui servira toute la partie) et
nom (qui ne servira qu'au début) ; là aussi, d'autres noms peuvent être choisis
* C'est au programme
joueur de gérer sa représentation de la partie en cours, en sachant uniquement dans quelle colonne vient de jouer son adversaire
* L'arbitre se charge de compléter les variables
colonne et
nom de l'IA qui va jouer, puis lance le programme principal
joueur()
* Une fois lancé (le répertoire courant est celui de l'IA),
joueur() analyse les variables
colonne et
nom, ainsi que toutes les variables de son répertoire qu'il aura jugé bon de créer pour enregistrer l'état de la partie, puis modifie en conséquence les variables
colonne et
nom avant de se terminer normalement
* Une fois le programme
joueur() terminé, l'arbitre récupère les variables
colonne et
nom modifiées et les vérifie, met à jour l'affichage graphique, avant de recommencer le cycle pour l'autre IA
* Lorsque
joueur() est lancé, la variable
colonne contient une valeur numérique (type NUM) entière comprise inclusivement entre -1 et 10
* Si
colonne = -1 :
>> l'IA sait qu'elle est le joueur 2 (pions X) et qu'une nouvelle partie a été lancée
>> la variable
nom contient une valeur numérique valant soit 1 (jeu sur 89), soit 2 (jeu sur 92+/V200)
>> la nouvelle partie n'étant pas encore commencée,
joueur() doit en profiter pour initialiser ses variables
>> au moment où
joueur() se termine et rend la main à l'arbitre, la variable
colonne doit toujours valoir -1, et la variable
nom doit contenir une chaîne de caractère nommant l'IA et faisant au maximum N caractères, N dépendant de la taille de l'écran de la calculatrice, donc dépend de la valeur de
nom (1 ou 2) au moment du lancement de
joueur() (je n'ai pas terminé la partie graphique de l'arbitre, donc je ne sais pas encore combien vaudront N, désolé ...)
* Si
colonne = 0 :
>> l'IA sait qu'elle est le joueur 1 (pions O) et qu'une nouvelle partie a été lancée
>> la variable
nom contient une valeur numérique valant soit 1 (jeu sur 89), soit 2 (jeu sur 92+/V200)
>> la nouvelle partie venant de commencer,
joueur() doit en profiter pour initialiser ses variables, avant de jouer le premier coup
>> au moment où
joueur() se termine et rend la main à l'arbitre, la variable
colonne doit contenir une valeur numérique entière comprise inclusivement entre 1 et 7, et désignant le numéro de la colonne jouée (les colonne sont numérotées normalement d'un bord à l'autre), et la variable
nom doit contenir une chaîne de caractère nommant l'IA et faisant au maximum N caractères, N dépendant de la taille de l'écran de la calculatrice
* Si
colonne est compris inclusivement entre 1 et 7 :
>> la variable
colonne contient le numéro de la colonne venant d'être jouée par l'adversaire
>> au moment où
joueur() se termine et rend la main à l'arbitre, la variable
colonne doit contenir le numéro de la colonne que l'IA décide de jouer, tandis que la variable
nom n'a dorénavant plus d'utilité
* Si
colonne = 8 :
>> l'IA sait qu'elle vient de gagner et que la partie est finie
>> si
nom = "N", l'IA a gagné par victoire 'normale', alors que si
nom = "D", l'IA a gagné par disqualification de l'adversaire
>> la partie venant de s'achever,
joueur() doit en profiter pour effacer ses variables au besoin
* Si
colonne = 9 :
>> l'IA sait qu'elle vient de perdre et que la partie est finie
>> si
nom = "N", l'IA a perdu par victoire 'normale' de l'adversaire, alors que si
nom = "D", l'IA a perdu par disqualification
>> la partie venant de s'achever,
joueur() doit en profiter pour effacer ses variables au besoin
* Si
colonne = 10 :
>> l'IA sait qu'il y a match nul et que la partie est finie
>> la partie venant de s'achever,
joueur() doit en profiter pour effacer ses variables au besoin
* Si une IA ne respecte pas les règles venant d'être définies sur la gestion des variables
colonne et
nom, ou si elle joue un coup interdit (dans une colonne pleine), elle est immédiatement disqualifiée
* Chaque IA dispose d'une zone graphique de l'écran où elle est libre d'afficher ce qu'elle veut (mais qu'elle doit elle-même effacer pour écrire par-dessus), zone qui est déterminée par son numéro de joueur (selon que
colonne vaille -1 ou 0 en début de partie) et la taille de l'écran (selon que
nom vaille 1 ou 2 en début de partie) (je n'ai pas terminé la partie graphique de l'arbitre, donc je ne sais pas encore quelles sont ces zones, désolé ...)
* Une fois la partie finie, le programme arbitre affecte dans son propre dossier des variables
colonne et
nom (ces noms ne peuvent pas être changés) qui pourront éventuellement être récupérée par un méta-méta-programme (typiquement, un programme d'algorithme génétique) avant de se terminer normalement :
>>
colonne vaudra soit 0 (match nul), soit 1 (IA 1 gagnante), soit 2 (IA 2 gagnante)
>>
nom vaudra soit "N" (fin de partie normale), soit "D" (fin de partie par disqualification d'une IA)
* Il est à noter que l'arbitre enregistre un log de chaque partie, et un petit programme annexe permet de visionner pas à pas ces parties
Si quelqu'un veut utiliser un algorithme génétique, donc un méta-méta-programme qui lance l'arbitre de nombreuses fois de suite, je me dépêcherai de terminer complètement l'arbitre pour donner ici comment se fait son interfaçage ...
@++