Tom Kerrigan's Simple Chess Program (TSCP)

Présentation
Voici le simple programme d'échecs de Tom Kerrigan en Pascal. La plus grosse partie du travail a été faite en l'an 2000 par Robert Lee. J'ai apporté quelques modifications, dont la plus importante est l'implémentation (basique mais suffisante) du protocole UCI. Vous pouvez jouer contre TSCP dans Arena.

Compilation testée : Delphi 7, Free Pascal 2.6.4.
Téléchargement
1  0 
Téléchargé 19 fois Voir les 6 commentaires
Détails
Catégories : Free Pascal
Avatar de Roland Chastain
Rédacteur / Modérateur
Voir tous les téléchargements de l'auteur
Licence : Autre
Date de mise en ligne : 31 octobre 2015




Avatar de anapurna anapurna - Membre expert https://www.developpez.com
le 23/12/2014 à 13:01
salut
il a l'air sympa le programme ^^

bon j'ai vite regardé les sources ... j'ai vu quelque petite modification assez simple a faire
par exemple dans les fonction d'eval je trouve cela assez perturbant de voir de couple de fonction similaire pour lequel un simple boolean et un if suffirait a regler le probleme

autre petit truc qui me gene le boucle for i:=0 to 63 do ... je les aurais remplacé par For i:= low(TBoardChess) to High(TBoardChess)
ce qui nous fais comprendre de suite que l'on parcours le plateau de jeux

ce n'est que des detail ... passont au chose serieuse maintenant l'implementation de l'UCI ... bin en fait je l'ai pas vu ^^
... il serait peut etre pas mal de refaire le programme a l'aide d'objet afin de bien separer les differnetes couches
Graphique ... moteur ... protocole ...

sinon ça a vraiment l'air interessant
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 23/12/2014 à 13:35
@anapurna

Merci pour le coup d'œil et les suggestions.

Pour les fonctions en double, oui j'y ai déjà pensé mais je voulais finir de relire le code et de le comprendre avant de chercher à l'améliorer. Mais l'idée est bonne : je la mets sur la liste des choses à faire. D'accord aussi pour Low() et High().

Pour les commandes UCI, elles sont interprétées et traitées à la volée dans le programme principal. C'est du vite fait mais ça marche et ça montre le principe des choses.

Pour la programmation "objet", je l'envisage aussi mais là encore, pas pour tout de suite. Je voudrais d'abord comprendre en détail comment le code fonctionne, ce qui n'est pas encore le cas.

Il n'y a pas d'interface graphique. Le seul moyen d'utiliser le programme est le protocole UCI.
Avatar de anapurna anapurna - Membre expert https://www.developpez.com
le 23/12/2014 à 14:33
salut ,

c'est bien ce que j'avais compris en faite ... et si j'ai bien tout suivi c'est arena qui sert de GUI ... ^^
ce qui m'a gené c'est que j'ai telechargé un fichier definisant la norme UCI et que je ne trouvais pas les commandes
du dis protocole ^^ c'est assez perturbant ...
mais bon si ça marche c'est que j'ai pas due tout comprendre
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 23/12/2014 à 18:52
Il y a un assez grand nombre de commandes et je ne les connais pas toutes, mais pour une partie standard dans Arena, trois ou quatre commandes suffisent. Pour essayer, on peut les taper à la main après avoir lancé l'exécutable.

Première commande à entrer, uci. Le moteur répond id name ..., id author ..., uciok. Ensuite, on communique au moteur la position. Arena fait comme ça : position startpos moves e2e4 e7e5, où "e2e4" et "e7e5" sont les coups déjà joués.

Ensuite go, pour demander au moteur de jouer. Normalement, il y a différentes options, qui permettent de choisir le temps disponible pour la recherche du coup, ou la profondeur de recherche. Je n'ai pas (encore) implémenté tout ça. Dans l'état actuel, dès que le moteur voit go, il ignore les options de temps et de profondeur et cherche un coup à la profondeur quatre. Quand il a trouvé, il répond : bestmove d2d4.

Dans Arena, il faut choisir l'option "Installer nouveau module". Attention, il faut aller sélectionner le mode UCI dans les options du module. Et c'est tout : vous pouvez jouer.

Il y a une chose pratique dans Arena, c'est qu'on peut consulter le journal des échanges entre Arena et le "module" :

