Copyright: ® Philippe BASCIANO


Menu Principal
PegSolit™ main menu :

Menu principal de PegSolit™ :

'Y'en a marre des jeux de cartes, Enfin un jeu de réussite différent !'

'Stop playing cards, just enjoy PegSolit, Such A Different Solitaire Game !'


English help main menu
English (Or something that looks like, a bit).

The aim of the game is to remove the pegs from the board. You have to move the pegs by capturing them like in the checkers. A capturing move is a jump and here, it is the only move allowed. The winning configuration is an empty board with one single peg on a random place.

There are several initial boards. The english, the french and the egyptian board. The english board is the most famous, it is composed of 32 places. The french one is the same plus 4 pegs in the 4 angles. The 'egyptian' board is a triangular board (15 places). For each one of these boards, the empty starting place is arbitrary chosen. PegSolit™ permits to solve particular configurations. You put the pegs on the board by yourself, and you start the search once you have the configuration that you wished.

Creating a particular configuration	Playing by yourself

How to start the search	Giving up the search

Modifying the parameters	Various comments

Save, Load	Taking Back

The 4 numbers	Initialisation file

Credits


Creation of a configuration
Create a configuration :

You use the arrows or the numeric pad. (Up, Down, Right, Left, Page Down, Page Up, Home and End). You can move the cursor of the mouse on the board. To add a peg, press the 'insert' key, to remove a peg, press 'del'.

You can also use the mouse, click the left button to remove a peg, the right one to add a peg. If you press the F5,F6,F7 function key, the program will load the saved classic configurations. If you press F8 or if you click on the 'Vacuum' button, the board will be cleared.


Playing by yourself
Playing by yourself :

If you wish to solve the Solitaire by yourself, you can select a peg by clicking on it. Once you have clicked, you move it by keeping the button pressed, and you can drop it on an allowed place.

By the same way, you can select or drop a peg by pressing the space bar or the 'enter' key. The peg under the mouse cursor will be selected if the place is full, or a peg will be created if the place is empty.

If you're playing on the egyptian board, you can move the pegs in diagonal.


Taking back
Taking Back :

- Press F4.

- Press BackSpace key.

- Click on the middle button of your mouse (if you have a three button one !).

- Click on the 'Back !' button.

If you click on the right button of your mouse, or if you set a classical board, it will erase the saved configurations !


Save and load a solution
Save and Load :

When the 'xxx s processing' or 'You win' dialog box appears, press the 'Save' or 'Load' button. If you wish to load a configuration directly, set 2 pegs besides each others, on an empty board, and launch the search !


The 4 numbers
The 4 numbers at the top right of the main dialog :

- Top left : The number of pegs on the board.

- Top right : The number of playable jumps.

- Bottom Left : n, the first Bruijn' sum.

- Bottom Right : m, the second Bruijn' sum.

The Bruijn's sums are constant for a given board, and keep their value if you move correctly a peg on the board. If you set one single peg on the board (where you like), these two sums are different from 0. So if one of this sum is equal to 0 at the beginning (when you set the complete board), you can say immediatly that there is no solution !

If you're interested by this theory, here is the source code translated into Pascal for the calculation of these sums :

CONST bs_table = 6; {nb of places - 1}

TYPE Solitaire = ARRAY[0..bs_table,0..bs_table] OF BOOLEAN;

{an array of palces}

{(i,j) pleine ssi A[i,j]}

CONST _plusG4 : ARRAY[0..3,0..3] OF BYTE {sum in G4 Group}

= ((0,1,2,3),

   (1,0,3,2),

   (2,3,0,1),

   (3,2,1,0));

FUNCTION Bruijn_N(A : Solitaire) : BYTE; {Sum n}

VAR i,j : BYTE;

    som : BYTE;

BEGIN

 som := 0;

 FOR i := 0 TO bs_table DO

  FOR j := 0 TO bs_table DO

   IF (A[i,j]) THEN som := _plusG4[som,((i+j+2)MOD 3)+1];

 Bruijn_N := som;

END;

