/* * File: main.c * Author: Eneko * * Created on 28 de noviembre de 2014, 18:22 */ #include #include /* * */ //Estas son las funciones que vamos a utilizar int **getMatrix( int filas, int columnas); int *getArray(int n); void freeMatrix(int **A, int n); void printTablero(int **matrix, int filas, int columnas); void InitializeCounter(int *array, int n, int vi); int SumaArray (int *array, int n); int CompFilas (int **A, int fila, int columnas, int turno); int CompCols (int **A, int filas, int columna, int turno); int CompDiagPrim(int **A, int filas, int columnas, int turno); int CompDiagSec(int **A, int filas, int columnas, int turno); void juego(int **A, int *contador, int filas, int columnas, int jug); int main(int argc, char** argv) { int **A; int columnas, filas, jug, i, opt; int *contador; //Presentacion modo de juego printf("Bienvenido a jugar al coloca 4 version DIY\n"); printf("Seleccione el modo de juego:\n"); printf("1. Modo clasico\n"); printf("2. Modo libre\n"); scanf("%d", &opt); //Seleccionar parametros de juego do{ switch (opt) { case 1: filas=6; columnas=7; jug=2; break; case 2: printf("Cuantas filas quieres que haya?\n"); scanf("%d", &filas); printf("Cuantas columnas quieres que haya?\n"); scanf("%d", &columnas); printf("Numero de jugadores?(2-4)\n"); scanf("%d", &jug); break; default: printf("El valor introducido no es valido\n"); scanf("%d", &opt); break; } }while (opt < 1 || opt > 2 || jug < 2 || jug > 4 ); //reservamos matriz A=getMatrix(filas, columnas); contador=getArray(columnas); //con esto llevaremos la cuenta de donde hay que ponerlo InitializeCounter(contador, columnas, filas-1); printTablero(A, filas, columnas); juego(A, contador, filas, columnas, jug); free(contador); freeMatrix(A, filas); return (EXIT_SUCCESS); } int **getMatrix( int filas, int columnas) { int **var; int i; var=(int**) calloc (filas, sizeof(int*)); for( i=0; i3; i--) { tmp=0; for (i2=i; i2>i-4; i2--) if (A[i2][columna]==turno) tmp++; if (tmp==4) res=turno; } return (res); } //la comprobacion de las diagonales no esta optimizada, pero las operaciones las hace el ordenador, no yo jeje int CompDiagPrim(int **A, int filas, int columnas, int turno) { int i, j, n, tmp, res=0; for(i=filas-1; i>2; i--) { for(j=3; j2; i--) { for(j=0; j no hay huecos, ganador=!0-> se acaba la partida, hay ganador { printf("Turno jugador %d: \t", turno); scanf("%d", &pos); if (pos<0 || pos >= columnas || contador[pos] == -1) printf("Dato mal introducido. Has perdido el turno.\n"); else { A[contador[pos]][pos]=turno; ganador=CompFilas(A,contador[pos],columnas,turno); //Comprobamos si hay 4 numeros iguales junt0s en las filas if (ganador==0) ganador=CompCols(A, filas, pos, turno); if (ganador==0) ganador=CompDiagSec(A, filas, columnas, turno); if (ganador==0) ganador=CompDiagPrim(A, filas, columnas, turno); contador[pos]--; } printTablero(A, filas, columnas); if (ganador!=0) printf("\n\n¡Ha ganado el jugador %d!\n", ganador); if (turno==jug) turno=1; else turno++; sumacont=SumaArray(contador, columnas); } }