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

Langage Pascal Discussion :

[LG]problème pacman


Sujet :

Langage Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [LG]problème pacman
    hello j'ai un problème...
    comment faire pour que le perso compte les point qu'l mange et ne compte pas le espace
    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
    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
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    PROGRAM PACMAN;
     
    USES wincrt;
    CONST Pac:STRING='@';
          Mur:STRING='=';
     
    VAR  rond:STRING;
         reponse:CHAR;
         X,y:byte;
         i,score:integer;
         PosmurD,PosmurG,PosmurH,PosmurB, z:integer;
         Cercle:INTEGER;
         point:integer;
     
     
    BEGIN
     
    PosmurG:=2;
    PosmurD:=77;
    PosmurH:=1;
    PosmurB:=24;
    Rond:='*';
     
     X:=40;
     Y:=10;
     WriteLn('||===========================================================================||');
     Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
      Write('||');
     FOR Z := 1 to 75 do
         Write(rond);
     WriteLN('||');
     WriteLn('===============================================================================');
     GotoXY(X,Y);
     Write(Pac);
     Cercle:=10;
     REPEAT
             Cercle:=cercle-1;
             reponse:=readkey;
             CASE reponse OF
             '8' : BEGIN
                          Y:=Y-1;
                          IF Y=PosmurH THEN Y:=Y+1;
                          GotoXY(X,Y+1);
                          Write(' ');
                          Point:=Pos('*',rond);
                           if point=1 then cercle:=cercle-1
                             else
                              cercle:=cercle;
                   END;
             '2': BEGIN
                      Y:=Y+1;
                      IF Y =PosmurB THEN Y:=Y-1;
                      GotoXY(X,Y-1);
                      Write(' ');
                      Point:=Pos('*',rond);
                           if point=1 then cercle:=cercle-1
                             else
                              cercle:=cercle;
                 END;
            '4': BEGIN
                      X:=X-1;
                      IF X = PosmurG THEN X:=X+1;
     
                      IF Y=SCORE THen Score:=SCORE+1;
                      GotoXY(X+1,Y);
                      Write(' ');
                      Point:=Pos('*',rond);
                           if point=1 then cercle:=cercle-1
                             else
                              cercle:=cercle;
                 END;
            '6': BEGIN
                      X:=X+1;
                      IF X = posmurD THEN X:=X-1;
                      IF Y=SCORE THen Score:=SCORE+1;
     
                      GotoXY(X-1,Y);
                      Write(' ');
                      Point:=Pos('*',rond);
                           if point=1 then cercle:=cercle-1
                             else
                              cercle:=cercle;
     
                 END;
            'e': exit;
         END;
     Write(' ');
     gotoXY(X,Y);
     Write(Pac);
     
     
     UNTIL (cercle = 0) OR (reponse='e');
     WriteLn('Gagné!!!')
    END.

  2. #2
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Tout d'abord, je te ferai la remarque qu'il est TRES difficile qu'on lise ton code lorsque tu le verses comme cà sur le forum.

    Perso, lorsque je programmais encore mon Snake, j'ai tenté cà et il n'y a pas beaucoup de personnes qui l'ont lu en entier et essayé de szvoir ce qu'il fait

    Donc, je te proposerais tout d'abord de créer un petit espace (y'a tellement de serveur ) et d'y mettre ton code source et surtout l'exécutable, comme cà au moins avant de commencer à voir qui fait quoi dans le programme, on aura déjà au moins un bref aperçu 8) .

    D'autre part, je trouve certaines parties de ton code assez bizarre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                           if point=1 then cercle:=cercle-1 
                             else 
                              cercle:=cercle;
    Cercle := cercle :

    Enfin, tout ce que tu as posté (à moins que j'ai mal lu) consiste beaucoup plus à la procédure pour détecter le mouvement et repositionner "pacman". Je pense que tu devrais créer séparément
    1) une procédure pour la gestion des déplacements
    2) une procédure pour la gestion des collisions
    Cà te permettra à mon avis de pouvoir calculer enfin tes points par des instructions simples du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if collision then point := ....
    .

    Voilà, c'est tout.

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    C'est pas mal la procédure pour afficher le décor Tu peux faire un for vu que tu répètes x fois la même instruction !
    Sinon ta question est pas très précise Ciomment sont représentés les pacs, Pacman et les espaces dans ton programme ?

    Tu devrais peut-être t'inspirer d'un programme que quelqu'un a fait récemment, cette personne voulait faire un pacman aussi et elle avait donné pas mal de sources je crois !

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  4. #4
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Il y'a aussi plein de pacman tout fait sur le net en téléchargement gratuit.

    http://n.bernier.free.fr/pascal/pacman/pacman.zip

    ou encore

    regarde la page ci

    Tu peux tous les trouver en utilisant 8)

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    hello!

    pour moi il me semble que tu pars sur de mauvaises bases (la structure est pas terribles). Je pense que tu pourrais te simplifier la vie en utilisant un tableau à 2 dimensions. Dans chaque cases du tableau, tu mets des variables booléennes, qui répondraient aux questions:

    - cette case contient-elle un fantôme?
    - cette case contient-elle le pacman?
    - ...


    un truc du genre:
    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
     
    ...
     
    Var Grille = Array [1..TailleX, 1..TailleY] of Record
                                                        PacMan,
                                                        Fantome: boolean;
                                                      End;
    Procedure Perdre;
    Begin
      ClrScr;
      WriteLn ('Tu as perdu !');
      Readkey;
      DoneWinCRT;
    End;
     
    {////////////////////////////////////////////////////////////////////////
     // PROGRAMME PRINCIPAL                                                 //
     ////////////////////////////////////////////////////////////////////////}
    Begin
      ...
      if (Grille[1, 1].PacMan=true And Grille[1, 1].Fantome=true) Then Perdre;
    End;
    Le array déclare un tableau. Son nom (du tableau en entier) est Grille. Ses dimensions sont déclarées entre le []. Elles vallent de 1 à TailleX en large et de 1 à TailleY en hauteur. Il y a donc TailleX * TailleY cases dans ce tableau. Dans chacune de ces cases, il y en a deux plus petites (dans le record). Une qui s'appelle Fantome et une PacMan. Ce sont deux boolean, qui peuvent être soit vrai soit fausse.

    Donc, chaque case du tableau peut prendre quatre valeur différentes:
    - soit Fantome = true et Pacman = True (il y a le Pacman et le Fantome sur la meme case)
    - soit Fantome = true et Pacman = False
    - soit Fantome = False et Pacman = true
    - soit Fantome = False et Pacman = False

    Pour tester chacune de ces sous-case, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      if (Grille[CaseEnLarge, CaseEnHaut].PacMan=True And Grille[CaseEnLarge, CaseEnHaut].Fantome=true) Then Perdre;
    De plus, tu devrais choisir des noms de variables plus parlant (ça veut dire quoi, "Z" ?) S'il s'agit d'un compteur de boucle for, appelle-la Compteur ou au moins Cmpt !

    Et une dernière chose, cette suite d'instructions qui se ressemblent peuvent facilement être mises dans une boucle !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      FOR Compteur1 := 1 to X do
      BEGIN  
        Write('||'); 
        FOR Compteur2 := 1 to 75 do 
           BEGIN 
             Write(rond);
           END;
        Writeln;
      END

    Voila, pour le reste à toi d'improviser! Mais avec des tableau ça marche nickel, et l'avantage est que tu n'es pas limité à trois dimensions comme dans la réalité...


    Tu peux très bien utiliser un "array[1..20, 1..20, 1..20, 1..20] of... ", ce qui fait 4 dimensions !)
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Ton probleme est la clarté de ton code, l'indentation mériterait plus d'attention, personellement jai du mal a tout comprendre surtout le

    cercle := cercle...

Discussions similaires

  1. Projets communs en cours : Pacman - SKAN (OS)
    Par Smortex dans le forum Assembleur
    Réponses: 11
    Dernier message: 02/04/2006, 22h45
  2. Projet Pacman
    Par Renesis57 dans le forum Assembleur
    Réponses: 26
    Dernier message: 27/08/2005, 00h51
  3. Algo Pacman
    Par Pfeffer dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/03/2005, 13h40
  4. Proble capture direct Show
    Par liliemumue dans le forum DirectX
    Réponses: 3
    Dernier message: 13/12/2004, 21h04
  5. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49

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