Salut à toutes et à tous !
Je suis un novice en info mais mon école d'ingé m'a demandé de faire un genre de candy crush.. Un plantamiz quoi. Le but est de déplacer son curseur à l'endroit de la matrice souhaité. On appuie ensuite sur espace pour sélectionner le caractère et le faire passer en minuscule. Ensuite, soit on appuie sur 2 4 6 ou 8 pour intervertir sa position avec celle de celui placé en haut, à droit, en bas ou à gauche de celui sélectionné. L'ordinateur scan ensuite la matrice pour voir s'il y a des combinaisons... C'est jsutement là que mon programme plante... Il rentre dans une boucle infini et je sais pas pourquoi... j'ai VRAIMENT besoin de votre aide svp !
Voici la code
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <math.h>
#include <conio.h>
#include <unistd.h>
#include <strings.h>
//Prototypes de nos sous-programmes
void souris();
void actu1();
void apport1();
void test();
void restaure(FILE * fic3);
void gravite(char matrice[10][15], int x, int y);
void grille1();
int nettoyage(int modeleTrouve, int lig, int col);
int verificationModele(int lig,int col);
//Déclaration des ressources
int b,a,x,y,z,m,q,t,lvl,col,lig,cas,nbreFruitsSuppr,fruit,n,nbLettres,essai=0,score1=0,score2=0,score3=0,score4=0,score5=0;
char matrice[10][15],touche,carret,mem,choix,h;
char nom[50];
char modele[23][5][6]={'0'};
char typeNettoyage[23]={'M'};
char bareme[23]={0};
char lettres[6];
char score[5];
int nbcol[23]; int nblig[23];
void recherche_combi()
{
int i,j;
int cas;
int nbreFruitsSuppr;
int fruit;
for(i=0;i<10;i++)
{
for (j=0;j<15;j++)
{
cas = verificationModele(i,j);
if (cas != -1)
{
fruit=matrice[i][j];
nbreFruitsSuppr=nettoyage(cas,i,j);
points_fruits(cas,nbreFruitsSuppr,fruit);
}
}
}
}
int verificationModele(int lig,int col)
{
int i=0, j=0, trouve=1, m=0, modeleTrouve=-1;
char caractereAnalyse=matrice[lig][col];
m=0;
while ((m<23)&&(modeleTrouve==-1))
{
i=0;
if (((lig+nblig[m])<10)&&((col+nbcol[m])<15))
trouve=1;
else
trouve=0;
while ((i<5)&&(trouve==1))
{
j=0;
while ((j<5)&&(trouve==1))
{
if (modele[m][i][j]=='1')
{
if (matrice[i+lig][j+col]!=caractereAnalyse)
trouve=0;
}
j++;
}
i++;
}
if (trouve==0)
{
m++;
}
else {modeleTrouve=m;}}
return modeleTrouve;
}
int nettoyage(int modeleTrouve,int lig,int col)
{
int i,j;
int k;
int g[10]={0};
char x;
int w;
int nbreFruitsSuppr=0;
char caractere=matrice[lig][col];
if (typeNettoyage[modeleTrouve]=='T')
{
for(i=0;i<10;i++)
{
for (j=0;j<15;j++)
{
if (matrice[i][j]==caractere)
{
matrice[i][j]=' ';
nbreFruitsSuppr++;
}
}
}
}
if (typeNettoyage[modeleTrouve]=='M')
{
for(i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
if (modele[modeleTrouve][i][j]=='1')
{
matrice[i+lig][j+col]=' ';
}
}
}
}
for (t=0;t<10;t++)
{
test();
if (q!=0)
{
for (k=0;k<10;k++)
{
for (j=0;j<15;j++)
{
for (i=0; i<10; i++)
{
if(matrice[i][j] == ' ')
{
g[k]=g[k]+1;
}
}
}
w=g[0];
for (k=0;k<10;k++)
{
if (g[k]>w)
{
w=g[k];
}
}
i=0;
for (j=0;j<15;j++)
{
if (matrice[i][j]==' ')
{
x=rand()%5;
switch(x)
{
case 0:
Color(9,16);
x='S';
break;
case 1:
Color(12,16);
x='F';
break;
case 2:
Color(10,16);
x='P';
break;
case 3:
Color(8,16);
x='O';
break;
case 4:
Color(14,16);
x='M';
break;
}
matrice[i][j]=x;
}}
if (lvl==1){actu1();}
else if(lvl==2){actu2();}
else {actu3();}
gravite(matrice,8,0);
}} recherche_combi();
//ralentir l'action pour bien voir le déroulement du phénomène
}
return nbreFruitsSuppr;}
void points_fruits(int cas, int nbreFruitsSuppr, char fruit)
{
int i=0;
while (lettres[i]!=fruit)
i++;
if(nbreFruitsSuppr==0)
score[i]+=bareme[cas];
else score[i]+=nbreFruitsSuppr;
}
void grille1()
{
int i,j;
system("cls" );
system("Color 0F" );
srand(time(NULL));
//Initialisation du niveau
lvl=1;
//Creation matrice
for(i=0;i<10;i++)
{
for(j=0;j<15;j++)
{
x=rand()%5;
switch(x)
{
case 0:
Color(9,16);
matrice[i][j]='S';
break;
case 1:
Color(12,16);
matrice[i][j]='F';
break;
case 2:
Color(10,16);
matrice[i][j]='P';
break;
case 3:
Color(8,16);
matrice[i][j]='O';
break;
case 4:
Color(14,16);
matrice[i][j]='M';
break;
}
//Affichage
printf("%c ", matrice[i][j]);
}
//Affichage
printf ("\n\n" );
}
//Interface joueur
printf("\nPlayer : %s \nScore1 : %d /15 Score2 : %d /25 Score3 : %d /30 essais : %d /50 ",nom,score1,score2,score3,essai);
printf("\n\nP pour quitter en sauvegardant et revenir au menu" );
printf("\n\n2 pour aller vers le bas 8 pour aller vers le haut\n4 pour aller a gauche 6 pour aller a droite" );
col= 0;
gotoligcol(0,0);
Color(0,0);
//Contrat niveau 1
//Préparation d'une matrice sans possibilités inexploités... Pure de toute combinaison
souris();
}
void menu()
{
SetConsoleTitle("Plantamiz 2014" );
system("Color F0" );
FILE * fic = NULL;
fic = fopen("sauvegardenom.txt","w" );
if (fic !=0)
{
//Nouvelle Partie
system("cls" );
printf("Attention, une nouvelle partie entrainera le suppression de votre ancienne sauvegarde \nSouhaitez vous continuer ?" );
printf("\n\nTapez 1 pour continuer Tapez 2 pour annuler\n\n" );
z=0;
do
{
//Blindage
if (z==1)
{
system("cls" );
fflush(stdin);
printf("Erreur saisir 1 ou 2 !\n\n" );
printf("\n\nTapez 1 pour continuer Tapez 2 pour annuler\n\n" );
fflush(stdin);
scanf("%c", &h);
printf("\n" );
}
else
{
z=1;
fflush(stdin);
scanf("%c",&h);
}
}
while((h!='1')&&(h!='2'));
switch(h)
{
case '1':
printf("\n\nSaisissez votre nom: " );
fflush(stdin);
gets(nom);
fprintf(fic,"%s",nom);
fclose(fic);
grille1();
break;
case '2':
printf("\n\nAnnulation effectuee, retour menu !\n\n" );
system("PAUSE" );
system("cls" );
menu();
break;}
void souris()
{
int i,j;
a= (lig / 2);
b= (col / 2);
n= 0;
//Test du niveau actuel
gotoligcol(0,0);
while(carret ==0)
{
//recherche_combi(matrice);
if (kbhit())
{
touche=getch();
fflush(stdin);
switch (touche)
{
case '4':
//Si caractère sélectionné en minuscule, on switch sa position avec celui souhaité
if ((matrice[a][b]<123)&&(matrice[a][b]>96)&&(b > 0))
{
essai=essai+1;
//Switch prosition
mem=matrice[a][b-1];
matrice[a][b-1]=matrice[a][b];
matrice[a][b-1]=matrice[a][b-1]-32;
matrice[a][b]=mem;
recherche_combi();
//Recherche combinaisons + affichage
n=n+1;
}
col= col-2;
b= b-1;
if(col <= 0)
{
col= 0;
b= 0;
}
gotoligcol(lig,col);
break;
case '2':
if ((matrice[a][b]<123)&&(matrice[a][b]>96)&&(a < 9))
{
essai=essai+1;
mem=matrice[a+1][b];
matrice[a+1][b]=matrice[a][b];
matrice[a+1][b]=matrice[a+1][b]-32;
matrice[a][b]=mem;
recherche_combi();
n= n+1;
}
lig= lig+2;
a=a+1;
if(lig >= 18)
{
lig= 18;
a= 9 ;
}
gotoligcol(lig,col);
break;
case '8':
if ((matrice[a][b]<123)&&(matrice[a][b]>96)&&(a > 0))
{
essai=essai+1;
mem=matrice[a-1][b];
matrice[a-1][b]=matrice[a][b];
matrice[a-1][b]=matrice[a-1][b]-32;
matrice[a][b]=mem;
recherche_combi();
n= n+1;
}
lig=lig-2;
a=a-1;
if(lig <= 0)
{
lig= 0;
a=0;
}
gotoligcol(lig,col);
break;
case '6':
if ((matrice[a][b]<123)&&(matrice[a][b]>96)&&(b < 14))
{
essai=essai+1;
mem=matrice[a][b+1];
matrice[a][b+1]=matrice[a][b];
matrice[a][b+1]=matrice[a][b+1]-32;
matrice[a][b]=mem;
recherche_combi();
n=n+1;
}
col=col+2;
b=b+1;
if(col >= 28)
{
col= 28;
b= 14;
}
gotoligcol(lig,col);
break;
case 'p':
;
//Sauvegarde
FILE * fic1= fopen("sauvegardenom.txt","w" );
FILE * fic2= fopen("sauvegardescore1.txt","w" );
FILE * fic3= fopen("sauvegardematrice.txt","w" );
FILE * fic4= fopen("sauvegardeessai.txt","w" );
FILE * fic5= fopen("sauvegardescore2.txt","w" );
FILE * fic6= fopen("sauvegardescore3.txt","w" );
FILE * fic7= fopen("sauvegardescore4.txt","w" );
FILE * fic8= fopen("sauvegardescore5.txt","w" );
FILE * fic9= fopen("sauvegardelvl.txt","w" );
if((fic1!=0)&&(fic2!=0)&&(fic3!=0)&&(fic4!=0)&&(fic5!=0)&&(fic6!=0)&&(fic7!=0)&&(fic8!=0)&&(fic9!=0))
{
fprintf(fic1,"%s",nom);
fprintf(fic2,"%d",score1);
fprintf(fic5,"%d",score2);
fprintf(fic6,"%d",score3);
fprintf(fic7,"%d",score4);
fprintf(fic8,"%d",score5);
fprintf(fic4,"%d",essai);
fprintf(fic9,"%d",lvl);
for(i=0;i<10;i++)
{
for(j=0;j<15;j++)
{
fputc(matrice[i][j], fic3);
}
}
fclose(fic1);
fclose(fic2);
fclose(fic3);}
else {printf("\nErreur sauvegarde impossible !" );}
system ("cls" );
printf("Progression sauvegardee ! \n\n" );
menu();
break;
//Passage du caractère sélectionné de Majuscule à minuscule
case ' ' :
n=n+1;
if (((n%2) == 0)&&(matrice[a][b]<132)&&(matrice[a][b]>96))
{
matrice[a][b]=matrice[a][b]-32;
if (lvl==1){actu1();}
else if(lvl==2){actu2();}
else {actu3();}
}
if (((n%2) != 0)&&(matrice[a][b]<91)&&(matrice[a][b]>64))
{
matrice[a][b]= matrice[a][b]+32;
if (lvl==1){actu1();}
else if(lvl==2){actu2();}
else {actu3();}
}
break;
case 27 :
z=0;
system("cls" );
system("Color F0" );
printf("ETES VOUS SUR DE VOULOIR QUITTER SANS SAUVEGARDER ?" );
printf("\n\nTapez 1 pour oui Tapez 2 pour non\n\n" );
fflush(stdin);
scanf("%c",&z);
switch (z)
{
case '1':
system("cls" );
printf("Merci d'avoir joue a Plantamiz 2014\n\n\n" );
system("PAUSE" );
exit(0);
break;
default:
system("cls" );
system("Color F0" );
printf("Reprise du jeu\n\n" );
system("PAUSE" );
if (lvl==1){actu1();}
else if(lvl==2){actu2();}
else {actu3();}
souris();
break;
}
break;
}
gotoligcol(lig,col);
}
}
}
void actu1()
{
int i,j;
if ((score1<15)&&(score2<25)&&(score3<30))
{
if (essai<50)
{
system("cls" );
for(i=0; i<10; i++)
{
for(j=0; j<15; j++)
{
switch(matrice[i][j])
{
case 'S' : Color(9,16); break;
case 's' : Color(9,16); break;
case 'F' : Color(12,16); break;
case 'f' : Color(12,16); break;
case 'P' : Color(10,16); break;
case 'p' : Color(10,16); break;
case 'O' : Color(8,16); break;
case 'o' : Color(8,16); break;
case 'M' : Color(14,16); break;
case 'm' : Color(14,16); break;
case ' ' : matrice[i][j]=' '; break;
}
printf("%c ", matrice[i][j]);
}
printf("\n\n" );
}
printf("\nPlayer : %s \nScore1 : %d /15 Score2 : %d /25 Score3 : %d /30 essais : %d /50 ",nom,score1,score2,score3,essai);
printf("\n\nP pour quitter en sauvegardant et revenir au menu" );
printf("\n\n2 pour aller vers le bas 8 pour aller vers le haut\n4 pour aller a gauche 6 pour aller a droite" );
gotoligcol(lig,col);}
else
{
//Echec contrat
system("cls" );
printf("\n\nDommage vous n'avez pas réussi... Allez ressayez !" );
system("PAUSE" );
grille1();
}}
else
//Level up !
{lvl=lvl+1;grille2();}
}
void gravite(char matrice[10][15] , int x, int y)
{
if (x==9)
gravite(matrice,8,y);
if ((matrice[x][y]==' ')||(matrice[x+1][y]!=' '))
{
if (x!=0)
{gravite(matrice,x-1,y);
Sleep(0.01);}
else
{
if(y!=14)
gravite(matrice,8,y+1);
Sleep(0.01);
return;
}
}
else
{
matrice[x+1][y]=matrice[x][y];
Sleep(0.01);
matrice[x][y]=' ';Sleep(0.01);
gravite(matrice,x+1,y);Sleep(0.01);
}
}
//Sous-programme générant de nouveaux caractères losque le haut de la matrice est vide
// sous programme test
void test()
{
int i,j;
q=0;
i=0;
for (j=0;j<15;j++)
{
if (matrice[i][j] != ' ')
{
q=q+1;
}
}
}
//Le main...
int main()
{
menu();
return 0;
}
svp.... merci de votre aide !