J'ai appris le C il y a pas longtemps et j'avais auparavant des bonnes notions en html et en php, ce qui m'a aidé un peu. J'ai donc décidé de me lancer dans un Pacman. Tout allait bien jusqu'à ce que je veuille déplacer les ennemis. J'ai pondu ce code après d'intenses réflexions en cours de français mais il fait ramer mon programme et je comprends pas pourquoi. Je précise que sans le code ci-après le programme marche à la perfection (mis à part l'ennemi qui ne bouge pas ).
Précisions :
- pour l'instant je ne déplace qu'un ennemi chaque chose en son temps
- Mon code est composé de 2 parties : une désigne au pif un sens de déplacement (HAUT / BAS ou GAUCHE / DROITE) qui regarde où est mon perso et qui déplace l'ennemi si il peut, et une autre qui prends le relais si on a pas pu en trouvant une autre direction.

Voila mon code :
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
void deplacerEnnemis(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *posE, SDL_Rect *posJ)
{
int nombreAleatoire = 0, directionTrouvee = 0, recommencerBoucle = 1, i = 0;
srand(time(NULL));     // Gestion de nombres aléatoires
 
nombreAleatoire = rand()%2;
 
while(recommencerBoucle = 1)
{
    i++;
    switch (nombreAleatoire)
    {
        case 0:
            if(posE->y > posJ->y) // Le joueur est plus bas
            {
                if(carte[posE->x][posE->y - 1] != MUR)
                {
                    posE->y--;
                    directionTrouvee = 1;
                    recommencerBoucle = 0;
                    break;
                }
                else
                {
                    nombreAleatoire = !nombreAleatoire;
                    break;
                }
            }
 
 
            if (posE->y < posJ->y) // Le joueur est plus haut
            {
                if(carte[posE->x][posE->y + 1] != MUR)
                {
                    posE->y++;
                    directionTrouvee = 1;
                    recommencerBoucle = 0;
                    break;
                }
                else
                {
                    nombreAleatoire = !nombreAleatoire;
                    break;
                }
            }
 
 
            else
            {
                nombreAleatoire = !nombreAleatoire;
                break;
            }
 
 
        case 1:
            if(posE->x > posJ->x) // Le joueur est à gauche
            {
                if(carte[posE->x - 1][posE->y] != MUR)
                {
                    posE->x--;
                    directionTrouvee = 1;
                    recommencerBoucle = 0;
                    break;
                }
                else
                {
                    nombreAleatoire = !nombreAleatoire;
                    break;
                }
            }
 
 
            if (posE->x < posJ->x)// Le joueur est à droite
 
            {
                if(carte[posE->x + 1][posE->y] != MUR)
                {
                    posE->x++;
                    directionTrouvee = 1;
                    recommencerBoucle = 0;
                    break;
                }
                else
                {
                    nombreAleatoire = !nombreAleatoire;
                    break;
                }
            }
 
 
            else
            {
                nombreAleatoire = !nombreAleatoire;
                break;
            }
 
    }
if(i > 1)
recommencerBoucle = 0;
}
 
 
 
if (directionTrouvee = 0)
{
    while (directionTrouvee = 0)
    {
        nombreAleatoire = rand()%4;
 
        switch (nombreAleatoire)
        {
            case HAUT:
            if (posE->y - 1 < 0) // Si l'ennemi dépasse l'écran, on recommence
                break;
            if (carte[posE->x][posE->y - 1] == MUR) // S'il y a un mur, on recommence
                break;
 
                // Si on arrive là, c'est qu'on peut déplacer l'ennemi !
                posE->y--;
                directionTrouvee = 1;
                break;
 
            case BAS:
            if (posE->y + 1 >= NB_BLOCS_HAUTEUR) // Si l'ennemi dépasse l'écran, on recommence
                break;
            if (carte[posE->x][posE->y + 1] == MUR) // S'il y a un mur, on recommence
                break;
 
                // Si on arrive là, c'est qu'on peut déplacer l'ennemi !
                posE->y++;
                directionTrouvee = 1;
                break;
 
            case GAUCHE:
            if (posE->x - 1 < 0) // Si l'ennemi dépasse l'écran, on recommence
                break;
            if (carte[posE->x - 1][posE->y] == MUR) // S'il y a un mur, on recommence
                break;
 
                // Si on arrive là, c'est qu'on peut déplacer l'ennemi !
                posE->x--;
                directionTrouvee = 1;
                break;
 
            case DROITE:
            if (posE->x + 1 >= NB_BLOCS_LARGEUR) // Si l'ennemi dépasse l'écran, on recommence
                break;
            if (carte[posE->x + 1][posE->y] == MUR) // S'il y a un mur, on recommence
                break;
 
                // Si on arrive là, c'est qu'on peut déplacer l'ennemi !
                posE->x++;
                directionTrouvee = 1;
                break;
        }   // Fin du swich
    }   // Fin du while
}   // Fin du if
}

Je précise que je suis en 2nde donc les trucs de vecteurs et tout euh o_O quoi.
J'ai cherché une solution à mon pb mais j'ai fini par préferer poster mon code directement comme j'en trouvais pas. Merci de vos réponses