FUNCTION Bruijn_M(A : Solitaire) : BYTE; {Sum m}

VAR i,j : BYTE;

    som : BYTE;

BEGIN

 som := 0;

 FOR i := 0 TO bs_table DO

  FOR j := 0 TO bs_table DO

   IF (A[i,j])

    THEN som := _plusG4[som,((i-j+6)MOD 3)+1];

 Bruijn_M := som;

END;


Starting the search
Starting the search :

You just have to click on the 'Search' button. If the program find a solution, the 'xxx s processing' box will show. And you can see all the moves you've made to reach the last board. The pogram can tell you that there is no solution, or in most of the cases, it will tell you that it hasn't found a solution, and you will have to modify the different parameters. If you have selected a depth greater than 10, you could have not enough memory to solve the problem. Click on the '386 extended' icon of the configuration panel, or buy some RAM !.

But, *Generally* if there is a solution, PegSolit finds it, with a depth less than 10.

Important note:

PegSolit prefers this configuration :

  ...                                ooo

  ...                                ooo

..o.o..                            ooooooo

ooo.ooo   to this configuration:   ooo.ooo

ooooooo                            ..o.o..

  ooo                                 ...

  ooo                                 ...

So choose the good symetric one ! Take care that it is better to select a configuration which pegs are in the bottom right corner to a configuration which pegs are in the top left one !


Giving up the search
Giving up the search :

Click on the 'Abort' button. Be careful, if you wish to leave PegSolit™ (Alt+F4 function key, or 'Close' item of the system menu) you must first give up the search, if the program is currently working.


Modify the depth
Modify the parameters :

By pressing the F3 function key you will have the 'Modify parameters' dialog box. Be careful : If you use big depths (above 10), the time of search will increase a lot. The default depth is 0. This value is enough to solve the classic place of the english Solitaire. But, it won't be enough to find a solution if you're trying to solve other elaborated configurations. You must increase this value, and wait a bit more to find a solution or to know, may be, if there isn't one.

You can change the pruning setting, if you're working with the 'deep pruning' option this configuration :

  ...

  o..

.......

...oo..

..o....

  ...

  ...

will be eliminated, because the highest peg is far from the others.

Those parameters aren't used with the egyptian board. In this case, the program will tell you for sure, if there is or not a solution.

Click on one of the 4 bitmaps to set the board and the peg that you wish.


Various comments
Various comments :

On a DX 25 Mhz 386,  RAM 4 Mo (Configuration on which the program has been created), the program solves the classic configuration of the english Solitaire in 10s, with a depth equal to 0, in the 'deep pruning' mode. The french solitaire is solved in 12s with the same parameters. With a pentium or a 486 DX2 66/80, it might take less than 1 or 2 seconds !

To create the 3D controles, I used the Microsoft Ctrl3d.dll library. To save the configrations on the .ini file I used the Microsoft CommCtrl.dll library. (Thanks to CHRISTOPHE MAGIN PRIART, for his article published in Pascalissime, a french Pascal programming review).

PHILIPPE BASCIANO, June, 30th, 1994, 21h30.

If you find any bugs in the program, or wish to make comments or suggestions, please write me : mailing adress


Credits
Credits :

. OSCAR WADDELL, (I borrow one of his bitmap from his program Peg Puzzle).


The .ini file
The .ini file !

File : /windows/solit.ini :

[Solitaire Freeware Program]

; depth

Depth=0

; Initialisation of the board.

; 0=english, 1=french, 2=egyptian.

Kind=0

; pruning option

pruning=1

;GameSet

GameSet=2


Langue française
Français

Le but du jeu est de se débarrasser des fichets figurant sur le plateau. Vous devez déplacer les fichets (par prise successive comme au jeu de Dames), la prise étant ici le seul et unique mouvement autorisé. La configuration gagnante est le plateau vide, exceptée une case contenant un fichet. Cette case est quelconque sur le plateau.

