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

Scheme Discussion :

Création d'un labyrinthe


Sujet :

Scheme

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 67
    Points : 24
    Points
    24
    Par défaut Création d'un labyrinthe
    Bonjour à vous tous.

    Alors voilà je viens tout juste de commencer Scheme et à part les listes que je maîtrise un tout petit peu le reste c'est le trou noir.

    Malheuresement j'ai un projet à faire.

    But du projet : Création d'un "objet" qui se déplacerai dans un labyrinthe.

    Donc première question : Comment pourrais-je créer un labyrinthe?

    Je suis vraiment désolé de poser la question comme ça mais n'yant aucune base de pgmation mis à part en Delphi... ou j'utilisais ce qu'on appelais Canvas apparement j'ai lu que ça marchait aussi sur scheme donc...

    Je vous remercie d'avance et je vous mettrais par la suite quelque détails du programme établit...

    Encore merci.++

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par A0080 Voir le message
    Bonjour à vous tous.

    Alors voilà je viens tout juste de commencer Scheme et à part les listes que je maîtrise un tout petit peu le reste c'est le trou noir.

    Malheuresement j'ai un projet à faire.

    But du projet : Création d'un "objet" qui se déplacerai dans un labyrinthe.

    Donc première question : Comment pourrais-je créer un labyrinthe?

    Je suis vraiment désolé de poser la question comme ça mais n'yant aucune base de pgmation mis à part en Delphi... ou j'utilisais ce qu'on appelais Canvas apparement j'ai lu que ça marchait aussi sur scheme donc...

    Je vous remercie d'avance et je vous mettrais par la suite quelque détails du programme établit...

    Encore merci.++
    Attends ... tu sais pas bien programmer, tu sais pas faire du Scheme, et tu choisis Scheme pour faire un projet ?

    J'ai raté un truc ?

    Bon sinon il existe effectivement une bibliothèque graphique pour dessiner.
    Il y a un sujet sur les graphiques un peu plus bas.

    Mais es tu sur d'avoir choisi le bon langage ? Ne ferais tu pas mieux de prendre Delphi si tu dis le connaître ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 67
    Points : 24
    Points
    24
    Par défaut
    Le truc c'est que je n'ai pas le choix du langage. le "projet" se fait en scheme et c'est tout nous n'avions pas de choix mdr.

    Merci pour les infos.

    Néanmoins pourrais tu m'expliquer par toi même, ne serait-ce pour le début comment je pourrais établir ce labyrinthe.

    Je vais regarder un peu les topics même si je l'avais déjà fait avant pour voir si j'y comprends quelque chose et si ça m'avance.

    J'essaierai demain d'être plus clair sur le projet et de vous mettre en ligne les bases du projet et du "jeu" en quelque sorte.

    Merci à toi.++

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par A0080 Voir le message
    Le truc c'est que je n'ai pas le choix du langage. le "projet" se fait en scheme et c'est tout nous n'avions pas de choix mdr.

    Merci pour les infos.

    Néanmoins pourrais tu m'expliquer par toi même, ne serait-ce pour le début comment je pourrais établir ce labyrinthe.
    Je ne connais pas ton contexte. Difficile donc. Mais on ne vous a pas donné de cours AVANT le projet ?? difficile à croire.

    La question est : que veux tu faire ? (analyse des besoins) comment comptes tu résoudre ton problème ? (conception) et on verra là où on en est rendu.

    On ne commence pas avec l'implémentation, SURTOUT en Scheme où il y a très peu de vérification au niveau du code.

    D'un côté, si tu sais le faire en Delphi, alors tu devrais savoir le faire en Scheme (pour la conception ça ne devrait pas te poser de problème). La technique on verra après.

    Je vais regarder un peu les topics même si je l'avais déjà fait avant pour voir si j'y comprends quelque chose et si ça m'avance.

    J'essaierai demain d'être plus clair sur le projet et de vous mettre en ligne les bases du projet et du "jeu" en quelque sorte.
    Ça aidera effectivement.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 67
    Points : 24
    Points
    24
    Par défaut
    Alors me revoilà je vous explique donc un minimum le projet.

    Le projet est basé sur un minimum d'intelligence artificielle en fait.

    Je veux avoir un "objet (pion, personne ou...) qui se déplace intelligement dans un labyrinthe.

    Pour l'instant je ne vous donne pas forcément le code car c'est pas trop ça qui m'intéresse mais je vous explique le principe quand même.

    L'objet reconnait les 4 points cardinaux 'Est Sud Ouest Nord' et lorqu'il se retrouve dans le labyrinthe doit faire la différence entre un mur et une porte dirons nous. Par la suite il se comporte différement en fonction de ces deux événements mais là n'est pas le principal pour le moment.

    ______________________

    Voilà maintenant mon plus gros problème et là je vous met le morceau de code. Le principe est donc de créer une carte comme celle dans le code avec les points représentant des portes et les "X" des murs.

    Ma seule est unique question pour le moment est :

    Comment faire pour former les 4 côtés du carrés par des "X" ou donc des murs loL

    Graphiquement je veux ça :


    XXXXXXXX
    X ......... X
    X ......... X
    X ......... X
    X ......... X
    X ......... X
    XXXXXXXX

    Voilà le code qui nous sert de base :

    (define (etat capteur monde-vu)
    (assoc capteur monde-vu))

    ;; l = 3, c = 4
    ;; | 0 1 2 3
    ;; -----------
    ;; 0 | 0 1 2 3
    ;; 1 | 4 5 6 7
    ;; 2 | 8 9 A B

    ; etant donne une position, renvoie les coordonnees i j dans le plan
    (define (get-coord p) ; p = i*c + j
    (let ((j (remainder p nbCol))
    (i (quotient p nbCol))
    )
    (list i j)
    ) ; fin let
    )

    ; etant donne les coordonnees dans le plan, renvoie la position dans la liste
    (define (make-position i j)
    (+ (* i nbCol) j))

    ; renvoie l'info en i-1 j-1
    (define (get-fg kap carte i j)
    (if (or (= i 0) (= j 0)) (list kap 'obstacle)
    (list kap (decode (list-ref carte (make-position (- i 1) (- j 1)))) ))
    )

    ; renvoie l'info en i-1 j+1
    (define (get-fd kap carte i j)
    (if (or (= i 0) (= j (- nbCol 1))) (list kap 'obstacle)
    (list kap (decode (list-ref carte (make-position (- i 1) (+ j 1))))))
    )

    ; renvoie l'info en i-1 j
    (define (get-fore kap carte i j)
    (if (= i 0) (list kap 'obstacle)
    (list kap (decode (list-ref carte (make-position (- i 1) j)))))
    )

    ; renvoie l'info en i+1 j
    (define (get-back kap carte i j)
    (if (= i (- nbLig 1)) (list kap 'obstacle)
    (list kap
    (decode (list-ref carte (make-position (+ i 1) j)))))
    )

    ; renvoie l'info en i j-1
    (define (get-gauche kap carte i j)
    (if (= 0 j) (list kap 'obstacle)
    (list kap
    (decode (list-ref carte (make-position i (- j 1))))))
    )

    ; renvoie l'info en i j+1
    (define (get-droit kap carte i j)
    (if (= j (- nbCol 1)) (list kap 'obstacle)
    (list kap
    (decode (list-ref carte (make-position i (+ j 1))))))
    )

    ; renvoie l'info en i+1 j-1
    (define (get-bg kap carte i j)
    (if (or (= i (- nbLig 1)) (= 0 j)) (list kap 'obstacle)
    (list kap
    (decode (list-ref carte (make-position (+ 1 i) (- j 1))))))
    )

    ; renvoie l'info en i+1 j+1
    (define (get-bd kap carte i j)
    (if (or (= i (- nbLig 1)) (= j (- nbCol 1))) (list kap 'obstacle)
    (list kap
    (decode (list-ref carte (make-position (+ 1 i) (+ 1 j))))))
    )

    ; affiche la carte avec le R en position p
    (define (affiche-map carte p)
    (define (affaux cpt szMap)
    (if (< cpt szMap)
    (begin
    (if (= 0 (remainder cpt nbCol)) (newline))
    (if (= cpt p) (display "R")
    (display (decode-display (list-ref carte cpt))))
    (display " ")
    (affaux (+ 1 cpt) szMap)
    ) ;begin
    (display "\n****\n"))
    ) ;define

    (affaux 0 (length carte))
    )
    ;; on a une carte, on a la position courante
    (define (getinfo carte position)
    (let* ((coord (get-coord position))
    (lig (car coord))
    (col (cadr coord))
    (cpt -1)
    ) ;; on sait la coordonnee (i j)
    (affiche-map carte position)
    (map (lambda (f)
    (set! cpt (+ 1 cpt))
    (apply f (list (list-ref capteursNom cpt) carte lig col)))
    capteursFun
    ) ; fin map
    ) ; fin let*
    )

    ; cree une carte
    (define (make-carte)
    (let (( sz (* nbLig nbCol))
    )
    (do ((carte '() (cons (random nbEtats) carte))
    (i 0 (+ i 1))
    ) ; fin des variables
    ((= i sz) carte) ; test d'arret
    ) ; fin du do
    ) ; fin du let
    )

    ;; variables globales
    (define capteursNom '(fg avant fd droite bd arriere bg gauche))
    (define capteursFun `(,get-fg ,get-fore ,get-fd ,get-droit ,get-bd ,get-back ,get-bg ,get-gauche))

    (define nbEtats 2)

    (define (decode val)
    (list-ref '(vide tresor obstacle) val))

    (define (decode-display val)
    (cadr (assoc val '( (0 ".") (1 "X") ))))


    (define nbCol 12)
    (define nbLig 12)
    (define maCarte (make-carte))

    ;;;;; exemple d'utilisation
    ; > (getinfo maCarte 0)
    ;
    ; R T X X . T
    ; T T . . T T
    ; X . . X . T
    ; X T . . T X
    ; ****
    ; ((fg obstacle) (avant obstacle) (fd obstacle) (droite tresor) (bd tresor) (arriere tresor) (bg obstacle) (gauche obstacle))
    ; >

    Je vous remercie en espérant avoir été assez clair.++

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Arrg désolé... je viens juste de voir ton message perdu parmi tous les nouveaux. Je vais essayer d'y répondre à un moment.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 67
    Points : 24
    Points
    24
    Par défaut
    Il n'y a pas de soucis prends ton temps.

    Super cool à toi de t'y pencher. Merci encore.++

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Je prends mon temps je sais -_-

    J'ai exécuté ce que tu as écris, et je ne suis pas sûr de comprendre ce qui te pose problème : « Comment faire pour former les 4 côtés du carrés par des "X" ou donc des murs loL »

    Juste en modifiant cette fonction par le code en bleu
    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
    (define (affiche-map carte p)
      (define (affaux cpt szMap)
        (if (< cpt szMap)
            (begin
              (if (= 0 (remainder cpt nbCol)) (begin (display "|") (newline) (display "|")))
              (if (= cpt p) (display "R")
                  (display (decode-display (list-ref carte cpt))))
              (display " ")
              (affaux (+ 1 cpt) szMap)
              ) ;begin
            (display "|\n****\n"))
        ) ;define
      
      (affaux 0 (length carte))
      )
    On obtient les murs sur les côtés.
    Ça ne doit pas être sorciers en jouant avec tes variables de faire
    où le nombre de "-" dépend du nombre de colonnes.

    Cependant, je tiens à te signaler que ce que tu fais ne ressemble nullement à du code Scheme dans le bon et dû forme. Et quitte à utiliser de l'impératif à tout va tu devrais utiliser aussi les formes itératives non ?
    Jette un coup d'œil là dedans
    http://pre.plt-scheme.org/docs/html/guide/for.html

Discussions similaires

  1. Création de labyrinthe
    Par sooth96 dans le forum Caml
    Réponses: 10
    Dernier message: 24/04/2015, 14h08
  2. Création de Labyrinthe en C
    Par page614 dans le forum C
    Réponses: 2
    Dernier message: 30/01/2008, 14h47
  3. Création Labyrinthe en C
    Par page614 dans le forum C#
    Réponses: 2
    Dernier message: 30/01/2008, 13h30
  4. [XPCE] Création de labyrinthe
    Par frankbe dans le forum Prolog
    Réponses: 1
    Dernier message: 10/01/2007, 08h21
  5. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

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