1. #1
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut Projet d'un programme permettant de visualiser une position du jeu des échecs

    Bonjour ! Je me lance dans un projet que je médite depuis quelque temps, et je souhaiterais avoir des conseils. Il s'agit d'un programme qui permettrait, à partir d'une chaîne au format EPD saisie par l'utilisateur, de visualiser la position correspondante sur un échiquier. Le programme produirait aussi un code HTML que l'utilisateur pourrait copier. Enfin (mais c'est déjà un peu plus compliqué), l'utilisateur pourrait placer les pièces lui-même. J'ai un modèle qui est le programme EPD2diag.

    Voici une première étude.

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    (* EPD Visualizer *)
     
    program Etude;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 484}
    {$FRAME_HEIGHT 514} // 484 + 30
    {$BACKGROUND $FFFFFF}
     
    //{$FONT montreal 'Chess Montreal'}
    {$FONT alfonso 'Chess Alfonso-X'}
     
    (* Chess Montreal
       True Type font by Gary Katch
       http://alcor.concordia.ca/~gpkatch/montreal_font.html *)
     
    (* Chess Alfonso-X
       True Type Font by Armando H. Marroquin
       http://www.enpassant.dk/chess/fonteng.htm *)
     
    type
      tNature = (nothing, pawn, knight, rook, queen, king);
      tColor  = (none, white, black);
     
      tPiece  = record
        nature: tNature;
        color: tColor;
      end;
     
      tPosition = array[1..8, 1..8]of tPiece;
     
      tEditBox = class(textField)
        procedure onKeyDown;
      end;
     
    {  
    const
      stdPosition: tPosition = (
      ((nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none)),
      ((nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none)),
      ((nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none)),
      ((nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none)),
      ((nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none)),
      ((nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none)),
      ((nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none)),
      ((nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none), (nature: nothing; color: none))
      );
    }
     
    function stdPosition: tPosition;
    var
      x, y: integer;
    begin
      for x := 1 to 8 do
        for y := 1 to 8 do
        begin
          result[x, y].nature := nothing;
          result[x, y].color := none;
        end;
    end;
     
    function positionToText(aPosition: tPosition): string;
    var
      x, y: integer;
    begin
      result := '';
      for y := 8 downto 1 do
      begin
        for x := 1 to 8 do
          if (x + y) mod 2 = 0 then
            result := result + ' '
          else
            //result := result + '/';
            result := result + '+';
          result := result + #10;
      end;
    end;
     
    var
      p: tPosition;
      s: string;
      f: textFormat;
      t: textField;
      e: tEditBox;
     
    procedure tEditBox.onKeyDown;
    begin
      if Key.getAscii = 13 then
      begin
        //t.text := e.text;
        t.text := self.text;
        {
        if IsValidEPD(self.text) then
          t.text := EPDToText(self.text);
        }
      end;
    end;
     
    begin
      p := stdPosition;
      s := positionToText(p);
     
      //f := textFormat.Create('montreal', 48);
      f := textFormat.Create('alfonso', 48);
      f.color := 0;
      t := textField.Create(nil, '', 0, 0, 0, stage.width, 484);
      with t do
      begin
        embedFonts := true;
        SetNewTextFormat(f);
        text := s;
      end;
     
      e := tEditBox.Create(nil, 'input', 1, 0, 484, stage.width, 30);
      e.type := 'input';
      Selection.setFocus(e);
      Key.addListener(e);
    end.
    J'aimerais bien avoir des conseils pour l'organisation du code (la déclaration des objets, des méthodes, etc.), histoire de partir sur une bonne base et de faire quelque chose de joli.

    Je pense utiliser pour ce projet la police Chess Montreal (pièces jointes), qui est gratuite mais que l'auteur ne donne que sur demande. Comme FlashPascal permet d'utiliser une police intégrée, ça tombe bien : je n'aurais pas besoin de distribuer la police avec le programme. En revanche, pour les exemples de cette discussion, j'utiliserai la police Chess Alfonso-X, qui peut être librement téléchargée .

    Elle est drôlement belle, cette police Chess Montreal, non ?

    Au fait, une mise à jour de la bibliothèque FlashCL est-elle envisagée ? Elle est déjà très bien comme elle est, mais il manque le type Bouton.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 722
    Points : 21 440
    Points
    21 440

    Par défaut

    Salut,

    non pas bcp de temps pour m'occuper de FlashPascal, ou de FlashCL

    par contre tu peux regarder la démo Sudoku qui est assez proche finalement non ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  3. #3
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par Paul TOTH Voir le message
    par contre tu peux regarder la démo Sudoku qui est assez proche finalement non ?
    Effectivement, je viens d'y jeter un œil : ça devrait faire mon affaire. Je vais l'étudier.

  4. #4
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut

    Bon, voici une première version, avec le bouton emprunté à l'exemple Sudoku.

    Je me suis donné un peu de mal pour que le programme puisse fonctionner avec différentes polices. Il n'y a pas de standard pour l'utilisation des caractères : chaque auteur a son propre système. Donc la fonction concernée reçoit comme second argument une chaîne de caractères, différente suivant la police utilisée, et elle va chercher les caractères dans cette chaîne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const
      GKChars = ' pnbrqk/PNBRQK omvtwl/OMVTWL12345789'; (* GK = Gary Katch *)
      AMChars = ' pnbrqk+PNBRQK omvtwl+OMVTWL!"#$%/()'; (* AM = Armando Marroquin *)
    Voici quelques chaînes au format EPD pour essayer le programme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    8/8/5k2/8/5K2/8/4P3/8
    4r1k1/1b3p1p/ppq3p1/2p5/8/1P3R1Q/PBP3PP/7K
    rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR
    rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut

    Voici la version en ligne du programme. J'ai fait aussi un exécutable indépendant avec FlashPlayer : c'est lourd mais c'est joli. On pourrait peut-être faire quelque chose de moins lourd avec Delphi, mais je n'ai pas eu le temps d'essayer.

    Pour l'instant je vais laisser le projet dans cet état. J'espère ajouter plus tard les fonctionnalités manquantes : la production de code HTML et la possibilité de placer les pièces avec la souris.

  6. #6
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut

    Effectivement avec Delphi, on obtient un exécutable plus léger. (J'ai utilisé le code proposé par Paul dans cette discussion.)

  7. #7
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut

    Encore bien mieux, voici la version AIR ! 27 Ko, installateur inclus. J'ai testé avec succès l'installation et la désinstallation (sous Windows 8). Le présentation est très élégante et "professionnelle".

    Pour obtenir ce résultat, j'ai utilisé cette démo postée par Paul TOTH. Je n'ai eu qu'à modifier les fichiers xml et batch.
    Fichiers attachés Fichiers attachés

  8. #8
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut Questions sur les applications AIR

    J'ouvre une parenthèse sur le système AIR. Encouragé par l'idée d'en faire une application AIR, j'ai repris mon programme à zéro (sur la base de l'exemple Sudoku, qui contient effectivement tout ce qu'il me faut), pour y ajouter les fonctionnalités manquantes. J'ai aussi feuilleté quelques pages du site d'Adobe et j'ai lu que les applications AIR fonctionnent sous Android.

    Le système Adobe AIR permet aux développeurs d’intégrer le même code dans des applications et jeux natifs pour les ordinateurs de bureau Windows et Mac OS, et également pour les périphériques iOS et Android.
    Est-ce que ça signifie que mon application telle quelle peut fonctionner sur une tablette, ou y a-t-il quelque chose d'autre à faire ?

    Par ailleurs, pour éviter d'avoir, au moment de l'installation, l'avertissement "éditeur inconnu, voulez-vous vraiment prendre le risque etc.", j'imagine qu'il faut acheter une licence, ou quelque chose comme ça ? Après quoi on peut vendre le produit (en supposant qu'il intéresse quelqu'un) ?

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 722
    Points : 21 440
    Points
    21 440

    Par défaut

    Citation Envoyé par Roland Chastain Voir le message
    J'ouvre une parenthèse sur le système AIR. Encouragé par l'idée d'en faire une application AIR, j'ai repris mon programme à zéro (sur la base de l'exemple Sudoku, qui contient effectivement tout ce qu'il me faut), pour y ajouter les fonctionnalités manquantes. J'ai aussi feuilleté quelques pages du site d'Adobe et j'ai lu que les applications AIR fonctionnent sous Android.



    Est-ce que ça signifie que mon application telle quelle peut fonctionner sur une tablette, ou y a-t-il quelque chose d'autre à faire ?

    Par ailleurs, pour éviter d'avoir, au moment de l'installation, l'avertissement "éditeur inconnu, voulez-vous vraiment prendre le risque etc.", j'imagine qu'il faut acheter une licence, ou quelque chose comme ça ? Après quoi on peut vendre le produit (en supposant qu'il intéresse quelqu'un) ?
    comme indiqué dans le lien que tu donnes, Air sous Android ne supporte pas ActionScript2 et donc pas FlashPascal2

    avec Flash 9 Adobe a changé de machine virtuelle Flash en passant à ActionScript3, j'ai fait quelques tests pour générer de l'AS3 en FlashPascal3, mais c'est loin d'être utilisable pour l'instant.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  10. #10
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut

    Citation Envoyé par Paul TOTH Voir le message
    comme indiqué dans le lien que tu donnes, Air sous Android ne supporte pas ActionScript2 et donc pas FlashPascal2
    D'accord, je n'avais pas lu assez attentivement.

    Voilà, la deuxième version de mon programme est finie.


  11. #11
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut

    Bonjour !

    J'ai poli mon visualisateur EPD/FEN. Les liens sont dans le message précédent.

  12. #12
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 976
    Points : 10 603
    Points
    10 603
    Billets dans le blog
    4

    Par défaut

    En revoyant le programme que j'avais voulu refaire, je m'aperçois qu'il y a certaines fonctionnalités que je n'ai pas reproduites, comme le déplacement et l'effacement des pièces :

    EPD2Diag JavaScript

    Ce serait à faire.

    Un autre "FEN Viewer", fait en AJAX :

    FEN Viewer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/07/2015, 10h51
  2. Réponses: 7
    Dernier message: 07/11/2014, 21h21
  3. Réponses: 1
    Dernier message: 12/03/2009, 08h54
  4. [VC++ 6] Boutons permettant d'afficher une form
    Par cooladn dans le forum MFC
    Réponses: 3
    Dernier message: 09/12/2004, 16h17
  5. Programme permettant de créer ses propres paquets TCP/UDP
    Par mat087 dans le forum Développement
    Réponses: 6
    Dernier message: 21/05/2004, 21h42

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