Il existe plusieurs tableaux initiaux, les tableaux français, anglais et égyptien. Le tableau anglais est le plus couramment représenté, il se compose de 32 fichets. Le tableau français est identique avec en plus 4 fichets disposés aux 4 angles. Le tableau égyptien, que j'ai moi-même dénommé ainsi parcequ' il représente une pyramide, se compose de 15 fichets. Sa particularité est que l'on peut se déplacer en diagonal. PegSolit™ permet la résolution de configurations particulières : vous disposez vous-même les fichets sur les cases, et vous lancez la  recherche une fois obtenue la configuration que vous souhaitiez.

Créer une configuration	Jouer manuellement

Lancer la recherche	Abandonner la recherche

Modifier les paramètres	Remarques diverses

Annuler le dernier mouvement	Sauver, charger

Les afficheurs numériques	Remerciements

Le fichier d'initilialisation


Création d'une configuration
Créer une configuration :

Pour cela vous disposez des flèches directionnelles (Haut, Bas, Page Down, Page Up, Home et Fin) qui vous permettent de déplacer le curseur de la souris sur le tableau du Solitaire. Pour ajouter un fichet, appuyer sur la touche 'Insert', pour supprimer un fichet sur la touche 'Suppr'.

Vous pouvez tout aussi bien tout créer à la souris (bouton droit pour positionner un fichet ou pour en enlever un). Les contrôles claviers ne sont programmés que pour les cas des Solitaires français et anglais.

En particulier, vous pouvez partir des configurations classiques (anglaise, française ou égyptienne). Presser les touche F5, F6, F7 a pour effet de charger les configurations classiques. Pressez F8 ou cliquer sur le bouton 'Vacuum' pour vider le tableau de tous ses fichets.


Jouer manuellement
Jouer manuellement :

Si vous le désirez, vous pouvez vous entraîner manuellement sur la plateau. Pour cela vous pouvez sélectionner un fichet en cliquant dessus, (clic gauche) ceci aura pour effet de transformer le curseur de la souris en fichet. Pour déplacer le fichet, maintenir le bouton de la souris pressé, bouger la souris jusqu'à ce que le curseur se trouve au dessus d'une case jouable, puis relâcher le bouton de la souris.

De la même manière, vous pouvez sélectionner (ou relâcher) un fichet en pressant la barre d'espacement ou la touche 'Entrée'. Ceci a pour effet de sélectionner le fichet sous lequel se trouve le curseur de la souris, ou de déposer le fichet sur une case jouable... Si vous gagnez, la boîte de dialogue 'You win' apparaît, et vous pouvez revoir tous les coups qui vous ont permis d'atteindre la position finale. Vous pouvez alors sauver cette solution ou charger une configuration pré-sauvegardée.


Lancement de la recherche
Lancer la recherche :

Pour cela, il vous suffit de presser la touche F2, ou plus simplement de cliquer sur le bouton 'Search'. Plusieurs cas se présentent alors. Si le programme trouve une solution, la boîte de dialogue 'xxx s processing' apparaît et vous pouvez parcourir les coups qui mènent à la solution. Le programme peut affirmer aussi qu'il n'y a pas de solution. Plus fréquemment, le programme ne trouvera pas de solution, et indiquera qu'il faut modifier les paramètres de recherche pour connaître s'il y en a une ou s'il n'y en a pas.

Si vous avez poussé la profondeur de recherche au dessus de 10, il se peut que vous n'ayez pas suffisamment de mémoire pour que le calcul s'effectue jusqu' au bout, dans ce cas augmentez la mémoire virtuelle de votre configuration (icône '386 étendu' du panneau de configuration) ou achetez de la RAM !

En général, s'il y a une solution, PegSolit saura la trouver avec une profondeur inférieure à 10.

Remarque importante :

PegSolit préfère de loin la configuration :

  ...                             ooo

  ...                             ooo

..o.o..                         ooooooo

ooo.ooo   à la configuration:   ooo.ooo

ooooooo                         ..o.o..

  ooo                              ...

  ooo                              ...

Choisissez la bonne symétrie, sachant qu'il vaut généralement mieux que les fichets soient 'en bas à droite', plutôt qu''en haut à gauche' !


