Duda sobre Cuatro en línea

Iniciado por DickGumshoe, 18 Enero 2012, 18:03 PM

0 Miembros y 4 Visitantes están viendo este tema.

DickGumshoe

No sé por qué, pero me da el error
" too few arguments to function `int finPartida(int (*)[8])' "
Haciendo esto:


#include<stdio.h>
#include<stdlib.h>

int finPartida(int m[8][8])
{
   
    int i, j;
    for(i = 8-1; i >= 3; i--)
        for(j = 8-1; j >= 3; j--)
            if((m[i][j] == m[i-1][j] && m[i][j] == m[i-2][j] && m[i][j] == m[i-3][j] && m[i][j] != 0) ||
               (m[i][j] == m[i][j-1] && m[i][j] == m[i][j-2] && m[i][j] == m[i][j-3] && m[i][j] != 0) ||
               (m[i][j] == m[i-1][j-1] && m[i][j] == m[i-2][j-2] && m[i][j] == m[i-3][j-3] && m[i][j] != 0))
                return 1;

    for(i = 8-1; i >= 3; i--)
        for(j = 0; j <= 8-3; j++)
            if(m[i][j] == m[i-1][j+1] && m[i][j] == m[i-2][j+2] && m[i][j] == m[i-3][j+3] && m[i][j] != 0)
                return 1;

    return 0;
}


int main (void)
{
   int M[8][8];

  int i, j, col, jugador, s, fila[8];

   for(i=0; i<8; i++){
       for(j=0; j<8; j++){
           M[i][j] = 0;
       }
       fila[i] = 7;
   }

   jugador = 1;

   do{   


   for(i=0; i<8; i++){
       for(j=0; j<8; j++){
           printf("%d  ",M[i][j]);                 
       }   
       printf("\n");                                 
   }

   printf("Introduce la columna (1-8): ");
   scanf("%d", &col);

   col = col-1;

   M[fila[col]][col] = jugador;

   fila[col]--; //
   

   do{
   printf("Introduzca un 0 si abandona o un 1 si quiere seguir jugando: ");
   scanf("%d", &s);
   jugador = 3-jugador;
   }
   while((s<0)||(s>1));
   }
   while(s==1);
   
   finPartida();
   



system("pause");   
return 0;
}


El código en sí lo he entendido.

Gracias.

satu

Hola

El error que te está dando está en la llamada a la función, tú tienes finPartida(); pero debes pasarle la matriz finPartida(M);

Te pongo mi programa y así lo comparas, y si tienes alguna duda pregunta.


#include <stdio.h>

#define FILAS 8
#define COLUMNAS 8

void mostrarTablero(int m[FILAS][COLUMNAS]);
int finPartida(int m[FILAS][COLUMNAS]);

int main(void)
{
    int m[FILAS][COLUMNAS];
    int i, j, col, jugador, s = 0;
    int fila[COLUMNAS];

    for(i = 0; i < 8; i++)
    {
        for(j = 0; j < 8; j++)
            m[i][j] = 0;
        fila[i] = 7;
    }

    jugador = 1;

    do
    {
        mostrarTablero(m);

        printf("\nTurno del jugador %d\n", jugador);

        do
        {
            printf("Introduce la columna (1-8): ");
            scanf("%d", &col);
            if(fila[col-1] < 0)
            {
                col = 0;
                printf("\nEsa columna esta llena\n\n");
            }
        }
        while(col < 1 || col > 8);

        col = col-1;
        m[fila[col]][col] = jugador;
        fila[col]--;

        jugador = 3 - jugador;

        s = finPartida(m);
    }
    while(s == 0);

    mostrarTablero(m);

    printf("\n\nGANADOR EL JUGADOR %d\n\n", 3 - jugador);

    while(getchar() != '\n');
    printf("Pulsa Enter para salir...");
    getchar();
    return 0;
}


void mostrarTablero(int m[FILAS][COLUMNAS])
{
    int i, j;

    printf("\n");
    for(i = 0; i < FILAS; i++)
    {
        printf("%d - ", i+1);
        for(j = 0; j < COLUMNAS; j++)
            printf("%i  ", m[i][j]);
        printf("\n");
    }

    printf("   ");
    for(j = 0; j < COLUMNAS; j++)
        printf("___");

    printf("\n    ");
    for(j = 0; j < COLUMNAS; j++)
        printf("%i  ", j+1);
    printf("\n\n");
}


int finPartida(int m[FILAS][COLUMNAS])
{
    int i, j;
    for(i = FILAS-1; i >= 3; i--)
        for(j = COLUMNAS-1; j >= 3; j--)
            if((m[i][j] == m[i-1][j] && m[i][j] == m[i-2][j] && m[i][j] == m[i-3][j] && m[i][j] != 0) ||
               (m[i][j] == m[i][j-1] && m[i][j] == m[i][j-2] && m[i][j] == m[i][j-3] && m[i][j] != 0) ||
               (m[i][j] == m[i-1][j-1] && m[i][j] == m[i-2][j-2] && m[i][j] == m[i-3][j-3] && m[i][j] != 0))
                return 1;

    for(i = FILAS-1; i >= 3; i--)
        for(j = 0; j <= COLUMNAS-3; j++)
            if(m[i][j] == m[i-1][j+1] && m[i][j] == m[i-2][j+2] && m[i][j] == m[i-3][j+3] && m[i][j] != 0)
                return 1;

    return 0;
}


Saludos
Breakbeat como forma de vida

DickGumshoe

Muchísimas gracias. Ya entiendo el programa entero.

Ahora voy a intentar hacer la opción de si hay 4 en vertical, que me parece que en su código no sale bien.

Saludos.

satu

#13
Hola

Tienes razón, en las 3 primeras columnas no funciona el vertical, hice el código a ojo sin probarlo y esto es lo que pasa, pero es fácil de arreglar.

Bueno me alegro de que te haya quedado todo claro.

Saludos

Edito: también pasa lo mismo con las horizontales en las 3 filas de arriba
Breakbeat como forma de vida