Ho risolto il problema con le pipe!
Ora il giochetto tra processi funziona..funziona tutto!
Posto il codice nel caso possa servire a qualcuno!DI nuovo grazie Valia per il supporto!

codice:
#include <signal.h>
#include <ctype.h>
#include <time.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>


int punt1=0;
int punt2=0;
int flag=0;
int pipe1[2],pipe2[2];

int N;
int processo;
void padre(void);
int pid;
int chiamata=0;

int ricevere(int processon){

int chiamat;
 sleep(2);


read(pipe1[0],&chiamat,sizeof(int));

if(processon==chiamat|processon==(chiamat+N)){
printf("ciao sono il processo %d \n",processon);
write(pipe2[1],&processon,sizeof(int));
exit(5);
}
else exit(0);

}

int npartita=0;

int main(int argc,char * argv[]){
do{
npartita++;
printf("inizio nuova partita numero %d: \n \n",npartita);


N=atoi(argv[1]);
int tabpid[N*2];
if (pipe(pipe1)<0)
	{
		perror("pipe error");
		exit(-1);
	}
if (pipe(pipe2)<0)
	{
		perror("pipe error");
		exit(-1);
	}

int i;

srand(time(NULL));
printf( "point \n");
chiamata=rand()% N;
for (i=0;i<N*2;i++)
	{
	if ((tabpid[i]=fork())<0)
		{
		perror("fork error");
		exit(-1);
		}
		pid=tabpid[i];
		if (pid==0)ricevere(i) ;
	}
printf("padre");
if(pid>0) 
{
int gioc;
for(i=0;i<N*2;i++)
write(pipe1[1],&chiamata,sizeof(int));
read(pipe2[0],&gioc,sizeof(int));
int i;
sleep(1);
if(gioc>N)punt2++;
else punt1++;
printf("il punteggio di 1 è %d il punteggio di 2 è %d \n",punt1,punt2);
}

}while(1);


}