Code X : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2014-12-23 19:16:04,164 Arena 3.5 
2014-12-23 19:16:04,211Font Arena Chess Figurine MISSING 
 
2014-12-23 19:16:05,492**----------Nouvelle partie---2014-12-23 19:16:05,492 mar. ------------- 
2014-12-23 19:16:05,726**screen: 1366x768 
2014-12-23 19:16:05,726**Monitors: 1 
2014-12-23 19:16:05,726**Monitor0: 1366x768 
2014-12-23 19:16:05,726**FormMonitor: 0 
2014-12-23 19:16:06,008**En chargement  1 
2014-12-23 19:16:33,864**----------Nouvelle partie---2014-12-23 19:16:33,864 mar. ------------- 
2014-12-23 19:16:38,463*1*---------------------------Démarre module 1 Tscp---------------------------- 
2014-12-23 19:16:38,463*1*Configured Engine 1 Type:   UCI 
2014-12-23 19:16:38,463*1*Engine 1 dir: C:\Atelier\Pascal\TSCP 
2014-12-23 19:16:38,463*1*Engine 1 commandline: C:\Atelier\Pascal\TSCP\tscp.exe xboard 
2014-12-23 19:16:38,588*1*Child Process Prio Adj:  PID 1932 conhost.exe 
2014-12-23 19:16:38,588*1*Engine 1 ProcessID: 4672 
2014-12-23 19:16:38,588*1*Engine 1 Prio:32 ThreadPrio:0 
2014-12-23 19:16:38,635<--1:Tom Kerrigan's Simple Chess Program (TSCP) 
2014-12-23 19:16:38,635<--1:Pascal version by Robert Lee and Roland Chastain 
2014-12-23 19:16:38,635-->1:uci 
2014-12-23 19:16:38,635<--1:Copyright 1997 Tom Kerrigan 
2014-12-23 19:16:38,635<--1:id name TSCP 
2014-12-23 19:16:38,635<--1:id author Tom KERRIGAN 
2014-12-23 19:16:38,635<--1:uciok 
2014-12-23 19:16:38,635*1*Child Process Prio Adj:  PID 1932 conhost.exe 
2014-12-23 19:16:38,650-->1:isready 
2014-12-23 19:16:38,729<--1:readyok 
2014-12-23 19:16:38,885*1*Start calc, move no: 1 
2014-12-23 19:16:38,885-->1:ucinewgame 
2014-12-23 19:16:38,885-->1:isready 
2014-12-23 19:16:38,885<--1:readyok 
2014-12-23 19:16:38,900-->1:position startpos moves e2e4 
2014-12-23 19:16:38,900-->1:go wtime 300000 btime 300000 winc 0 binc 0 
2014-12-23 19:16:38,947<--1:bestmove e7e5 
2014-12-23 19:16:38,947*1*Coup trouvé:e7-e5 
2014-12-23 19:16:42,274*1*Start calc, move no: 3 
2014-12-23 19:16:42,274-->1:position startpos moves e2e4 e7e5 f1c4 
2014-12-23 19:16:42,274-->1:go wtime 297063 btime 299958 winc 0 binc 0 
2014-12-23 19:16:42,477<--1:bestmove d8g5 
2014-12-23 19:16:42,493*1*Coup trouvé:Dd8-g5 
2014-12-23 19:16:50,819**----------Nouvelle partie---2014-12-23 19:16:50,819 mar. -------------

Voilà, j'espère que c'est un peu plus clair comme ça.
Avatar de anapurna anapurna - Membre expert https://www.developpez.com
le 23/12/2014 à 19:22
oui je les ai vu ... dans le dpr
j'avou que j'avais pas regardé dedans avant donc forcement c'est moins facile pour les voir
donc si j'ai bien compris le principe ça marche avec un fichier texte partagé qui est remplis au fur et a mesure de la partie
Avatar de Roland Chastain Roland Chastain - Rédacteur/Modérateur https://www.developpez.com
le 31/10/2015 à 13:42
Bonjour !

Petite mise à jour de TSCP Pascal. Le code a été retravaillé et surtout on a ajouté une documentation générée à partir du code source avec PasDoc.

La documentation manque encore un peu de contenu mais donne quand même des indications utiles, notamment sur les types de l'unité TSCPCore.
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Responsables bénévoles de la rubrique Pascal : Gilles Vasseur - Alcatîz -