2
0
Quatre-en-ligne (Puissance 4)
Je vous propose un nouvel élément à utiliser : Quatre-en-ligne
C'est un "Puissance 4" écrit pour Lazarus.
Les points intéressants sont, d'une part, l'emploi de la bibliothèque BGRABitmap, et d'autre part la façon dont l'interface graphique communique avec le moteur de jeu.
Le moteur est une application console séparée. A chaque fois que l'ordinateur doit jouer, l'interface lance le moteur, au moyen de la fonction RunCommand() de l'unité Process. La liste des coups déjà joués est passé en paramètre, sous la forme d'une chaîne composée de caractères compris entre "1" et "7". Le moteur initialise sa grille interne en fonction de cette chaîne, et renvoie son coup. L'interface peut donc être utilisée avec un autre moteur, sans être recompilée, le nom du moteur étant contenu dans un fichier de configuration.
Téléchargement
Je me suis rendu compte de certaines lacunes dans mon programme. Si je clique sur une colonne pleine, le pion est quand même ajouté. Si je clique pendant qu'un pion est encore en train de tomber, le pion qui tombe s'arrête et un deuxième pion de la même couleur est ajouté. J'oublie toujours de prendre en compte l'usage incorrect que l'utilisateur pourrait faire du programme. :)
Voici le squelette d'un moteur en Pascal. Celui-ci joue au hasard. A vrai dire, il n'est pas tout à fait complet, car il ne vérifie pas si la chaîne passé en paramètre ne correspond pas à une partie déjà finie par la victoire de l'un ou l'autre des joueurs. Mais enfin, c'est pour montrer le principe.
program hasard;
{$APPTYPE CONSOLE}
var
h: string; // histoire de la partie
t: array[1..7]of integer = (0, 0, 0, 0, 0, 0, 0); // tableau pour compter les pions
r: integer; // réponse
i: integer; // index
v: boolean = true; // validité de la chaîne
begin
h := ParamStr(1);
for i := 1 to Length(h) do
if (h >= '1') and (h <= '7') then
Inc(t)
else
v := false;
if v then
for i := 1 to Length(h) do
if t > 6 then
v := false;
if v then
begin
Randomize;
repeat
r := Trunc(Random(7) + 1);
until t < 6;
end
else
r := 0;
Write(r);
end.
Une fois ce programme compilé, il n'y a plus qu'à modifier en conséquence le fichier options.ini.
blanc=utilisateur
noir=hasard.exe
Le moteur a été remplacé. Les défauts de la version précédente (signalés plus haut dans cette discussion) ont été corrigés. Enfin, plusieurs couleurs sont disponibles pour l'interface. (Pour modifier la couleur, il faut éditer manuellement le fichier options.ini et choisir l'une des valeurs disponibles : blue, gray, green, indigo.)
L'application console qui servait de moteur a été remplacée par une bibliothèque dynamique.
ça me rappelle un très vieux projet de Pascal Peyrmorte sur le jeu "Schlurp"...nom tiré du son produit par ce mini-jeu inclut dans "The 7Th Guest" (un des premiers jeu PC sur CDROM, ça ne nous rajeuni pas !)
le jeu avait la particularité de proposer un système de plugin pour contrôler l'IA ce qui a donné lieu à un petit concours de programmation.
http://peyremorte.fr/Programmation/S...rp/Schlurp.htm
En attendant, quel serait l'intérêt d'utiliser une DLL plutôt qu'un exécutable ?
