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

Codes sources à télécharger Delphi Discussion :

Itinéraire du Cavalier [Sources]


Sujet :

Codes sources à télécharger Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    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 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut Itinéraire du Cavalier
    Bonjour,

    Je vous propose un nouvel élément à utiliser : Itinéraire du Cavalier

    Nom : cavalier.png
Affichages : 262
Taille : 12,0 Ko

    Démonstration d'un algorithme pour trouver un chemin passant sur toutes les cases du damier, sans jamais passer deux fois sur la même case. Adapté d'un script Lua.

    https://rosettacode.org/wiki/Knight%27s_tour#Lua

    Exemple d'utilisation de la bibliothèque Cairo.

    Qu'en pensez-vous ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    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 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Avec le dessin des cases, c'est mieux.

    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
    procedure TForm1.DrawPath(const aPath: TVectorArray);
    var
      surface: pcairo_surface_t;
      cr: pcairo_t;
      x, y: integer;
      i1, i2: integer;
      w, h: integer;
    begin
      w := PaintBox1.Width;
      h := PaintBox1.Height;
     
      surface := cairo_win32_surface_create_with_dib(CAIRO_FORMAT_ARGB32, w, h);
      cr := cairo_create(surface);
     
      cairo_translate(cr, 0, h);
      cairo_scale(cr, w, -h);
     
      cairo_set_source_rgb(cr, 0.9, 0.9, 0.9);
      cairo_paint(cr);
     
       for x := 1 to 8 do for y := 1 to 8 do
        if (x + y) mod 2 = 0 then
        begin
          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
          cairo_rectangle(cr, Pred(x) / 8, Pred(y) / 8, 1 / 8, 1 / 8);
          cairo_fill(cr);
        end;
     
      cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
      cairo_set_line_width(cr, 1 / 200);
     
      cairo_set_source_rgb(cr, 0.1, 0.1, 0.1);
     
      for i2 := 1 to High(aPath) do
      begin
        i1 := Pred(i2);
        cairo_move_to(cr, aPath[i1].x / 8 - 1 / 16, aPath[i1].y / 8 - 1 / 16);
        cairo_line_to(cr, aPath[i2].x / 8 - 1 / 16, aPath[i2].y / 8 - 1 / 16);
      end;
     
      cairo_stroke(cr);
     
      cairo_destroy(cr);
     
      BitBlt(
        PaintBox1.Canvas.Handle,
        0,
        0,
        w,
        h,
        cairo_win32_surface_get_dc(surface),
        0,
        0,
        SRCCOPY
      );
     
      cairo_surface_destroy(surface);
    end;
    Images attachées Images attachées  
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    pour l'initialisation de ton board
    tu peut écrire FillChar(board,x*y*SizeOf(integer),UNVISITED);plutôt que d'utiliser les boucles


    ton tableau de moves tu aurais très bien pu l’écrire comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     MOVES: array[1..8,1..2] of integer = (
        (+1,-2),
        (+2,-1),
        (+2,+1),
        (+1,+2),
        (-1,+2),
        (-2,+1),
        (-2,-1),
        (-1,-2)
      );

    j'aurais fait quelque amelioration dans le DrawPath

    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
    procedure TForm1.DrawPath(const aPath: TVectorArray);
    var
     coef1,Coef2 : ...
    begin
       ...
      Coef1 := 1/8;
      Coef2 := 1/16; 
       for x := 1 to 8 do
        for y := 1 to 8 do
        if (x + y) mod 2 = 0 then
        begin
          cairo_set_source_rgb(cr, 0.7, 0.7, 0.7);
          cairo_rectangle(cr, Pred(x) / 8, Pred(y) / 8, Coef1,Coef1);
          cairo_fill(cr);
        end;
     ...
     
      for i2 := 1 to High(aPath) do
      begin
        i1 := Pred(i2);
        cairo_move_to(cr, aPath[i1].x / 8 - Coef2, aPath[i1].y / 8 - Coef2);
        cairo_line_to(cr, aPath[i2].x / 8 - Coef2, aPath[i2].y / 8 - Coef2);
      end;
     
      ...
    end;
    sinon c'est intéressant
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    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 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    @anapurna

    Merci pour le coup d'œil et les suggestions.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 070
    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 070
    Points : 15 454
    Points
    15 454
    Billets dans le blog
    9
    Par défaut
    Ajouté une version Lazarus.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

Discussions similaires

  1. Itinéraire dans MapPoint avec horaires
    Par isa38 dans le forum Access
    Réponses: 0
    Dernier message: 27/09/2007, 14h04
  2. Recherche d'itinéraire pour trains
    Par Zechiron dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 05/08/2007, 10h01
  3. [Google maps] Itinéraires
    Par pc75 dans le forum La taverne du Club : Humour et divers
    Réponses: 11
    Dernier message: 07/04/2007, 08h23
  4. [Tableaux] Calcul d'itinéraire / route / étapes
    Par gb-ch dans le forum Langage
    Réponses: 9
    Dernier message: 08/08/2006, 08h17
  5. pb dans un calcul d'itinéraire
    Par yohan.fay dans le forum Delphi
    Réponses: 8
    Dernier message: 31/05/2006, 06h41

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