Annuler le dernier mouvement
Annuler le dernier mouvement :

- Cliquez sur le bouton 'Back !'.

- Si vous possédez une souris 3 boutons, cliquez sur le bouton du milieu .

- Pressez la touche BackSpace.

- Pressez la touche F4.

Attention, si vous positionnez un fichet en cliquant sur le bouton de droite de la souris, vous annulez les sauvegardes. Même effet si vous choisissez une configuration de départ, ou si vous videz le plateau.


Abandonner la recherche
Abandonner la recherche :

Cliquez sur le bouton 'Abort'. Attention, si vous désirez quitter PegSolit™ (touche Alt+F4, bouton 'Exit', ou activation du menu système + Fermeture) vous devez préalablement abandonner la recherche, s'il y en a une en cours.


Modification de la profondeur
Modifier les paramètres :

La touche F3 lance la boîte de dialogue en question.

Vous pouvez modifier la profondeur de recherche. Attention, pour des profondeurs conséquentes (plus de 10), le temps de recherche s'accroît considérablement. Par défaut la profondeur est de 0. (Cette valeur s'avère suffisante pour les cas classiques des solitaires anglais et français). Malheureusement, elle se révèle insuffisante pour trouver une solution (ou affirmer qu'il n'y en a pas) pour des cas beaucoup plus élaborés. Vous devez alors augmenter cette valeur, et patienter un peu plus pour enfin, peut être, connaître une solution.

Vous avez aussi la possibilité de modifier le mode d'élagage effectué par le programme (Grosso modo, le programme rejette les configurations dans lesquels il existe un fichet 'isolé', cela s'avère efficace dans la majorité des cas, mais il existe des cas pour lesquels il ne doit pas y avoir d'élagage pour trouver une solution).

Ex :

  ...

  o..

.......

...oo..

..o....

  ...

  ...

Cette configuration sera éliminée(1) dans le mode 'deep pruning', car le fichet du dessus est considéré comme 'isolé' du reste du jeu. En revanche, si vous lancez la recherche dans le mode 'low pruning', la solution sera trouvée.

Ces paramètres n'influent pas sur la recherche du solitaire égyptien. Dans ce cas précis, le programme saura vous donner une solution ou en infirmer l'existence.

(1) Par ailleurs si vous partez d'une configuration ayant moins de 12 fichets, le programme n'élaguera pas, ce qui évite, en fait, les cas comme celui présenté en exemple.

Cliquez sur une des 4 bitmaps représentées, pour modifier l'aspect du tableau et des fichets.


Remarques particulières
Remarques particulières :

