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

Flash Pascal Discussion :

Échiquier


Sujet :

Flash Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut Échiquier
    Il y a longtemps que je voulais faire un échiquier avec Flash Pascal. Voici une première tentative, que je vous propose afin que vous m'aidiez éventuellement à l'améliorer.

    En fait, ce n'était pas si difficile : la solution était intégralement donnée dans cet exemple posté par Paul dans le forum Delphi. (Plus cet exemple-là pour le chargement des données de configuration depuis un fichier XML.)

    Pour le moment l'échiquier n'est pas équipé d'une fonction d'arbitrage.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    Après quelques heures de travail, voici mon échiquier avec arbitre intégré.

    Une dernière fonctionnalité que j'aurais aimé ajouter, c'est, lorsque l'utilisateur saisit une pièce, que les cases vers lesquelles il a le droit de la déplacer soit coloriées, comme dans ce projet. Paul, si tu passes par ici...
    Fichiers attachés Fichiers attachés

  3. #3
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    Je m'aperçois que parfois (?) la pièce qu'on déplace pour en prendre une autre passe derrière la pièce à prendre, au lieu de passer devant. Il doit y avoir un petit réglage à faire quelque part.

  4. #4
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Je m'aperçois que parfois (?) la pièce qu'on déplace pour en prendre une autre passe derrière la pièce à prendre, au lieu de passer devant. Il doit y avoir un petit réglage à faire quelque part.
    En fait ça ne fonctionne pas du tout. J'ai cru que ça fonctionnait parce que je me suis contenté d'essayer de prendre une pièce noire avec une pièce blanche, et comme les pièces noires sont créées avant les blanches, ça passait. Mais si je déplace ma pièce au-dessus d'une pièce qui a été créée après (par exemple la pièce immédiatement à droite), elle passe derrière au lieu de passer devant. D'ailleurs si je supprime carrément l'appel de la méthode swapDepths,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TGraphChessPiece.onPress;
    begin
      //swapDepths(_parent.getNextHighestDepth());
    ça ne change rien du tout : le résultat est toujours celui que je viens de décrire.

    Pour ce qui est de colorier les cases vers lesquelles la pièce a le droit de se déplacer, j'ai un début d'idée

    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
    procedure TGraphChessPiece.onPress;
    var
      x, y: integer;
      sx, sy: integer;
    begin
      //swapDepths(_parent.getNextHighestDepth());
      startDrag(FALSE, 0, 0, 280, 280);
      move := SquareToStr(XToBoard(_x), YToBoard(_y));
     
      help := MovieClip.Create(_root, 'help', _root.getNextHighestDepth());
      for x := 1 to 8 do for y := 1 to 8 do if game.IsLegal(move + SquareToStr(x, y)) then
      with help do
      begin
        sx := XToScreen(x);
        sy := YToScreen(y);
        beginBitmapFill(loadBitmap('valid'));
        moveto(sx, sy);
        lineto(sx + 40, sy);
        lineto(sx + 40, sy + 40);
        lineto(sx, sy + 40);
        lineto(sx, sy);
        EndFill();
      end;
    end;
    mais il faut d'abord que j'arrive à maîtriser ce problème de superposition.

  5. #5
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    En lisant la documentation Adobe, je suis perplexe sur la formule swapDepths(_parent.getNextHighestDepth()).

    Intervertit l’empilement, ou le niveau de profondeur (ordre z), de ce clip avec le clip spécifié par le paramètre target ou avec le clip qui occupe actuellement le niveau de profondeur spécifié par le paramètre target. Les deux clips doivent avoir le même clip parent. La permutation du niveau de profondeur des clips revient à déplacer un clip devant ou derrière un autre.
    Or si je ne me trompe par définition il n'y a pas de clip à l'altitude _parent.getNextHighestDepth().

    Ensuite dans Flash8.pas j'ai vu ceci qui a encore ajouté à ma perplexité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        procedure swapDepths(target: Number); {overload;
        procedure swapDepths(target: TObject); overload; }

  6. #6
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 130
    Billets dans le blog
    9
    Par défaut
    Soit la méthode swapDepth ne fonctionne pas, soit je ne sais pas l'utiliser.

    Dans l'exemple suivant, quand on clique sur le carré de gauche, on voit que son altitude est la même avant et après l'appel de swapDepth.

    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
     
    program testswapdepths;
     
    {$FRAME_WIDTH 400}
    {$FRAME_HEIGHT 200}
     
    uses
      Flash8;
     
    type
      MyMovieClip = class(MovieClip)
        constructor Create(const aX, aY: integer; const aColor: integer);
        procedure onPress; override;
      end;
     
    var
      debug: TextField;
      highestDepth: number;
     
    constructor MyMovieClip.Create(const aX, aY: integer; const aColor: integer);
    begin
      inherited Create(_root, '', _root.getNextHighestDepth());
      highestDepth := self.getDepth;
      lineStyle(0, clRed);
      beginFill(aColor);
      moveTo(0, 0);
      lineTo(100, 0);
      lineTo(100, 100);
      lineTo(0, 100);
      lineTo(0, 0);
      endFill();
      _x := aX;
      _y := aY;
      debug.Text := debug.Text + IntToStr(Trunc(highestDepth)) + #13;
    end;
     
    procedure MyMovieClip.onPress;
    begin
      debug.Text := debug.Text + IntToStr(Trunc(self.getDepth)) + #13;
      swapDepths(highestDepth);
      debug.Text := debug.Text + IntToStr(Trunc(self.getDepth)) + #13;
    end;
     
    var
      clips: array[0..1] of MyMovieClip;
      i: integer;
     
    begin
      debug := TextField.Create(_root, 'debug', _root.getNextHighestDepth(), 200, 0, 200, 200);
      debug.Text := '';
      clips[0] := MyMovieClip.Create(0, 0, clBlue);
      clips[1] := MyMovieClip.Create(100, 0, clGreen);
    end.

Discussions similaires

  1. Déplacement d'un pion sur un échiquier
    Par Invité dans le forum Contribuez
    Réponses: 7
    Dernier message: 20/09/2012, 14h22
  2. Faire passer un cavalier par toutes les case d'un échiquier
    Par Spahi dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 29/10/2009, 10h27
  3. Réponses: 1
    Dernier message: 23/09/2009, 22h55
  4. échiquier en Java.
    Par Maddie dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/04/2007, 12h35
  5. algo sur matrice de case genre "échiquier"
    Par dom_dev dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 14/03/2007, 12h45

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