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

Turbo Pascal Discussion :

Mouvement du "snake"


Sujet :

Turbo Pascal

  1. #1
    Membre du Club
    Mouvement du "snake"
    Bonjour

    Je suis en train de programmer le jeu "snake". Mais j'ai besoin d'aide : le "snake" a un pouvoir, c'est quand il passe par la frontière de la fenêtre, il apparaîtra de l'autre coté sur la même ligne (si le mouvement est horizontal) et sur la même colonne (si le mouvement est vertical).
    La problème est que le "snake" passe toujours à la ligne suivante, puis retourne vers la ligne initiale.
    Voici le code ("delay" pour marquer une instant (vitesse de mouvement), "print_element" pour afficher le "snake", "print" est la procédure principale).
    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
    program test;
    uses wincrt, winprocs;
    procedure delay ( millisecond : integer );
    var
    fin : longint;
    begin
    fin := GetTickCount + ( Millisecond );
    Repeat
    Until GetTickCount >= fin;
    end;
    procedure print_element ( x, y : byte );
    var
    i : byte;
    begin
    gotoXY ( x, y );
    write('..');
    delay(100);
    gotoXY ( x, y );
    write(' ');
    end;
    procedure print;
    var
    x, y : byte;
    begin
    while not x = 0 do { pour marquer une boucle infinie }
       begin
    	for x := 1 to 80 do
    		print_element(x, 1);
       end;
    end;
    begin
    print;
    end.

  2. #2
    Membre confirmé
    Bonjour.

    Si le programme n'affiche pas correctement le "snake", c'est sans doute que la procédure d'affichage est à revoir ...

    Actuellement, la procédure print_element affiche '..' à la position x,y.
    Mais si x vaut 80, c'est-à-dire si on est en fin de ligne, alors elle affichera '..' au début de la ligne suivante.
    Et si x vaut 79, elle affichera '.' en fin de ligne et '.' en début de la ligne suivante.

    Il faut donc revoir cette procédure print_element.
    Afin qu'elle affiche '..' toujours sur la même ligne, il faut tester la valeur de x et agir différemment suivant que x est compris entre 1 et 78, que x vaut 79 ou que x vaut 80.

    Un "Case of" est parfaitement adapté à la situation.

  3. #3
    Membre du Club
    Citation Envoyé par Prof Voir le message


    Actuellement, la procédure print_element affiche '..' à la position x,y.
    Mais si x vaut 80, c'est-à-dire si on est en fin de ligne, alors elle affichera '..' au début de la ligne suivante.
    Et si x vaut 79, elle affichera '.' en fin de ligne et '.' en début de la ligne suivante.

    Il faut donc revoir cette procédure print_element.
    Afin qu'elle affiche '..' toujours sur la même ligne, il faut tester la valeur de x et agir différemment suivant que x est compris entre 1 et 78, que x vaut 79 ou que x vaut 80.
    merci pour votre remarque!!