#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define MAXFIL 9
#define MAXCOL 9
void tablero (int matriz[MAXFIL][MAXCOL]);
int mensajes();
int validarCasilla(int f1,int c1,int f2, int c2);
void cambiarCasilla (int matriz[MAXFIL][MAXCOL],int f1,int c1,int f2,int c2);
int buscarCaramelosVertical (int matriz[MAXFIL][MAXCOL],int puntos);
int buscarCaramelosHorizontal (int matriz[MAXFIL][MAXCOL],int puntos);
int bajarCaramelosHori(int matriz[MAXFIL][MAXCOL],int f, int c);
int bajar4CaramelosVerti(int matriz[MAXFIL][MAXCOL],int f, int c);
int bajar3CaramelosVerti(int matriz[MAXFIL][MAXCOL],int f, int c);
void tablero (int matriz[MAXFIL][MAXCOL]){ // cambai numeros por simbolos
int i,j,e;
printf(" 1 2 3 4 5 6 7 8 9 \n");
printf("-----------------------------------------------------------------------------");
for (i=0;i<MAXFIL;i++){
printf("\n");
printf("%i -- ", i+1);
for (j=0;j<MAXCOL;j++){
if (matriz[j]==1)
{
e=1;
printf("\t%c",e);
}
if (matriz[j]==2)
{
e=2;
printf("\t%c",e);
}
if (matriz[j]==3)
{
e=4;
printf("\t%c",e);
}
if (matriz[j]==4)
{
e=5;
printf("\t%c",e);
}
if (matriz[j]==5)
{
e=15;
printf("\t%c",e);
}
}
printf("\n");
}
getch();
}
int mensajes(){
printf("\n\n................|| Bienvenido al Primer Nivel ||................\n\n");
printf("----->>Recuerde: \n\n");
printf(">>Tiene 40 movimientos\n\n");
printf(">>Las Filas son Horizontales\n\n");
printf(">>Las Columnas son Verticales\n\n");
printf("------------------------------------------------------------------------------\n\n\n");
system("pause");
return 0;
}
int validarCasilla(int f1,int c1,int f2, int c2){ // valida fila y columna que ingresa el ususario f1 y c1 son las filas y las clomunas donde se encuentra el numero y f2 y c2 son las casillas a donde quiere mover el usuario
if((f1<1||f2<1)||(f1>9||f2>9)||(c1<1||c2<1)||(c1>9||c2>9)){
printf("\n\n >>Ingrese numeros del 1 al 9\n\n");
return 1;
}
if ((f1<=9 && f2<=9) && (f1>=1 && f2>=1) && (c1<=9 && c2<=9) && (c1>=1 && c2>=1)){
if ((f1==f2)&&(c1==c2)){
printf("\n\n >>Ingrese Coordenadas DIFERENTES\n\n");
return 1;
}
return 0;
}
}
void cambiarCasilla (int matriz[MAXFIL][MAXCOL],int f1,int c1,int f2,int c2){
int i,j,aux; // aux es un valor temporal para guardar la casilla
for (i=0;i<MAXFIL;i++){
for (j=0;j<MAXCOL;j++){
aux=matriz[f2-1][c2-1];
matriz[f2-1][c2-1]=matriz[f1-1][c1-1]; //le resto 1 xk los numero que ingresa el usuario son del 1 al 9 y la matriz toma en cuenta el cero
matriz[f1-1][c1-1]=aux;
}
}
printf("\n");
getch();
}
int buscarCaramelosVertical (int matriz[MAXFIL][MAXCOL],int puntos){
printf("\n\n------------------>> BUSQUEDA VERTICAL:\n\n");
int contador=1;
int f=0; // es la fila en donde se encuentra el ultimo caramelo repetido
int c=0; // es la columna en donde se encuentra el ultimo caramelo repetido
int i,j;
for (j=0;j<MAXCOL;j++){
for (i=0;i<7;i++){
if (matriz[j]==matriz[i+1][j]){
contador++;
f=i+1;// la fila de referencia en donde se encuentra el ult caramelo repetido aumenta en uno
c=j+1;// la columna de referencia en donde se encuentra el ult caramelo repetido aumenta en uno
}
else if (matriz[j]!=matriz[i+1][j]){
contador=1;
}
if (contador==3 && i<=6 && (matriz[i+1][j]==matriz[i+2][j])){ // esta linea no se si este bien .-.
f=i+3; // se queda en la utlima posicion donde encontro el caramelo
printf("\n\n ENCONTRO 4 CARAMELOS EN LA COLUMNA: %d DESDE LA FILA %d A LA FILA %d \n",c,f-3,f);
puntos=puntos+7;
bajar4CaramelosVerti(matriz,f,c);
break;
}
else if (contador==3 && i<=7){
f=i+2;
printf("\n\n ENCONTRO 3 CARAMELOS EN LA COLUMNA: %d DESDE LA FILA %d A LA FILA %d \n",c,f-2,f);
puntos=puntos+5;
bajar3CaramelosVerti(matriz,f,c);
break;
}
}
}
return puntos;
}
int buscarCaramelosHorizontal (int matriz[MAXFIL][MAXCOL],int puntos){ //
printf("\n\n------------------>> BUSQUEDA HORIZONTAL:\n\n");
int contador=1;
int f=0; //fila de refecrencia
int c=0; //columna de referencia
int i,j;
for(i=0;i<MAXFIL;i++){
for(j=0;j<7;j++){
if (matriz[j]== matriz[j+1])
contador=contador+1;
f=i+1;
c=j+1;
puntos=puntos;
if (matriz[j]!=matriz[j+1])
contador=1;
puntos=puntos;
if (contador==3 && j<=6 && (matriz[j+1]==matriz[j+2])){
c=j+3;
printf("\n\n ENCONTRO 4 CARAMELOS DESDE LA COLUMNA: %d HASTA LA COLUMNA %d EN LA FILA %d \n",c-3,c,f); //muestra la columan y la fila donde se encuentra
puntos=puntos+7;
matriz[j]=bajarCaramelosHori(matriz,f,c); //llama funcion para cambiar caramelos
matriz[j]=bajarCaramelosHori(matriz,f,c-1);
matriz[j]=bajarCaramelosHori(matriz,f,c-2);
matriz[j]=bajarCaramelosHori(matriz,f,c-3);
break;
}
if (contador==3 && j<=7){
c=j+2;
printf("\n\n ENCONTRO 3 CARAMELOS DESDE LA COLUMNA: %d HASTA LA COLUMNA %d EN LA FILA %d \n",c-2,c,f);
puntos=puntos+5;
matriz[j]=bajarCaramelosHori(matriz,f,c);
matriz[j]=bajarCaramelosHori(matriz,f,c-1);
matriz[j]=bajarCaramelosHori(matriz,f,c-2);
break;
}
}
}
return puntos;
}
int bajarCaramelosHori(int matriz[MAXFIL][MAXCOL],int f, int c){
int i;
if(f==1&&c<=9){
matriz[0][c-1]=1+(rand()%5); // le resto 1 xk f y c estan con 1 aumentado para que al imprimirse se presenten desde el 1 al 9
}
else if(f==2&&c<=9){
matriz[1][c-1]=matriz[f-2][c-1];
matriz[0][c-1]=1+(rand()%5);
}
else if(f>=3&&c<=9){
for (i=f-1;i>=1;i--){
matriz[c-1]=matriz[i-1][c-1];
}
matriz[0][c-1]=1+(rand()%5);
}
}
int bajar4CaramelosVerti(int matriz[MAXFIL][MAXCOL],int f, int c){ // esta funcion si no me sale
int i,j;
if (f==4){ // revisa si f se encuentra en la fila 4
for (i=0;i<4;i++){
if (j==c){ // c no cambia xk es vertical por loq ue se manitene en la msima columna solo varia fila
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==5){
matriz[f-1][c-1]=matriz[0][c-1];
for (i=0;i<4;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==6){
matriz[f-1][c-1]=matriz[1][c-1];
matriz[f-2][c-1]=matriz[0][c-1];
for (i=0;i<4;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==7){
matriz[f-1][c-1]=matriz[2][c-1];
matriz[f-2][c-1]=matriz[1][c-1];
matriz[f-3][c-1]=matriz[0][c-1];
for (i=0;i<4;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==8){
matriz[f-1][c-1]=matriz[3][c-1];
matriz[f-2][c-1]=matriz[2][c-1];
matriz[f-3][c-1]=matriz[1][c-1];
matriz[f-4][c-1]=matriz[0][c-1];
for (i=0;i<4;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==9){
matriz[f-1][c-1]=matriz[4][c-1];
matriz[f-2][c-1]=matriz[3][c-1];
matriz[f-3][c-1]=matriz[2][c-1];
matriz[f-4][c-1]=matriz[1][c-1];
matriz[f-5][c-1]=matriz[0][c-1];
for (i=0;i<4;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
}
int bajar3CaramelosVerti(int matriz[MAXFIL][MAXCOL],int f, int c){ // esta toampoco sale .-.
int i,j;
if (f==3){
for (i=0;i<3;i++){
if(j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==4){
matriz[f-1][c-1]=matriz[0][c-1];
for (i=0;i<3;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==5){
matriz[f-1][c-1]=matriz[1][c-1];
matriz[f-2][c-1]=matriz[0][c-1];
for (i=0;i<3;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==6){
matriz[f-1][c-1]=matriz[2][c-1];
matriz[2][c-1]=1+(rand()%5);
matriz[f-2][c-1]=matriz[1][c-1];
matriz[1][c-1]=1+(rand()%5);
matriz[f-3][c-1]=matriz[0][c-1];
matriz[0][c-1]=1+(rand()%5);
}
if (f==7){
matriz[f-1][c-1]=matriz[3][c-1];
matriz[3][c-1]=matriz[0][c-1];
matriz[f-2][c-1]=matriz[2][c-1];
matriz[f-3][c-1]=matriz[1][c-1];
for (i=0;i<3;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==8){
matriz[f-1][c-1]=matriz[3][c-1];
matriz[f-2][c-1]=matriz[2][c-1];
matriz[f-3][c-1]=matriz[1][c-1];
matriz[f-4][c-1]=matriz[0][c-1];
for (i=0;i<3;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
if (f==9){
matriz[f-1][c-1]=matriz[5][c-1];
matriz[5][c-1]=matriz[2][c-1];
matriz[f-2][c-1]=matriz[4][c-1];
matriz[4][c-1]=matriz[1][c-1];
matriz[f-3][c-1]=matriz[3][c-1];
matriz[3][c-1]=matriz[0][c-1];
for (i=0;i<3;i++){
if (j==c){
matriz[c-1]=1+(rand()%5);
}
}
}
}
int main(){
mensajes();
system("cls");
srand(time(NULL));
printf("\n\n\t\t.....|| Cargando Colores ||....\n\n\n\n");
int i,j;
int matriz[MAXFIL][MAXCOL]={0}; // llena matriz de ceros
for(i=0;i<MAXFIL;i++){
for(j=0;j<MAXCOL;j++){
matriz[j]=1+(rand()%5); // genera numeros aleatorios
}
}
tablero (matriz);
int f1,f2,c1,c2;
printf("\n\n....................>> Primera Coordenada:\n\n");
printf(">>Ingrese fila:"); // donde se encuentra el caramelo
scanf("%d",&f1);
printf(">>Ingrese columna:");
scanf("%d",&c1);
printf("\n\n....................>> Segunda Coordenada:\n\n");
printf(">>Ingrese fila:"); // posicion donde desea mover el caramelo
scanf("%d",&f2);
printf(">>Ingrese columna:");
scanf("%d",&c2);
int puntos=0;
validarCasilla(f1,c1,f2,c2); // verifica si los numeros ingresados por el usuario estan correctos
if (validarCasilla(f1,c1,f2,c2)==0){ // si la funcion es verdadera
printf("\n\n\t\t.....|| MEZCLA DE COLORES ||....\n\n\n\n");
cambiarCasilla (matriz,f1,c1,f2,c2); // cambia las casillas
tablero(matriz);
printf("\n\n------------------------------------------------------------------------------\n\n\n");
printf("\n\n\t\t.....|| BUSQUEDA DE COLORES ||....\n\n\n\n");
puntos=buscarCaramelosVertical (matriz,puntos)+buscarCaramelosHorizontal (matriz,puntos); // suma los putnos
printf("\n\n------------------->>Usted posee %d puntos \n\n",puntos);
printf("\n\n------------------------------------------------------------------------------\n\n\n");
printf("\n\n\t\t.....|| BAJANDO COLORES ||....\n\n\n\n");
tablero (matriz);
}
} ;)