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

JavaScript Discussion :

Projet informatique S1 pr�pa int�gr�e Algoscript (variante de Javascript)


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre � l'essai
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2020
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 22
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2020
    Messages : 6
    Par d�faut Projet informatique S1 pr�pa int�gr�e Algoscript (variante de Javascript)
    Bonjour tout le monde, je suis en pr�pa int�gr�e en �cole d'ing� et j'ai un projet d'info � faire sur algoscript (une variante de javascript).
    C'est s�rement tr�s facile pour vous mais je n'ai jamais vraiment programm� avant �a et je suis bloqu�.

    Mon projet est un labyrinthe dans lequel on doit trouver la sortie. Le personnage que l'on commande est la tortue graphique, (command�e avec zqsd). J'ai cr�e un programme stockant les coordonn�es de la tortue, et g�n�r� le trac� du labyrinthe avec un tableau (0 pour une case noire/mur, et 1 pour une case blanche).
    Mon probl�me c'est que je n'arrive pas � trouver un moyen d'emp�cher la tortue d'entrer dans les cases noires et donc de traverser les murs. J'ai essay� de la d�placer vers l'arri�re quand ses coordonn�es rencontrent celles des limites des cases noires mais �a ne fonctionne pas et je ne comprends pas pourquoi. Je ne sais pas si quelqu'un i�i a le temps et peut regarder mon code et m'aider, merci d'avance !! Le site sur lequel je travaille est https://algoscript.info/
    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
    // Your code here
    var x;
    var y;
    var a;
     
     
    //création de la bordure
    RectanglePlein(0, 0, 1280, 20, 'black');
    RectanglePlein(1260, 20, 20, 110, 'black');
    RectanglePlein(1260, 185, 20, 410, 'black');
    RectanglePlein(0, 0, 20, 595, 'black');
    RectanglePlein(0, 570, 1280, 25, 'black');
     
     
    Deplacer(30, 50); //point de départ
    Lever();
    a = 0;
     
     
    function Keypressed(k) {
     
      if (k == Caractere_vers_Ascii('D')) {
     
        Droite(90);
        a = a + 90;
      }
      if (k == Caractere_vers_Ascii('Q')) {
     
        Gauche(90);
        a = a - 90;
      }
     
     
     
      if (k == Caractere_vers_Ascii('Z')) {
        Avancer(2); //Avance le personnage
        if (a < -360 || a > 360) {
          a = 0;
        }
     
        if (a == 0 || a == 360 || a == -360) { //Actualise les coordonnées du personnage 
          y = y + 2;
        }
        if (a == 180 || a == -180) { //Actualise les coordonnées du personnage 
          y = y - 2;
        }
        if (a == 90 || a == -270) { //Actualise les coordonnées du personnage 
          x = x + 2;
        }
        if (a == 270 || a == -90) { //Actualise les coordonnées du personnage 
          y = y + 2;
        }
      }
     
     
    }
     
    Ecrire(x);
     
    var T = Tableau(10, 18);
    T = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0];
    // T[numéro de ligne (0 à 9)*nombre de caractère par ligne + numéro du caractère(de 0 à 17)]
    Ecrire(T[0 * 18 + 0]); //test du tableau
     
    for (i = 0; i <= 9; i = i + 1) {
      for (j = 0; j <= 17; j = j + 1) {
     
        if (T[i * 18 + j] == 0) {
     
          RectanglePlein(j * 1240 / 18 + 20, i * 55 + 20, 1240 / 18, 55, 'black');
     
     
          if (x == j * 1240 / 18 + 20) {   //Déplacer la tortue vers l'arrière lorqu'elle arrive sur la limite d'un mur
     
            Deplacer(x - 2, y);
     
          }
          if (y == i * 55 + 20) {
     
            Deplacer(x, y - 2);
          }
          if (x == (j+1) * 1240 / 18 + 20) {
     
            Deplacer(x + 2, y);
     
          }
          if (y == (i+1) * 55 + 20) {
     
            Deplacer(x, y + 2);
          }
        }
      }
    }
    Fichiers attach�s Fichiers attach�s

  2. #2
    Expert confirm�
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Ao�t 2003
    Messages
    3 684
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : danseur

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 3 684
    Par d�faut
    bonjour,

    un petit rendu serait sympathique;
    et si possible, le reste du code (RectanglePlein()???)

  3. #3
    Membre � l'essai
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2020
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 22
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2020
    Messages : 6
    Par d�faut
    https://algoscript.info/#&togetherjs=sGvC8Gr3Tp Si tout fonctionne correctement, vous aurez acc�s � un rendu avec ce lien dans "graphic output".
    Le code est �crit en entier. RectanglePlein est une fonction toute faite que l'on nous donne. En effet, algoscript est un javascript simplifi� pour l'apprentissage avec des fonctions pr�-faites que l'on a juste � utiliser.

  4. #4
    Expert confirm�
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par d�faut
    vous devez tester si la position future est dans un mur avant de modifier x et y.

    le code suivant g�re les cases int�rieures, il faut encore rajouter la gestion des collisions sur les bords :
    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
     
    function Keypressed(k) {
     
      if (k == Caractere_vers_Ascii('D')) {
     
        Droite(90);
        a = a + 90;
      }
     
      if (k == Caractere_vers_Ascii('Q')) {
     
        Gauche(90);
        a = a - 90;
     
      }
     
      if (a < 0) {
        a += 360;
      }
      if (a >= 360) {
        a -= 360;
      }
     
     
     
      if (k == Caractere_vers_Ascii('Z')) {
     
     
        if (a == 0) { //Actualise les coordonnées du personnage 
          if (position_dans_couloir(x, y + 2)) {
            y = y + 2;
            Avancer(2); //Avance le personnage
          }
        }
        if (a == 180) { //Actualise les coordonnées du personnage 
          if (position_dans_couloir(x, y - 2)) {
            y = y - 2;
            Avancer(2); //Avance le personnage
          }
        }
        if (a == 90) { //Actualise les coordonnées du personnage 
          if (position_dans_couloir(x + 2, y)) {
            x = x + 2;
            Avancer(2); //Avance le personnage
          }
        }
        if (a == 270) { //Actualise les coordonnées du personnage 
          if (position_dans_couloir(x - 2, y)) {
            x = x - 2;
            Avancer(2); //Avance le personnage
          }
        }
     
     
      }
     
     
      // debug
      RectanglePlein(60, 640, 200, 80, "white");
      Texte(100, 650, x.toString() + ", " + y.toString() + ", " + a.toString(), "black");
     
     
    }
     
     
    function position_dans_couloir(x, y) {
     
      i = Math.floor((30 - y) / 55);
      j = Math.floor((x + 10) / (1240 / 18));
     
     
      // debug position
      //RectanglePlein(60, 750, 200, 80, "white");
      //Texte(100, 760, i.toString() + ", " + j.toString() + " | " + T[i * 18 + j], "black");
      //
      return (T[i * 18 + j] == 1);
     
    }

  5. #5
    Membre � l'essai
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2020
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 22
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2020
    Messages : 6
    Par d�faut
    Merci beaucoup je vais regarder �a !

  6. #6
    Membre � l'essai
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2020
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 22
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2020
    Messages : 6
    Par d�faut
    Je ne comprends pas bien la fonction "position dans le couloir", que fait la fonction return exactement ?

    En effet, le d�placement (Avancer(2)) ne fonctionne pas lorsque j'appuie sur Z, et "position dans le couloir" en est une condition.
    Comme je ne comprends pas "position dans le couloir", je ne peux pas r�soudre le probl�me du d�placement.

  7. #7
    Expert confirm�
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par d�faut
    la fonction calcule la position dans le tableau en fonction des coordonn�es x et y et elle retournes "true" s'il s'agit d'une case du tableau qui correspond � un couloir.

  8. #8
    Expert confirm�
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Ao�t 2003
    Messages
    3 684
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : danseur

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 3 684
    Par d�faut
    Rien � voir, mais juste pour donner des id�es, j'ai adapt� mon laby � ta tortue: http://javatwist.imingo.net/labytortue.htm

    Code html : 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
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Labytortue</title>
    <style>
    .ligne{justify-content: center;display:flex;margin:0px auto;}
    .bloc{background:white;display:flex;justify-content:center;align-items:center;height:35px;width:35px;border:1px solid;}
    .black{background-color:black}
    .red{background-color:red;}
    #console{text-align:center;}
    .hide{display:none;}
    #plateau{display:flex;justify-content:space-evenly;align-items:center;justify-content:space-evenly;}
    button{margin:20px;}
    </style>
    </head>
    <body>
    <div id="plateau">
    <ul>
    <li>Les points d'entrée et de sortie sont à chaque fois redéfinis.</li>
    <li>Le parcours se fait de haut en bas (très arbitraire...).</li>
    <li>Le trajet de la tortue sera toujours le plus court possible.</li>
    <li>On peut passer d'une zone blanche à une autre dans les 8 directions mais les diagonales sont optionnelles.</li>
    <li>Tu peux transformer la tortue en lièvre en changeant la variable "vitesse".</li>
    <li>S'il n'y a pas d'issue, un nouveau labyrinthe est reconstruit automatiquement.<br />
    </ul>
    <div id="console">
    <button id="go">Générer un labyrinthe</button>
    <img src="sm60.gif" alt="tortue" id="tortue" class="hide" />
    </div>
    <div id="c"></div>
    </div>
    <script>
    // bouton permettant de générer le labyrinthe
    document.getElementById("go").addEventListener("click",()=>lab());
            const lab=()=>{
            document.getElementById("go").disabled=true;
            const c=document.getElementById("c");
            const large=10, long=18;
            // vidage du précédent labyrinthe, éventuellement
            while(c.lastChild){c.removeChild(c.lastChild);};
    //*************************LA GENERATION DU LABYRINTHE*************************
            const tr=document.createElement("div"), td=document.createElement("div"), t=[];
            tr.classList.add("ligne");td.classList.add("bloc");
            for(let i=0;i<long;i++){
                    let r=tr.cloneNode();c.appendChild(r);
                    for(let j=0;j<large;j++){
    // tableau t = cases du labyrinthe
                            let c=td.cloneNode();t.push(large*i+j);c.title=large*i+j+1;r.appendChild(c);
                    };
            };      
            const cel=c.querySelectorAll(".bloc");
    // t2 contient la moitié des cases de t (aléatoire)
    // t3 contiendra tous les parcours possibles
    // t4 contiendra chaque dernière case des parcours
            let t2=new Set(), t3=[], t4=new Set(), bis=t.slice();
            for(let i=large*large/2;i>=0;i--){
                    let h=Math.floor(Math.random()*bis.length);t2.add(bis[h]);bis.splice(h,1)
            }
    // les cases correspondantes dans t sont noircies
            t.forEach((v,i,ta)=>{if(t2.has(i)){ta[i]="no";cel[i].classList.add("black")}else ta[i]=[]})
    //On choisit une case de départ et d'arrivée parmi les blanches (si possible)
            let debut, fin, tdeb=[], tfin=[];
            for(let i=0;i<large;i++){if(t[i]!="no"){tdeb.push(i)}};
            if(tdeb.length>0){debut=tdeb[Math.floor(Math.random()*tdeb.length)]}else lab();
            for(let i=t.length-large;i<t.length;i++){if(t[i]!="no"){tfin.push(i)}};
            if(tfin.length>0){fin=tfin[Math.floor(Math.random()*tfin.length)]}else lab();
    // La case de départ sera à l'origine de tous les parcours (ben oui)
            t3[0]=[debut];
    // définition des possibilités de déplacement pour chaque case blanche (maximum 8 directions)
            for(let lg=t.length,i=lg-1;i>=0;i--){if(t[i]!="no"){
                    if(i<lg-1  && t[i+1]!="no" && cel[i+1] && (i+1)%large!=0){t[i].push(i+1)}
                    if(i>0 && t[i-1]!="no" && cel[i-1] && i%large!=0){t[i].push(i-1)}
                    if(i<lg-large  && t[i+large]!="no"){t[i].push(i+large)}
                    if(i>=large  && t[i-large]!="no"){t[i].push(i-large)}
                    // ces 4 directions sont optionnelles: on peut commenter ces 4 lignes
                    if(i<lg-large-1 && t[i+large+1]!="no"&& (i+large+1)%large!=0){t[i].push(i+large+1)}
                    if(i>large && t[i-large-1]!="no" && i%large!=0){t[i].push(i-large-1)}
                    if(i<=lg-large && t[i+large-1]!="no"&& i%large!=0){t[i].push(i+large-1)}
                    if(i>=large && t[i-large+1]!="no" && (i-large+1)%large!=0){t[i].push(i-large+1)}
            }}
    //*************************LA RESOLUTION (FONCTION RECURSIVE)*************************
            const run=(arg)=>{              
                    arg++;
                    let long=t3.length;
    // ajout de toutes les nouvelles possibilités au tableau des parcours 
                    for(let i=0;i<long;i++){
                            let last=t3[i][t3[i].length-1];
                            for(let j=0;j<t[last].length;j++){
                                    if(!t4.has(t[last][j])){// indique qu'une nouvelle case est à ajouter
                                            t3.push([...t3[i],t[last][j]]);t4.add(t[last][j]);
                                    };
                            }
                    };
                    // on réinitialise t4 avec simplement les 2 dernières valeurs de chaque parcours
                    t4.clear();
                    for(let i=0;i<t3.length;i++){
                            t4.add(t3[i][t3[i].length-1]);t4.add(t3[i][t3[i].length-2])
                    };
                    if(t4.has(fin)){// test de victoire     : dernière case atteinte
                            const parcours=[],vitesse=500;
                            let cell=0;
                            for(let i=0;i<t3.length;i++){
                                    if(t3[i][t3[i].length-1]==fin){
                                            for(let j=0;j<t3[i].length;j++){parcours.push(t3[i][j]);
                                            };
                                    }
                            };
                            const timer=setInterval(()=>{
                                    if(cell<parcours.length){
                                            document.getElementById("tortue").classList.remove("hide");
                                            cel[parcours[cell]].appendChild(document.getElementById("tortue"));
                                            cel[parcours[cell]].classList.add("red");cell++
                                    }
                                    else {
                                            document.getElementById("console").appendChild(document.getElementById("tortue"));
                                            clearInterval(timer);
                                            document.getElementById("go").disabled=false;
                                            return
                                    }
                            },vitesse)
                    }
                    else{
                            // élimination des parcours provisoires sans issue
                            for(let i=0;i<t3.length;i++){if(t3[i].length<=arg){t3.splice(i,1);i--}};
                            if(!t3[0]){lab();return};// relance du constructeur
                            run(arg)
                    }
            };
            run(0);
    }
    </script>
    </body>
    </html>

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Projet AlgoScript (variante de JavaScript)
    Par Sosuk dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 25/11/2013, 19h26
  2. r�alisation d'un site de projet informatique
    Par liquid dans le forum G�n�ral Conception Web
    R�ponses: 3
    Dernier message: 23/08/2006, 17h47
  3. R�ponses: 7
    Dernier message: 04/05/2005, 14h38
  4. Formation "Chef de projets informatiques" � Paris8
    Par liliaparis dans le forum Etudes
    R�ponses: 3
    Dernier message: 24/04/2005, 12h52

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