Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include"graphdsu.h"
- #include<math.h>
- #include <time.h>
- #define NBCOL 10 //Nombre de colonnes de la grille
- #define NBLIG 8 //Nom de lignes de la grille
- #define LARG 60 //Taille des cases en pixel
- #define NBCOUL 6 //Nombre de couleurs possibles par me
- //Formes
- #define RECTANGLE 0
- #define CERCLE 1
- #define TRIANGLE 2
- typedef struct Case Case;
- struct Case
- {
- int m_forme; /*valeur prise dans {0,1,2} */
- int m_couleur; /*valeur comprise entre 1 et NBCOUL*/
- int m_ligne; /*valeur comprise entre 1 et NBLIG */
- int m_colonne; /*valeur comprise entre 1 et NBCOL */
- };
- typedef Case Grille[NBLIG][NBCOL];
- void init_case(Case *Pcase); //Initialise la case
- void dessin_case(Case *Pcase,int Pcoul_fond); //Dessine la case
- void init_grille(Grille Pgrille); //Initialise la grille
- void copie_case(Case *Pcase_1, Case *Pcase_2); //Copie une case dans une autre
- void faire_tomber(Grille Pgrille, Case *Pcase_bas, int Phauteur); //Fait tomber les case
- int eliminer_sequence(Grille Pgrille); //Elimine la séquence de cases
- void jouer(Grille);
- int recherche_seq_hori_forme(Grille Pgrille, Case *Pcase, Case** Pcase_gauche);
- int recherche_seq_hori_couleur(Grille Pgrille, Case *Pcase, Case** Pcase_gauche);
- int recherche_seq_verti_forme(Grille Pgrille, Case *Pcase, Case** Pcase_bas);
- int recherche_seq_verti_couleur(Grille Pgrille, Case *Pcase, Case** Pcase_bas);
- int main()
- {
- srand(time(NULL));
- Grille grille_jeu;
- int points;
- Initialiser(NBCOL * (LARG) + 100, NBLIG * (LARG));
- init_grille(grille_jeu);
- points = eliminer_sequence(grille_jeu);
- printf("*");
- AttendreClic();
- return 0;
- }
- void init_case(Case *Pcase)
- {
- Pcase->m_forme = rand() % 3;
- int couleur;
- do {couleur = (rand() % 6);}while (couleur == 1);
- Pcase->m_couleur = couleur;
- }
- void dessin_case(Case *Pcase, int Pcoul_fond)
- {
- int x0,y0,x1,y1;
- int x_centre,y_centre,r;
- int x2,y2,x3,y3;
- ChangeCouleur(Pcoul_fond);
- y0 = Pcase->m_ligne * LARG;
- x0 = Pcase->m_colonne * LARG;
- y1 = Pcase->m_ligne * LARG + LARG;
- x1 = Pcase->m_colonne * LARG + LARG;
- RectanglePlein(x0,y0,x1,y1);
- ChangeCouleur(Pcase->m_couleur);
- switch (Pcase->m_forme)
- {
- case 0:
- x0 = x0 + 5;
- y0 = y0 + 5;
- x1 = x1 - 5;
- y1 = y1 - 5;
- RectanglePlein(x0,y0,x1,y1);
- break;
- case 1:
- x_centre = x1 - (LARG / 2);
- y_centre = y1 - (LARG / 2);
- r = (LARG / 2) - 5;
- CerclePlein(x_centre, y_centre, r);
- break;
- case 2:
- x3 = x0 + 5;
- y3 = y0 + LARG - 5;
- x2 = x1 - 5;
- y2 = y1 - 5;
- y1 = y0 + 5;
- x1 = (x1 + x0) / 2;
- TrianglePlein(x3, y3, x1, y1, x2, y2);
- break;
- }
- }
- void init_grille(Grille Pgrille)
- {
- int i,j;
- for(i = 0; i < NBLIG; i++)
- {
- for(j = 0; j < NBCOL; j++)
- {
- init_case(&Pgrille[i][j]);
- Pgrille[i][j].m_ligne = i;
- Pgrille[i][j].m_colonne = j;
- dessin_case(&Pgrille[i][j],1);
- }
- }
- }
- int recherche_seq_hori_forme(Grille Pgrille, Case* Pcase, Case** Pcase_gauche)
- {
- int i;
- int longueur = 0;
- int longueur_droite = 0;
- int longueur_gauche = 0;
- for (i = Pcase->m_colonne; i < NBCOL; i++)
- {
- if (Pgrille[Pcase->m_ligne][i].m_forme == Pgrille[Pcase->m_ligne][i+1].m_forme && (i+1 < NBCOL) && Pgrille[Pcase->m_ligne][i].m_forme == Pcase->m_forme)
- {
- longueur_droite++;
- }
- else
- {
- break;
- }
- }
- for (i = Pcase->m_colonne; i >= 0; i--)
- {
- if (Pgrille[Pcase->m_ligne][i].m_forme == Pgrille[Pcase->m_ligne][i-1].m_forme && (i-1 >= 0) && Pgrille[Pcase->m_ligne][i].m_forme == Pcase->m_forme)
- {
- longueur_gauche++;
- }
- else
- {
- break;
- }
- }
- longueur = longueur_droite + longueur_gauche + 1;
- if (longueur < 5)
- {
- *Pcase_gauche = NULL;
- return 0;
- }
- else
- {
- *Pcase_gauche = &Pgrille[Pcase->m_ligne][i];
- return longueur;
- }
- }
- int recherche_seq_hori_couleur(Grille Pgrille, Case* Pcase, Case** Pcase_gauche)
- {
- int i;
- int longueur = 0;
- int longueur_droite = 0;
- int longueur_gauche = 0;
- for (i = Pcase->m_colonne; i < NBCOL; i++)
- {
- if (Pgrille[Pcase->m_ligne][i].m_couleur == Pgrille[Pcase->m_ligne][i+1].m_couleur && (i+1 < NBCOL) && Pgrille[Pcase->m_ligne][i].m_couleur == Pcase->m_couleur)
- {
- longueur_droite++;
- }
- else
- {
- break;
- }
- }
- for (i = Pcase->m_colonne; i >= 0; i--)
- {
- if (Pgrille[Pcase->m_ligne][i].m_couleur == Pgrille[Pcase->m_ligne][i-1].m_couleur && (i-1 >= 0) && Pgrille[Pcase->m_ligne][i].m_couleur == Pcase->m_couleur)
- {
- longueur_gauche++;
- }
- else
- {
- break;
- }
- }
- longueur = longueur_droite + longueur_gauche + 1;
- if (longueur < 3)
- {
- *Pcase_gauche = NULL;
- return 0;
- }
- else
- {
- *Pcase_gauche = &Pgrille[Pcase->m_ligne][i];
- return longueur;
- }
- }
- int recherche_seq_verti_forme(Grille Pgrille, Case* Pcase, Case** Pcase_bas)
- {
- int i;
- int longueur = 0;
- int longueur_haut = 0;
- int longueur_bas = 0;
- for (i = Pcase->m_ligne; i >= 0; i--)
- {
- if (Pgrille[i][Pcase->m_colonne].m_forme == Pgrille[i-1][Pcase->m_colonne].m_forme && (i-1 >= 0) && Pgrille[i][Pcase->m_colonne].m_forme == Pcase->m_forme)
- {
- longueur_haut++;
- }
- else
- {
- break;
- }
- }
- for (i = Pcase->m_ligne; i < NBLIG; i++)
- {
- if (Pgrille[i][Pcase->m_colonne].m_forme == Pgrille[i+1][Pcase->m_colonne].m_forme && (i+1 < NBLIG) && Pgrille[i][Pcase->m_colonne].m_forme == Pcase->m_forme)
- {
- longueur_bas++;
- }
- else
- {
- break;
- }
- }
- longueur = longueur_bas + longueur_haut + 1;
- if (longueur < 3)
- {
- *Pcase_bas = NULL;
- return 0;
- }
- else
- {
- *Pcase_bas = &Pgrille[i][Pcase->m_colonne];
- return longueur;
- }
- }
- int recherche_seq_verti_couleur(Grille Pgrille, Case* Pcase, Case** Pcase_bas)
- {
- int i;
- int longueur = 0;
- int longueur_haut = 0;
- int longueur_bas = 0;
- for (i = Pcase->m_ligne; i >= 0; i--)
- {
- if (Pgrille[i][Pcase->m_colonne].m_couleur == Pgrille[i-1][Pcase->m_colonne].m_couleur && (i-1 >= 0) && Pgrille[i][Pcase->m_colonne].m_couleur == Pcase->m_couleur)
- {
- longueur_haut++;
- }
- else
- {
- break;
- }
- }
- for (i = Pcase->m_ligne; i < NBLIG; i++)
- {
- if (Pgrille[i][Pcase->m_colonne].m_couleur == Pgrille[i+1][Pcase->m_colonne].m_couleur && (i+1 < NBLIG) && Pgrille[i][Pcase->m_colonne].m_couleur == Pcase->m_couleur)
- {
- longueur_bas++;
- }
- else
- {
- break;
- }
- }
- longueur = longueur_bas + longueur_haut + 1;
- if (longueur < 3)
- {
- *Pcase_bas = NULL;
- return 0;
- }
- else
- {
- *Pcase_bas = &Pgrille[i][Pcase->m_colonne];
- return longueur;
- }
- }
- void copie_case(Case *Pcase_1, Case *Pcase_2)
- {
- /*
- int tmp1,tmp2;
- tmp1 = Pcase_1->m_forme;
- tmp2 = Pcase_1->m_couleur;
- Pcase_1->m_forme = Pcase_2->m_forme;
- Pcase_1->m_couleur = Pcase_2->m_couleur;
- Pcase_2->m_forme = tmp1;
- Pcase_2->m_couleur = tmp2;
- */
- *Pcase_1 = *Pcase_2;
- }
- void faire_tomber(Grille Pgrille, Case *Pcase_bas, int Phauteur)
- {
- int i;
- for(i = Pcase_bas->m_ligne ; i > -1; i--)
- {
- if(i - Phauteur >= 0)
- {
- copie_case(&Pgrille[i][Pcase_bas->m_colonne],&Pgrille[i - Phauteur][Pcase_bas->m_colonne]);
- }
- else
- {
- init_case(&Pgrille[i][Pcase_bas->m_colonne]);
- }
- }
- }
- int eliminer_sequence(Grille Pgrille)
- {
- int i = 0;
- int j = 0;
- int hauteur = 0;
- int chaine = 0;
- int sequences = 0;
- Case *case_base = NULL;
- for(i = 0; i < NBLIG; i++)
- {
- for(j = 0; j < NBCOL; j++)
- {
- hauteur = recherche_seq_verti_forme(Pgrille,&Pgrille[i][j],&case_base);
- printf("%d\n",hauteur);
- if(hauteur > 0)
- {
- faire_tomber(Pgrille,case_base,hauteur);
- i = 0;
- j = 0;
- sequences++;
- }
- /*else
- {
- hauteur = recherche_seq_verti_couleur(Pgrille,&Pgrille[i][j],&case_base);
- if(hauteur > 0)
- {
- faire_tomber(Pgrille,case_base,hauteur);
- i = 0;
- j = 0;
- sequences++;
- }
- else
- {
- hauteur = recherche_seq_hori_forme(Pgrille,&Pgrille[i][j],&case_base);
- if(hauteur > 0)
- {
- for(chaine = 0; chaine < hauteur; chaine++)
- {
- faire_tomber(Pgrille,case_base,1);
- case_base->m_colonne++;
- }
- i = 0;
- j = 0;
- sequences++;
- }
- else
- {
- hauteur = recherche_seq_hori_couleur(Pgrille,&Pgrille[i][j],&case_base);
- if(hauteur > 0)
- {
- for(chaine = 0; chaine < hauteur; chaine++)
- {
- faire_tomber(Pgrille,case_base,1);
- case_base->m_colonne++;
- }
- i = 0;
- j = 0;
- sequences++;
- }
- }
- }
- }*/
- }
- }
- return sequences;
- }
Add Comment
Please, Sign In to add comment