Sur un 386 DX 25 Mhz, 4 Mo de RAM (Configuration sur laquelle a été conçue l'application), la résolution du Solitaire anglais, classique, met 10s avec une profondeur de 0. La résolution du solitaire français met 12s, avec la même profondeur. (Tout cela avec un élagage massif). Pour le Solitaire égyptien, tout dépend de la case que vous enlevez au départ, le temps varie entre 5 et 30 secondes. J'ai joins au fichier zippé plusieurs fichiers .pgs qui contiennent des sauvegardes de cas classiques, que les joueurs de Solitaire connaissent bien. Vous pouvez les charger pour connaître les solutions et les temps de recherche (courts !) sur mon OLD-PC.

PHILIPPE BASCIANO, 20 avril 1995, 21h30.

Si vous avez des remarques particulières, voici mon adresse postale.


Sauver, Charger une configuration précalculée.
Sauvegarder, Charger une solution.

Lorsque la boîte de dialogue 'You Win' ou 'xxx s processing' apparaît, vous cliquez sur le bouton 'Save' ou 'Load'. Si vous désirez accéder directement à cette boîte pour charger une solution, positionnez deux fichets côte à côte sur un tableau vide et lancez la recherche !

Attention, vous ne pouvez charger que des tableaux classiques (français ou anglais) si vous venez de résoudre un tableau classique, de même pour un tableau égyptien ...


Afficheurs numériques
Les afficheurs numériques.

- Coin haut gauche : Nombre de fichets sur le tableau.

- Coin haut droite : Nombre de coups jouables.

- Coin bas gauche : m, la première somme de Bruijn.

- Coin bas droite : n, la deuxième somme de Bruijn.

Les sommes de Bruijn sont des invariants i.e. des valeurs qui restent inchangées si vous déplacez un fichet quelconque sur le plateau, du moment que le coup est licite. Sachant que ces sommes ne valent jamais 0, pour un unique fichet (placé n'importe où sur les plateaux français ou anglais), si vous partez d'un tableau dont une des sommes vaut 0, on peut affirmer dès le départ qu'il n'y a pas de solution. Ces sommes servent aussi pour le solitaire 'égyptien' (elles sont égales tout le temps).

Pour les petits programmeurs et les petits mathématiciens intéressés, voici le code, simplifié, et traduit en Pascal, que j'ai implanté pour calculer ces sommes :

CONST bs_table = 6; {nb de cases - 1}

TYPE Solitaire = ARRAY[0..bs_table,0..bs_table] OF BOOLEAN;

{un tableau de cases}

{(i,j) pleine ssi A[i,j]}

CONST _plusG4 : ARRAY[0..3,0..3] OF BYTE {Addition dans le Groupe G4}

= ((0,1,2,3),

   (1,0,3,2),

   (2,3,0,1),

   (3,2,1,0));

FUNCTION Bruijn_N(A : Solitaire) : BYTE; {Somme n}

VAR i,j : BYTE;

    som : BYTE;

BEGIN

 som := 0;

 FOR i := 0 TO bs_table DO

  FOR j := 0 TO bs_table DO

   IF (A[i,j]) THEN som := _plusG4[som,((i+j+2)MOD 3)+1];

 Bruijn_N := som;

END;

FUNCTION Bruijn_M(A : Solitaire) : BYTE; {Somme m}

VAR i,j : BYTE;

    som : BYTE;

BEGIN

 som := 0;

 FOR i := 0 TO bs_table DO

  FOR j := 0 TO bs_table DO

   IF (A[i,j])

    THEN som := _plusG4[som,((i-j+6)MOD 3)+1];

 Bruijn_M := som;

END;


Fichier .ini
Le Fichier d'initialisation !

Contenu du fichier /windows/PegSolit.ini :

[Solitaire Freeware Program]

; La profondeur de recherche.

Depth=0

; Niveau d'élagage.

Pruning=0

; Initialisation du genre du solitaire.

; 0=anglais, 1=français, 2=égyptien.

Kind=0

; N° du jeu (motif du fichet).

GameSet=2


Mon adresse postale
BASCIANO PHILIPPE

46 RUE DE CORNOUAILLE

22000 SAINT-BRIEUC

FRANCE


Remerciements
Remerciements !

. OSCAR WADDELL (A qui j'ai piqué une des bitmaps, provenant de son programme Peg Puzzle).

. CHRISTOPHE MAGIN PRIART, pour son article paru dans le Pascalissime de la période Avril - Juin 1994.

. MOK, pour ses plans 'Café au Mc Do' de Vandoeuvre', à 23h15.

. STEPHANE V., the Basic Chris Waddle Fan, pour ses plans Be Hap' , Batchi, Petites Bouteilles, Campus, Métro, qui m'ont beaucoup inspiré pour la création de ce jeu.

. PATRICE L. (Dont les lectures, Le Clézio en particulier ..., m'ont beaucoup influencé).

. Sszzuuuuttt, j'ai oublié les autres, ... à oui DUDU ... qui aurait joué un peu avec la première version de ce programme ... PH, BENOIT, LOIC et les autres, qui n'ayant pas aimé ma première version m'ont fait prendre pleinement conscience de ses limites ! (en espérant que celle-ci leur plaira davantage) ... et pis de toute façon on s'en fout y'a ce putain de TP compilo à finir, ce TP malg, et pis tous les partiels de Juin à réviser en particulier la B.D. et la Gestion ...