IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Compatibilité avec Linux d'un moteur d'échecs UCI [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut Compatibilité avec Linux d'un moteur d'échecs UCI
    Bonjour !

    J'ai fait un moteur de jeu d'échecs que j'ai appelé Alouette. C'est un moteur UCI. Il est pour le moment très simple et peu coriace mais il fonctionne bien (à ce que je vois) et il est capable de jouer aux échecs 960.

    Je cherche quelqu'un qui pourrait être intéressé par ce projet et faire une compilation Linux pour moi. Il y aura sûrement deux trois choses à retoucher dans le code mais rien de méchant je pense, vu que c'est une simple application console.

    Le code est là :
    https://github.com/rchastain/alouette

    Et voici, pour servir de référence, un fichier compressé contenant des exécutables pour Windows. alouette.exe est la version DEBUG. alouette32.exe et alouette64.exe sont la version RELEASE.

    alouette-20190429.zip

    Le programme à compiler est alouette.pas.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Salut,

    alors vit' vit' et sans réfléchir (parce que j'ai un autre chantier, suivez mon regard ), j'ai récupéré le zip, l'ai décompacté, suis allé dedans et là, en mode bourrin (je n'ai pas ouvert un seul fichier), j'ai tapé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    42
    43
    44
    45
    46
    47
    48
    49
    # fpc alouette.pas 
    Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
    Copyright (c) 1993-2012 by Florian Klaempfl and others
    Target OS: Linux for i386
    Compiling alouette.pas
    Compiling journal.pas
    journal.pas(16,5) Error: Identifier not found "class"
    journal.pas(16,5) Fatal: You need ObjFpc (-S2) or Delphi (-Sd) mode to compile this module
    Fatal: Compilation aborted
    Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
    #
    # fpc -S2 alouette.pas 
    Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
    Copyright (c) 1993-2012 by Florian Klaempfl and others
    Target OS: Linux for i386
    Compiling alouette.pas
    Compiling journal.pas
    Compiling joueur.pas
    Compiling echecs.pas
    Compiling damier.pas
    Compiling tables.pas
    echecs.pas(341,26) Error: String constant too long while ansistrings are disabled
    echecs.pas(354) Fatal: There were 1 errors compiling module, stopping
    Fatal: Compilation aborted
    Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
    #
    # fpc -Sd alouette.pas 
    Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
    Copyright (c) 1993-2012 by Florian Klaempfl and others
    Target OS: Linux for i386
    Compiling alouette.pas
    Compiling joueur.pas
    Compiling echecs.pas
    Compiling deplacement.pas
    Compiling meilleur.pas
    Compiling coups.pas
    coups.pas(166,12) Note: Local variable "passives" is assigned but never used
    Compiling roque.pas
    Compiling histoire.pas
    Compiling tablespiececase.pas
    Compiling tri.pas
    meilleur.pas(136,66) Note: Local variable "LBalanceMateriel" not used
    Compiling outils.pas
    Compiling performance.pas
    performance.pas(80,24) Error: Identifier not found "GetTickCount64"
    performance.pas(82,25) Error: Identifier not found "GetTickCount64"
    performance.pas(88) Fatal: There were 2 errors compiling module, stopping
    Fatal: Compilation aborted
    Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
    Ici je suis allé voir dans le fichier performance.pas, et j'ai tenté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //    t := GetTickCount64;
        t := GetTickCount;
        n := NombreCoups(p, i);
    //    t := GetTickCount64 - t;
        t := GetTickCount - t;
     
    # fpc -Sd alouette.pas 
    Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
    Copyright (c) 1993-2012 by Florian Klaempfl and others
    Target OS: Linux for i386
    Compiling alouette.pas
    Compiling performance.pas
    performance.pas(81,22) Error: Identifier not found "GetTickCount"
    performance.pas(84,23) Error: Identifier not found "GetTickCount"
    performance.pas(90) Fatal: There were 2 errors compiling module, stopping
    Fatal: Compilation aborted
    Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
    #
    Alors j'ai remis à l'origine et modifié le début ainsi, après avoir farfouillé dans lazutf8sysutils :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    uses
     
      {$IF defined(Linux)}
      BaseUnix,
      Linux,
      {$ENDIF}
      SysUtils, Deplacement, Coups, Roque, Damier, Tables, Journal, Tri;
     
    {$IF defined(Linux) and not defined(GetTickCountTimeOfDay)}
    function GetTickCount64: QWord;
    var
      tp: timespec;
    begin
      clock_gettime(CLOCK_MONOTONIC, @tp); // exists since Linux Kernel 2.6
      Result := (Int64(tp.tv_sec) * 1000) + (tp.tv_nsec div 1000000);
    end;
    {$ELSE}
    function GetTickCount64: QWord;
    var
      tp: TTimeVal;
    begin
      fpgettimeofday(@tp, nil);
      Result := (Int64(tp.tv_sec) * 1000) + (tp.tv_usec div 1000);
    end;
    {$ENDIF}
    et là, en rappelant la dernière commande, ça a compilé, si si !

    Mais l'exécution c'est une autre affaire (^C c'est moi qui tape ctrl-c pour l'arrêter, bien obligé car il ne se passe rien) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # ./alouette 
    Alouette 0.0.5
    ^C
    # ./alouette -h
    Alouette 0.0.5
    ^C
    # ./alouette --help
    Alouette 0.0.5
    ^C
    #
    Un minimum d'aide aurait été bienvenu (-h et/ou --help c'est le standard, et le minimum sous *nux), ou à tout le moins quelques lignes dans alouette.pas ou dans le readme, mais je n'y ai rien trouvé…

    À toi pour la suite,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Merci beaucoup Jipété !

    C'est vrai qu'il faudrait que je fasse un effort sur la documentation.

    Pour essayer rapidement le programme (mais manifestement il fonctionne, d'après ce que tu as montré), tu peux taper uci, puis quit.

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    C:\Roland\pascal\echecs\alouette>alouette
    Alouette 0.0.5
    uci
    id name Alouette 0.0.5
    id author Roland Chastain
    option name UCI_Chess960 type check default false
    uciok
    quit
    
    C:\Roland\pascal\echecs\alouette>

    Ou alors uci, puis position startpos, puis go, puis quit.

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    C:\Roland\pascal\echecs\alouette>alouette
    Alouette 0.0.5
    uci
    id name Alouette 0.0.5
    id author Roland Chastain
    option name UCI_Chess960 type check default false
    uciok
    position startpos
    go
    bestmove b1c3
    quit
    
    C:\Roland\pascal\echecs\alouette>

    Après, pour jouer une partie, tu es supposé utiliser une application qui se chargera pour toi de faire tout ça. Mais si la manipulation ci-dessus se passe comme prévu, c'est que le programme fonctionne.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Ou alors uci, puis position startpos, puis go, puis quit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # ./alouette 
    Alouette 0.0.5
    uci
    id name Alouette 0.0.5
    id author Roland Chastain
    option name UCI_Chess960 type check default false
    uciok
    position startpos
    go
    An unhandled exception occurred at $0806FF1C :
    EThread : Semaphore init failed (possibly too many concurrent threads)
      $0806FF1C
      $08048589
     
    #


    T'as du bol, je viens il y a 5 minutes de terminer mon cercle !
    Je vais googler ce message et je reviens…

    EDIT : même pas 10 minutes + tard :
    Cette discussion m'a mis sur la piste, j'ai donc modifié ton alouette.pas ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    uses
      {$IF defined(Linux)}
      cthreads,
      {$ENDIF}
      Classes, SysUtils, Journal, Joueur, Echecs, Outils,
    l'ai recompilé sans souci, et relancé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # ./alouette 
    Alouette 0.0.5
    uci
    id name Alouette 0.0.5
    id author Roland Chastain
    option name UCI_Chess960 type check default false
    uciok
    position startpos
    go
    quit
    #
    C't'un peu frustrant, j'dirais, mais bon, ça ne m'a pas explosé à la figure, c'est bon signe.

    Tu veux le binaire (600 ko) dans un zip (220 ko) en pj ?

    EDIT 2 :
    T'auras vraiment eu du bol, car
    T'as du bol, je viens il y a 5 minutes de terminer mon cercle !
    je me suis enflammé trop vite et il reste un souci, j'y retourne…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    @Jipété

    Merci pour ta contribution. Dans un autre projet déjà compatible Linux, j'avais ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    uses
    {$IFDEF UNIX}
      cthreads, cwstring,
    {$ENDIF}
      Classes, SysUtils,
    J'aurais dû l'ajouter dès le début, ce qui t'aurait évité d'avoir à faire des recherches là-dessus.

    Peut-être que cwstring va résoudre les problèmes qui restent ?

    Non, je n'ai pas besoin du binaire pour le moment. On m'a signalé deux beugues que je suis occupé à corriger. Je préfère attendre d'avoir fait la correction avant de te solliciter pour les fichiers binaires.

    Mais je vais d'ores et déjà intégrer tes modifications.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Bonjour Roland,

    Par facilité j'ai chargé ton source dans l'éditeur natif de Free Pascal (je ne suis pas très rompu à la compilation en ligne de commande avec fpc).
    J'ai dû rajouter les options de compilation {$mode objFPC} et {$H+} pour compiler.

    L'exécutable fonctionne comme attendu :
    [alcatiz@Alcatiz-PC alouette-master]$ ./alouette
    Alouette 0.0.5
    uci
    id name Alouette 0.0.5
    id author Roland Chastain
    option name UCI_Chess960 type check default false
    uciok
    quit
    [alcatiz@Alcatiz-PC alouette-master]$
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Merci Alcatîz.

    La ligne de commande, avec les mêmes options, serait la suivante :

    fpc -Mobjfpc -Sh alouette

    Si tu as le temps, j'aimerais savoir si le moteur te renvoie bien un bestmove xxxx si tu lui dis position startpos puis go. Il semble que chez Jipété ça ne fonctionnait pas.

    Au fait, j'ai corrigé deux beugues importants depuis l'autre jour donc, si vous avez le temps de faire un nouvel essai, ce serait bien d'utiliser le code le plus récent.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  8. #8
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Voilà l'erreur retournée après l'exécution des deux commandes que tu as indiquées :
    [alcatiz@Alcatiz-PC alouette-master]$ ./alouette
    Alouette 0.0.5
    position startpos
    go
    This binary has no thread support compiled in.
    Recompile the application with a thread-driver in the program uses clause before other units using thread.
    Runtime error 232 at $000000000041B3D3
    $000000000041B3D3
    $0000000000433C9A
    $000000000040104C

    [alcatiz@Alcatiz-PC alouette-master]$
    Si je rajoute l'unité CThreads dans la clause uses, il n'y a plus de plantage mais pas non plus l'affichage attendu :
    [alcatiz@Alcatiz-PC alouette-master]$ ./alouette
    Alouette 0.0.5
    position startpos
    go
    quit
    [alcatiz@Alcatiz-PC alouette-master]$
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Bonjour,
    Citation Envoyé par Roland Chastain Voir le message
    Au fait, j'ai corrigé deux beugues importants depuis l'autre jour donc, si vous avez le temps de faire un nouvel essai, ce serait bien d'utiliser le code le plus récent.
    je ne comprends pas : l'autre jour j'ai signalé des erreurs et comment les corriger, là je reprends les nouvelles sources et je me reprends les mêmes erreurs !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    # fpc alouette.pas 
    Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
    Copyright (c) 1993-2012 by Florian Klaempfl and others
    Target OS: Linux for i386
    Compiling alouette.pas
    Compiling journal.pas
    journal.pas(16,5) Error: Identifier not found "class"
    journal.pas(16,5) Fatal: You need ObjFpc (-S2) or Delphi (-Sd) mode to compile this module
    Fatal: Compilation aborted
    #
    # fpc -Mobjfpc -Sh alouette // la commande que tu suggères à Alcatiz
    Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
    Copyright (c) 1993-2012 by Florian Klaempfl and others
    Target OS: Linux for i386
    Compiling alouette.pas
    Compiling journal.pas
    journal.pas(34,3) Note: Local variable "vName" is assigned but never used
    Compiling joueur.pas
    Compiling echecs.pas
    Compiling damier.pas
    Compiling tables.pas
    Compiling deplacement.pas
    Compiling meilleur.pas
    Compiling coups.pas
    coups.pas(167,12) Note: Local variable "passives" is assigned but never used
    coups.pas(280,12) Note: Local variable "passives" is assigned but never used
    coups.pas(280,22) Note: Local variable "toutes" is assigned but never used
    coups.pas(281,9) Note: Local variable "k" not used
    Compiling roque.pas
    Compiling histoire.pas
    Compiling tablespiececase.pas
    Compiling tri.pas
    meilleur.pas(143,66) Note: Local variable "LBalanceMateriel" not used
    Compiling outils.pas
    Compiling performance.pas
    performance.pas(80,24) Error: Identifier not found "GetTickCount64"
    performance.pas(82,25) Error: Identifier not found "GetTickCount64"
    performance.pas(88) Fatal: There were 2 errors compiling module, stopping
    Fatal: Compilation aborted
    Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
    #
    # fpc -Sd alouette.pas // la commande qui a bien compilé chez moi au final avec mes corrections
    Free Pascal Compiler version 2.6.2 [2013/03/17] for i386
    Copyright (c) 1993-2012 by Florian Klaempfl and others
    Target OS: Linux for i386
    Compiling alouette.pas
    Compiling performance.pas
    performance.pas(80,24) Error: Identifier not found "GetTickCount64"
    performance.pas(82,25) Error: Identifier not found "GetTickCount64"
    performance.pas(88) Fatal: There were 2 errors compiling module, stopping
    Fatal: Compilation aborted
    Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
    #
    #
    Désolé mais j'ai un chantier urgentissime, là...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Mes excuses pour la modification que j'avais oublié de reporter dans le dépôt GitHub. C'est fait.

    En fait, la modification consiste à ajouter ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    program Alouette;
     
    uses
    {$IFDEF UNIX}
      cthreads,
      cwstring,
    {$ENDIF}
    J'espère que l'ajout de l'unité cwstring résoudra le problème qui reste.

    @Jipété
    Pour le code que tu avais proposé (la fonction GetTickCount64), si j'ai bien compris, finalement ce n'est pas la peine de l'ajouter, n'est-ce pas ?

    Pour information, voici les lignes de commande que j'utilise pour construire mes trois exécutables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fpc -B -Mobjfpc -Sh -Sa -Fcutf8 -FUunits -dDEBUG alouette
    fpc -B -Mobjfpc -Sh -Sa -Fcutf8 -FUunits -dRELEASE alouette -oalouette32.exe
    fpc -B -Mobjfpc -Sh -Fcutf8 -FUunits -dRELEASE alouette -oalouette64.exe -Px86_64
    Mais oui, Jipété, ça ne m'étonne pas qu'avec -Sd (équivalent de -Mdelphi), ça fonctionne aussi.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Si tu as le temps, j'aimerais savoir si le moteur te renvoie bien un bestmove xxxx si tu lui dis position startpos puis go. Il semble que chez Jipété ça ne fonctionnait pas.
    Et ça ne fonctionne toujours pas...


    Citation Envoyé par Roland Chastain Voir le message
    Mes excuses pour la modification que j'avais oublié de reporter dans le dépôt GitHub. C'est fait.
    T'en as oublié une autre... Dans performance. Voir ci-après.
    Tu aurais dû apporter les modifications dès que je les proposais, puisque de toute façon ça n'impacte pas le code Windows, mes modifs sont protégées par des {$IF defined(Linux)}.

    Citation Envoyé par Roland Chastain Voir le message
    @Jipété
    Pour le code que tu avais proposé (la fonction GetTickCount64), si j'ai bien compris, finalement ce n'est pas la peine de l'ajouter, n'est-ce pas ?
    Si si, je l'ajoute, voir ci-dessous :
    Citation Envoyé par Jipété Voir le message
    [J'ai] modifié le début [de performance.pas] ainsi, après avoir farfouillé dans lazutf8sysutils :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    uses
     
      {$IF defined(Linux)}
      BaseUnix,
      Linux,
      {$ENDIF}
      SysUtils, Deplacement, Coups, Roque, Damier, Tables, Journal, Tri;
     
    {$IF defined(Linux) and not defined(GetTickCountTimeOfDay)}
    function GetTickCount64: QWord;
    var
      tp: timespec;
    begin
      clock_gettime(CLOCK_MONOTONIC, @tp); // exists since Linux Kernel 2.6
      Result := (Int64(tp.tv_sec) * 1000) + (tp.tv_nsec div 1000000);
    end;
    {$ELSE}
    function GetTickCount64: QWord;
    var
      tp: TTimeVal;
    begin
      fpgettimeofday(@tp, nil);
      Result := (Int64(tp.tv_sec) * 1000) + (tp.tv_usec div 1000);
    end;
    {$ENDIF}
    Bon, je n'ai pas le temps de chercher où ça coince, surtout que je ne sais pas débugger avec FPC, alors il faudrait que tu fournisses un tout petit scénario expliquant par où ça part et par où ça passe pour savoir où aller regarder dans les codes.
    Par ex., pourquoi bestmove ne s'affiche pas. C'est où, bestmove ?

    Bon, je retourne à mes misères…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Merci Jipété. Effectivement, je n'avais pas compris que tu parlais de deux fichiers différents. Voilà, j'ai mis à jour le dépôt Github.

    Comme je le disais précédemment, j'ai pris l'initiative d'ajouter cwstring en plus de cthread. Peut-être que cela résoudra le problème ?

    Je reviens très vite avec le scénario.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  13. #13
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Comme je le disais précédemment, j'ai pris l'initiative d'ajouter cwstring en plus de cthread. Peut-être que cela résoudra le problème ?
    Ben non, car tu l'as ajouté dans alouette.pas, qui a bien compilé.
    Le pb est ailleurs…
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #14
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Donc, le scénario. Quand le programme reçoit la commande go, un sous-processus est créé, qui se charge d'appeler la fonction MeilleurCoup de l'unité Meilleur (par l'intermédiaire de la fonction Coup de l'unité Joueur), et d'écrire le résultat dans la console, sous la forme bestmove ...
    C'est probablement quelque part dans le corps de la fonction MeilleurCoup que quelque chose ne va pas.

    En tout cas c'est déjà bien d'avoir un code qui se compile.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  15. #15
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Salut salut,

    j'ai un peu de temps (une looooongue recopie avant de lancer mon script de reclassement des fichiers [les tests sont redoutables d'efficacité !]), alors je jette un œil et la première chose que je vois, après avoir regardé le code d'alouette.pas, c'est que si je tente uci position fen (je devrais avoir le droit, non ?, en voyant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                if CommencePar('position ', LCommande) then
                begin
                  if Contient('startpos', LCommande) then // ok
                    Joueur.PositionDepart
                  else if Contient('fen', LCommande) then // pâté !
                    Joueur.NouvellePosition(ExtraitEpd(LCommande));
    ), je gagne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # ./alouette 
    Alouette 0.0.5
    uci
    id name Alouette 0.0.5
    id author Roland Chastain
    option name UCI_Chess960 type check default false
    uciok
    position fen
    An unhandled exception occurred at $08072430 :
    EStringListError : List index (0) out of bounds
      $08072430
     
    #
    mais je ne sais pas dans quel .pas se cache cette option "fen" (qui n'est pas fun, ).

    Sinon, il y a quand même des choses qui fonctionnent :
    Nom : chess_essai1.png
Affichages : 206
Taille : 107,2 Ko

    Pour en revenir à bestmove, je le vois là, ce mot, et juste là, toujours dans alouette.pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {** L'action du processus consiste à demander un coup au joueur d'échecs artificiel et à l'envoyer à l'utilisateur. }
    procedure TProcessus.Execute;
    begin
      Ecrire(Format('bestmove %s', [Joueur.Coup]));
    end;
    Conclusion : si je ne le vois pas à l'exécution, c'est que le thread ne se lance pas ou meurt silencieusement...

    Je vais creuser...
    Sinon, j'ai regardé le code de meilleur.pas sans rien voir de particulier.

    Si t'as des idées, n'hésite pas, hein !

    PS : bravo pour la rédaction et la mise en page de tes codes, c'est absolument parfaitement magnifique !
    Des alignements au cordeau, une lisibilité redoutable,

    EDIT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {** L'action du processus consiste à demander un coup au joueur d'échecs artificiel et à l'envoyer à l'utilisateur. }
    procedure TProcessus.Execute;
    begin
    writeln('ici'); // ajout jpt, vu après la séquence uci go
    Ecrire('ici1 avec écrire', true); // vu aussi
    Ecrire('ici2 avec écrire', false); // vu aussi
      Ecrire(Format('bestmove %s', [Joueur.Coup])); // et pourquoi pas vu cette ligne ?
    end;
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  16. #16
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Ma copie est finie, je vais rebooter pour avoir une machine clean avant de lancer le script sur mon 1er dossier, j'en suis là de ton affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # ./alouette 
    Alouette 0.0.5
    uci
    id name Alouette 0.0.5
    id author Roland Chastain
    option name UCI_Chess960 type check default false
    uciok
    go
    MeilleurCoup10
    EstAllumeeIndex1
    EstAllumeeIndex2
    EstAllumeeIndex1
    EstAllumeeIndex2
    DeuxiemeEvaluation1
    Rejoue_4
    EstAllumeeIndex1
    EstAllumeeIndex2
    EstAllumeeIndex1
    EstAllumeeIndex2
    quit
    Dans déplacement.pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function Rejoue_(var APos: TPosition; const ACoup: string): boolean;
    var
      LDep, LArr, LColDep, LColArr, LLigDep, LLigArr, LPris: integer;
      LType, LCouleur, LAdv: ^TDamier;
      LPreserveCouleur: boolean;
    begin
      result := TRUE;
      { Conversion de la chaîne en index des cases de départ et d'arrivée. L'index est un nombre de 0 à 63. }
      LDep := DecodeNomCase(Copy(ACoup, 1, 2));
      LArr := DecodeNomCase(Copy(ACoup, 3, 2));
      { On assigne une valeur aux pointeurs en fonction du trait et dans la foulée on vérifie qu'il y a bien une pièce de la bonne couleur sur la case de départ. }
     
    writeln('Rejoue_4'); // vu 
      if (APos.Trait = CBlanc)
      and EstAllumeeIndex(APos.Blanches, LDep) then
      begin
        LCouleur := @APos.Blanches;
        LAdv := @APos.Noires;
      end else
      if (APos.Trait = CNoir)
      and EstAllumeeIndex(APos.Noires, LDep) then
      begin
        LCouleur := @APos.Noires;
        LAdv := @APos.Blanches;
      end else
        exit(FALSE);
    writeln('Rejoue_5'); // PAS vu 
     
      { Pointeur vers le damier contenant la position des pièces de ce type. }
    ...
    Dans tables.pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function EstAllumeeIndex(const ADam: TDamier; const AInd: integer): boolean;
    begin
    writeln('EstAllumeeIndex1'); // vu 
      Assert(CCaseIndex[AInd] <> 0);
    writeln('EstAllumeeIndex2'); // vu 
      result := (ADam and CCaseIndex[AInd]) = CCaseIndex[AInd];
    end;
    En résumé après Rejoue_4 on passe bien deux fois dans EstAlluméeIndex mais le résultat ne doit pas être bon et on doit sortir sur Exit(False) puisqu'on ne voit pas Rejoue_5.
    Mais on sort où ?
    À toi...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  17. #17
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    @Jipété

    Merci pour ton travail. Avec les indications que tu donnes je devrais trouver ce qui ne va pas. Et merci pour le compliment sur la présentation du code.

    Je m'aperçois que j'aurais dû donner plus tôt des exemples pour la syntaxe des commandes. Voici donc (en pièce jointe).

    Pour le moment, le programme ignore les paramètres de la commande go, donc ce n'est pas la peine de les mettre.
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  18. #18
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    @Jipété

    Je m'aperçois, en relisant plus minutieusement tes messages, que dans ton dernier essai tu as lancé la commande go sans lancer d'abord la commande position, ce qui est formellement interdit par les conventions de Genève.

    Donc quand tu auras le temps je pense que ça vaudrait le coup de refaire un essai avec les bonnes commandes.

    Je suis déjà bien content de voir que la commande perft fonctionne : c'est que le programme fonctionne. Il doit juste y avoir un petit problème quelque part.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  19. #19
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Avec les indications que tu donnes je devrais trouver ce qui ne va pas.
    et ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function EstAllumeeIndex(const ADam: TDamier; const AInd: integer): boolean;
    begin
    writeln('EstAllumeeIndex1 ', AInd); // vu 
      Assert(CCaseIndex[AInd] <> 0);
    writeln('EstAllumeeIndex2 ', AInd); // vu
      result := (ADam and CCaseIndex[AInd]) = CCaseIndex[AInd];
    if result then writeln('True ', AInd) else writeln('False ', AInd)
    end;
    donne ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # ./alouette 
    Alouette 0.0.5
    uci
    id name Alouette 0.0.5
    id author Roland Chastain
    option name UCI_Chess960 type check default false
    uciok
    go
    MeilleurCoup10
    EstAllumeeIndex1 0
    EstAllumeeIndex2 0
    False 0
    EstAllumeeIndex1 0
    EstAllumeeIndex2 0
    False 0
    DeuxiemeEvaluation1
    Rejoue_4
    EstAllumeeIndex1 0
    EstAllumeeIndex2 0
    False 0
    EstAllumeeIndex1 -12176630
    EstAllumeeIndex2 -12176630
    quit
    #
    On se rapproche
    On dirait que quelque chose passe une cochonnerie...

    Citation Envoyé par Roland Chastain Voir le message
    Et merci pour le compliment sur la présentation du code.
    C'est la moindre des choses, quand c'est aussi beau et propre !
    Et ça me fait autant plaisir de te féliciter quand c'est parfait comme ça que ça me prend de crier très fort quand ça ne va pas.
    C'est tout moi, ça,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  20. #20
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Merci Jipété. Cela ressemble à une variable non initialisée et confirme ce que je disais dans mon deuxième message (que sans doute tu n'as pas vu).

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EstAllumeeIndex1 -12176630
    EstAllumeeIndex2 -12176630

    Le nombre est supposé être compris entre 0 et 63.

    Citation Envoyé par Jipété Voir le message
    On se rapproche
    On dirait que quelque chose passe une cochonnerie...
    Effectivement.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/03/2018, 14h29
  2. Visual Studio compatibilité avec Linux
    Par koff75 dans le forum Visual C++
    Réponses: 6
    Dernier message: 01/06/2012, 15h56
  3. Réponses: 1
    Dernier message: 04/08/2008, 23h42
  4. Réponses: 1
    Dernier message: 07/09/2007, 22h43
  5. [7RC3] Compatibilité avec les anciennes versions ...
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/05/2003, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo