#include <stdio.h>
#include <stdlib.h>
//#include<windows.h>
#include<string.h>
void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs
{
//HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
//SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte);
}
int main(int argc, char *argv[])
{
int x;
Color(9,0);
printf(" *****************************************\n");
printf(" *****************************************\n");
printf(" ****** ******\n");
printf(" *******");
Color(3,0);
printf (" BIENVENUE AU JEU SUDOKU ");
Color(9,0);
printf (" *******\n");
printf(" ******** ********\n");
printf(" ********* ");
Color(3,0);
printf(" REALISER PAR : ");
Color(9,0);
printf(" *********\n");
printf(" ********** ");
Color(3,0);
printf(" mejri rihem ");
Color(9,0);
printf ( "**********\n");
printf(" *********** & ***********\n");
printf(" ************");
Color(3,0);
printf (" hana allagui ");
Color(9,0);
printf("************\n");
printf(" ************* *************\n");
printf(" *****************************************\n");
printf(" *****************************************\n");
printf("\n\n");
printf ("\n\n\t\t**menuGeneral**\n");
printf ("1- Nouveau jeu \n");
printf ("2- Charger jeu \n");
printf ("3- Aide \n");
printf ("4- Meilleurs scores \n");
printf ("5- Quitter \n\n\n");
do
{printf("veillez saisir votre choix:\n");
scanf("%d",&x);
}while(x<1||x>5);
//char nomF[50]="grille_facile.txt";
charger_partie();
difficulte();
principe_du_jeu();
affichemat_expert();
expert();
return (0);
}
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////
void affichemat_expert(char matriceInitiale[10][9])
{
int i,j;
for (j=0;j<10;j++)
{
for (i=0;i<9;i++)
{
printf(" %d ",matriceInitiale[i][j]);
}
printf("\n\n");
}
}
void difficulte(char matriceInitiale[10][9])
{ int i,j,x; //préci suivant le niveau de difficulté
printf("\t\tTaper le chiffre correpondant au niveau de difficult\x82\n\n");
printf("\t\t (1) Facile \n");
printf("\t\t (2) Moyen \n");
printf("\t\t (3) Difficile \n");
printf("\t\t (4) Expert \n");
printf("\t\t (5) Grille vide \n");
printf("\t\t (6) Retour au menu \n");
do
{printf("veillez saisir votre choix:\n");
scanf("%d",&x);
}while(x<1||x>6);
}
void charger_partie()
{
int i=0,j=0 ;
char matriceInitiale [10][9];
FILE *f;
char c;
f=fopen("grille_facile.txt","r");
if(f==NULL)
printf("impossible d'ouvrir le fichier !! ");
else
{
c=fgetc(f) ; //lecture de premier caractère
for (i=0;i<10;i++)
for (j=0;j<9;j++)
{
while (c==' ')
{
c =fgetc(f);
}
matriceInitiale [i][j]= c ;
c =fgetc(f);
}
}
j=0;
for (i=0 ; i<10 ;i++ )
{
if (j==0)
printf ("\n");
for (j=0 ; j<9 ;j++ )
{
Color(12,0) ;
printf("\t%c ",matriceInitiale [i][j]);
Color(10,0) ;
}
}
}
void test(char matriceInitiale) //test de la grille finale apres avoir joué
{
int test,s1,s2,s3,s4,s5,s6,s7,s8,s9,tes,i,j,k,score;
test=0;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
for(k=0;k<9;k++)
{
if((matriceInitiale[i][k]==matriceInitiale[i][j])&&(k!=j)) //tester sur toutes les lignes une par une
test=1;
if((matriceInitiale[k][j]==matriceInitiale[i][j])&&(k!=i)) //tester sur toutes les colonnes une par une
test=1;
}
}
}
s1=0;
s2=0;
s3=0;
s4=0;
s5=0;
s6=0;
s7=0;
s8=0;
s9=0;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if((i<3) && (j<3))
s1=s1+matriceInitiale[i][j];
if((i<3) && (j>3) && (j<6))
s2=s2+matriceInitiale[i][j];
if((i<3) && (j>6) && (j<9))
s3=s3+matriceInitiale[i][j];
if((i>3) && (i<6) && (j>3) && (j<6))
s5=s5+matriceInitiale[i][j];
if((j<3) && (i>3) && (i<6))
s4=s4+matriceInitiale[i][j];
if((i>3) && (i<6) && (j>6) && (j<9))
s6=s6+matriceInitiale[i][j];
if((i>6) && (i<9) && (j<3))
s7=s7+matriceInitiale[i][j];
if((j>3) && (j<6) && (i>6) && (i<9))
s8=s8+matriceInitiale[i][j];
if((i>6) && (i<9) && (j>6) && (j<9))
s9=s9+matriceInitiale[i][j];
}
}
if((s1==45)&&(s2==45)&&(s3==45)&&(s4==45)&&(s5==45)&&(s6==45)&&(s7==45)&&(s8==45)&&(s9==45)) //tester la somme des régions
tes=0;
else
tes=1;
if((test==1)||(tes==1))
printf("Dommage ! \nVous avez perdu\n");
else
printf("Felicitation ! \n\nVous avez GAGNE\n\n\n");
printf("votre score est %.0f",score);
}
void jouer( int charge) //fonction permettant au joueur de manipuler une grille de sudoku
{
int i,j,k,nbr=0,li,li2,co2,co,val,s=0,li3,co3;
char nom[30],value[2];
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if([i][j]==0) //compter le nombre de valeurs masquées
s=s+1;
}
}
do //boucler suivant le nombre de valeurs masquées
{ //c'est a dire arreter la boucle
if(charge == 1) //tant qu'il n'y a plus de cases vides
afficher_grille_chargee();
else
afficher_grille();
printf("Taper la valeur de la ligne de la case : "); //taper les coordonnées et tester les valeurs entrées
scanf("%d",&li);
switch(li)
{
case 0:break;
case 1:break;
case 2:break;
case 3:break;
case 4:break;
case 5:break;
case 6:break;
case 7:break;
case 8:break;
case 10:{
printf("Taper le nom du fichier a sauvegarder\n");
scanf("%s",nom);
sauvegarde(nom);
}break;
case 11:if(charge==1)
{
printf("taper la valeur de la ligne de la case a demasquer : ");
scanf("%d",&li2);
printf("taper la valeur de la colonne de la case a demasquer :" );
scanf("%d",&co2);
matriceInitiale[li2][co2]=m9x9[li2][co2];
system("CLS");
afficher_grille_chargee();
}
else
{
printf("taper la valeur de la ligne de la case a demasquer : ");
scanf("%d",&li2);
printf("taper la valeur de la colonne de la case a demasquer :" );
scanf("%d",&co2);
matriceInitiale[li2][co2]=m9x9[li2][co2];
system("CLS");
afficher_grille();
}
break;
case 12:if(charge!=1)
{
printf("taper la valeur de la ligne de la case a supprimer : ");
scanf("%d",&li3);
printf("taper la valeur de la colonne de la case a supprimer :" );
scanf("%d",&co3);
g.grille[li3][co3]=0;
system("CLS");
afficher_grille(g);
}
else
{
printf("taper la valeur de la ligne de la case a supprimer : ");
scanf("%d",&li3);
printf("taper la valeur de la colonne de la case a supprimer :" );
scanf("%d",&co3);
g.grille[li3][co3]=48;
system("CLS");
afficher_grille_chargee();
}
break;
case 13: if(charge==1)
{
for(i=0;i<9;i++)
for(j=0;j<9;j++)
g.grille[i][j]=g.m9x9[i][j];
afficher_grille_chargee();
}
else
{
for(i=0;i<9;i++)
for(j=0;j<9;j++)
g.grille[i][j]=g.m9x9[i][j];
afficher_grille_chargee();
}
break;
case 14:nbr=s;break;
default:printf("Vous faites une erreur de saisie\n\n");
}
printf("Taper la valeur de la colonne de la case : ");
scanf("%d",&co);
switch(co)
{
case 0:break;
case 1:break;
case 2:break;
case 3:break;
case 4:break;
case 5:break;
case 6:break;
case 7:break;
case 8:break;
case 10:{
printf("Taper le nom du fichier a sauvegarder\n");
scanf("%s",nom);
sauvegarde(g,nom);
}break;
case 11:if(charge==1)
{
printf("taper la valeur de la ligne de la case a demasquer : ");
scanf("%d",&li2);
printf("taper la valeur de la colonne de la case a demasquer :" );
scanf("%d",&co2);
g.grille[li2][co2]=g.m9x9[li2][co2];
system("CLS");
afficher_grille_chargee(g);
}
else
{
printf("taper la valeur de la ligne de la case a demasquer : ");
scanf("%d",&li2);
printf("taper la valeur de la colonne de la case a demasquer :" );
scanf("%d",&co2);
g.grille[li2][co2]=g.m9x9[li2][co2];
system("CLS");
afficher_grille(g);
}break;
case 12:if(charge!=1)
{
printf("taper la valeur de la ligne de la case a supprimer : ");
scanf("%d",&li3);
printf("taper la valeur de la colonne de la case a supprimer :" );
scanf("%d",&co3);
g.grille[li3][co3]=0;
system("CLS");
afficher_grille(g);
}
else
{
printf("taper la valeur de la ligne de la case a supprimer : ");
scanf("%d",&li3);
printf("taper la valeur de la colonne de la case a supprimer :" );
scanf("%d",&co3);
g.grille[li3][co3]=48;
system("CLS");
afficher_grille_chargee();
}
break;
case 13: if(charge==1)
{
for(i=0;i<9;i++)
for(j=0;j<9;j++)
g.grille[i][j]=g.m9x9[i][j];
afficher_grille_chargee(g);
}
else
{
for(i=0;i<9;i++)
for(j=0;j<9;j++)
matriceInitiale[i][j]=g.m9x9[i][j];
afficher_grille_chargee();
}
break;
case 14:nbr=s;break;
default:printf("Vous faites une erreur de saisie\n\n");
}
if(charge==1)
{
if(matriceInitiale[li][co]==48)
{
printf("taper la valeur :"); // taper la valeur à entrer dans la grille
scanf("%d",&val);
switch(val)
{
case 1:matriceInitiale[li][co]=val+48;
nbr++;
score=score+10;
break;
case 2:matriceInitiale[li][co]=val+48;
nbr++;
matriceInitialescore=score+10;
break;
case 3:matriceInitiale[li][co]=val+48;
nbr++;
score=gscore+10;
break;
case 4:matriceInitiale[li][co]=val+48;
nbr++;
score=score+10;
break;
case 5:matriceInitiale[li][co]=val+48;
nbr++;
score=score+10;
break;
case 6:matriceInitiale[li][co]=val+48;
nbr++;
score=score+10;
break;
case 7:matriceInitiale[li][co]=val+48;
nbr++;
score=score+10;
break;
case 8:matriceInitiale[li][co]=val+48;
nbr++;
score=score+10;
break;
case 9:matriceInitiale[li][co]=val+48;
nbr++;
score=score+10;
break;
case 10:printf("Taper le nom du fichier a sauvegarder\n");
scanf("%s",nom);
sauvegarde(nom);
break;
case 11:if(charge==1)
{
printf("taper la valeur de la ligne de la case a demasquer : ");
scanf("%d",&li2);
printf("taper la valeur de la colonne de la case a demasquer :" );
scanf("%d",&co2);
matriceInitiale[li2][co2]=m9x9[li2][co2];
afficher_grille_chargee(g);
}
else
{
printf("taper la valeur de la ligne de la case a demasquer : ");
scanf("%d",&li2);
printf("taper la valeur de la colonne de la case a demasquer :" );
scanf("%d",&co2);
matriceInitiale[li2][co2]=m9x9[li2][co2];
afficher_grille();
}break;
case 12:if(charge!=1)
{
printf("taper la valeur de la ligne de la case a supprimer : ");
scanf("%d",&li3);
printf("taper la valeur de la colonne de la case a supprimer :" );
scanf("%d",&co3);
matriceInitiale[li3][co3]=0;
afficher_grille();
}
else
{
printf("taper la valeur de la ligne de la case a supprimer : ");
scanf("%d",&li3);
printf("taper la valeur de la colonne de la case a supprimer :" );
scanf("%d",&co3);
matriceInitiale[li3][co3]=48;
afficher_grille_chargee();
}
break;
case 13: if(charge==1)
{
for(i=0;i<9;i++)
for(j=0;j<9;j++)
matriceInitiale[i][j]=m9x9[i][j];
afficher_grille_chargee();
}
else
{
for(i=0;i<9;i++)
for(j=0;j<9;j++)
matriceInitiale[i][j]=m9x9[i][j];
afficher_grille_chargee();
}
break;
case 14:nbr=s;break;
default:printf("Vous faites une erreur de saisie\n\n");
system("CLS");
}
system("CLS");
}
else
{
printf("Erreur : cette case est deja occupee.\n");
}
}
else
{
if(matriceInitiale[li][co]==0)
{
printf("taper la valeur :");
scanf("%d",&val);
switch(val)
{
case 1:matriceInitiale[li][co]=val;
nbr++;
score=score+10;
system("CLS");
break;
case 2:matriceInitiale[li][co]=val;
nbr++;
score=score+10;
system("CLS");
break;
case 3:matriceInitiale[li][co]=val;
nbr++;
score=score+10;
system("CLS");
break;
case 4:matriceInitiale[li][co]=val;
nbr++;
score=score+10;
system("CLS");
break;
case 5:matriceInitiale[li][co]=val;
nbr++;
score=score+10;
system("CLS");
break;
case 6:matriceInitiale[li][co]=val;
nbr++;
score=score+10;
system("CLS");
break;
case 7:matriceInitiale[li][co]=val;
nbr++;
score=score+10;
system("CLS");
break;
case 8:matriceInitiale[li][co]=val;
nbr++;
score=score+10;
system("CLS");
break;
case 9 matriceInitiale[li][co]=val;
nbr++;
score=score+10;
system("CLS");
break;
case 10:printf("Taper le nom du fichier a sauvegarder\n");
scanf("%s",nom);
sauvegarde(nom);
break;
case 11:if(charge==1)
{
printf("taper la valeur de la ligne de la case a demasquer : ");
scanf("%d",&li2);
printf("taper la valeur de la colonne de la case a demasquer :" );
scanf("%d",&co2);
matriceInitiale[li2][co2]=g.m9x9[li2][co2];
afficher_grille_chargee();
}
else
{
printf("taper la valeur de la ligne de la case a demasquer : ");
scanf("%d",&li2);
printf("taper la valeur de la colonne de la case a demasquer :" );
scanf("%d",&co2);
matriceInitiale[li2][co2]=m9x9[li2][co2];
afficher_grille();
}break;
case 12:if(charge!=1)
{
printf("taper la valeur de la ligne de la case a supprimer : ");
scanf("%d",&li3);
printf("taper la valeur de la colonne de la case a supprimer :" );
scanf("%d",&co3);
matriceInitiale[li3][co3]=0;
system("CLS");
afficher_grille();
}
else
{
printf("taper la valeur de la ligne de la case a supprimer : ");
scanf("%d",&li3);
printf("taper la valeur de la colonne de la case a supprimer :" );
scanf("%d",&co3);
matriceInitiale[li3][co3]=48;
system("CLS");
afficher_grille_chargee();
}
break;
case 13:if(charge==1)
{
for(i=0;i<9;i++)
for(j=0;j<9;j++)
matriceInitiale[i][j]=m9x9[i][j];
afficher_grille_chargee();
}
else
{
for(i=0;i<9;i++)
for(j=0;j<9;j++)
matriceInitiale[i][j]=m9x9[i][j];
afficher_grille_chargee();
}
break;
case 14:nbr=s;break;
default:printf("Vous faites une erreur de saisie\n\n");
system("CLS");
}
}
else
{
printf("Erreur : cette case est deja occupee.\n");
}
system("CLS");
}
}
while(nbr!=s);
test(); //tester une fois la grille est complétée
getch();
printf("appuyez sur une touche pour quitter et revenir au menu");
}