Bonjour,
J'ai un problème avec la procédure suivante:

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
procedure carottes;
var
 m : integer;
begin
ate := 0;
  for m := 1 to 29 do
    begin
    glPushMatrix();
    glTranslatef(acar[m], bcar[m], ccar[m]);
    glColor3f( 153, 153, 0 );
    gluCylinder( glunewquadric(), 0.05, 0.0, 0.3, 30, 30 );
    glPopMatrix();
    if ((a < acar[m] + 1.2) and (a > acar[m] + 0.9)  and (b > bcar[m] - 0.2) and (b < bcar[m] + 0.2) and
      (c < ccar[m] + 1.1)) then
    ccar[m] := ccar[m] + 7;
    ate := ate + 1;
    if ate > 30 then
    Exit := 1;
end;
Légende:
a, b, c : Coordonnées de mon personnage
acar : Tableau de coordonnées abscisses de carottes
bcar : Tableau de coordonnées ordonnées de carottes
ccar : Tableau de coordonnées cotes de carottes
ate : Une variable qui indique le nombre de carottes ramassées

Remarque: Mon repère est inversé, je me déplace dans le sens négatif.


Dans ce code, je voudrais que lorsque mon personnage est à une certaine proximité d'une de mes carottes (ici, la carotte m), sa coordonnée de cote prenne + 7 (donc la carotte monte) et que la variable ate prenne + 1 (donc j'ai mangé une carotte de plus). Si j'ai mangé x carottes (donc quand ate = x), je sors du niveau (Exit := 1).

Problèmes:

- La partie and (a > acar[m] + 0.9) de mon code n'est "pas lue" par le compilateur, càd que lorsque je suis sur une carotte tout celles qui la précedent disparraissent aussi (donc y a que if a < acar[m] + 1.2 qui est compilée de mon point de vue).

- Le plus sérieux des deux problèmes est celui-ci: Si je mets ate à une valeur moindre de 30 (dans ce cas là), Exit prend d'ores et déjà 1 et je sors du niveau avant même de le commencer (mon perso commence à l'abscisse 0).

Quelqu'un peut m'aider?
Merci d'avance