Beispiel #1
0
/* velocitat de la paleta (variable global v_pal) */
void mou_paleta_ordinador(int * i)
{
  
  int index = (int)i;
  
  do
  {
 /* char rh,rv,rd; */
  f_h[index] = po_pf[index] + v_pal[index];		/* posicio hipotetica de la paleta */
  if (f_h[index] != ipo_pf[index])	/* si pos. hipotetica no coincideix amb pos. actual */
  {
    if (v_pal[index] > 0.0)			/* verificar moviment cap avall */
    {
	pthread_mutex_lock(&mutex3);
  if (win_quincar(f_h[index]+l_pal-1,ipo_pc[index]) == ' ')   /* si no hi ha obstacle */
	{
    pthread_mutex_unlock(&mutex3);
    pthread_mutex_lock(&mutex1);
	  win_escricar(ipo_pf[index],ipo_pc[index],' ',NO_INV);      /* esborra primer bloc */
	  pthread_mutex_unlock(&mutex1);
    po_pf[index] += v_pal[index]; ipo_pf[index] = po_pf[index];		/* actualitza posicio */
	  pthread_mutex_lock(&mutex1);
    win_escricar(ipo_pf[index]+l_pal-1,ipo_pc[index],'1',INVERS); /* impr. ultim bloc */
    pthread_mutex_unlock(&mutex1);
	}
	else{
    pthread_mutex_unlock(&mutex3);
    v_pal[index] = -v_pal[index];   /* si hi ha obstacle, canvia el sentit del moviment */
  }		
	   
    }
    else			/* verificar moviment cap amunt */
    {
  pthread_mutex_lock(&mutex3);
	if (win_quincar(f_h[index],ipo_pc[index]) == ' ')        /* si no hi ha obstacle */
	{
    pthread_mutex_unlock(&mutex3);
    pthread_mutex_lock(&mutex1);
	  win_escricar(ipo_pf[index]+l_pal-1,ipo_pc[index],' ',NO_INV); /* esbo. ultim bloc */
	  pthread_mutex_unlock(&mutex1);
    po_pf[index] += v_pal[index]; ipo_pf[index] = po_pf[index];		/* actualitza posicio */
	  pthread_mutex_lock(&mutex1);
    win_escricar(ipo_pf[index],ipo_pc[index],'1',INVERS);	/* impr. primer bloc */
    pthread_mutex_unlock(&mutex1);
	}
	else{		/* si hi ha obstacle, canvia el sentit del moviment */
     pthread_mutex_unlock(&mutex3);
	   v_pal[index] = -v_pal[index];
   }
    }
  }
  else po_pf[index] += v_pal[index]; 	/* actualitza posicio vertical real de la paleta */
  win_retard(retard);
  }while ((tecla != TEC_RETURN) && (cont==-1));
  pthread_exit(NULL);
}
Beispiel #2
0
/*	>0 ==> la pilota ha sortit per la porteria dreta		*/
int moure_pilota(void)
{
  cont=2;
  int f_h, c_h;
  char rh,rv,rd;
  do
  {
  f_h = pil_pf + pil_vf;		/* posicio hipotetica de la pilota */
  c_h = pil_pc + pil_vc;
  cont = -1;		/* inicialment suposem que la pilota no surt */
  rh = rv = rd = ' ';
  if ((f_h != ipil_pf) || (c_h != ipil_pc))
  {		/* si posicio hipotetica no coincideix amb la pos. actual */
    if (f_h != ipil_pf)		/* provar rebot vertical */
    {	rv = win_quincar(f_h,ipil_pc);	/* veure si hi ha algun obstacle */
	if (rv != ' ')			/* si no hi ha res */
	{   pil_vf = -pil_vf;		/* canvia velocitat vertical */
	    f_h = pil_pf+pil_vf;	/* actualitza posicio hipotetica */
	}
    }
    if (c_h != ipil_pc)		/* provar rebot horitzontal */
    {	rh = win_quincar(ipil_pf,c_h);	/* veure si hi ha algun obstacle */
	if (rh != ' ')			/* si no hi ha res */
	{    pil_vc = -pil_vc;		/* canvia velocitat horitzontal */
	     c_h = pil_pc+pil_vc;	/* actualitza posicio hipotetica */
	}
    }
    if ((f_h != ipil_pf) && (c_h != ipil_pc))	/* provar rebot diagonal */
    {	rd = win_quincar(f_h,c_h);
	if (rd != ' ')				/* si no hi ha obstacle */
	{    pil_vf = -pil_vf; pil_vc = -pil_vc;	/* canvia velocitats */
	     f_h = pil_pf+pil_vf;
	     c_h = pil_pc+pil_vc;		/* actualitza posicio entera */
	}
    }
    if (win_quincar(f_h,c_h) == ' ')	/* verificar posicio definitiva */
    {						/* si no hi ha obstacle */
	win_escricar(ipil_pf,ipil_pc,' ',NO_INV);	/* esborra pilota */
	pil_pf += pil_vf; pil_pc += pil_vc;
	ipil_pf = f_h; ipil_pc = c_h;		/* actualitza posicio actual */
	if ((ipil_pc > 0) && (ipil_pc <= n_col))	/* si no surt */
		win_escricar(ipil_pf,ipil_pc,'.',INVERS); /* imprimeix pilota */
	else
		cont = ipil_pc;	/* codi de finalitzacio de partida */
    }
  }
  else { pil_pf += pil_vf; pil_pc += pil_vc; }
  win_retard(retard);
  
  }while((tecla != TEC_RETURN) && (cont==-1));
  
}
Beispiel #3
0
/* velocitat de la paleta (variable global v_pal) */
void mou_paleta_ordinador(int * i)
{
  int f_h;
  int contador=0;
  int index = (int)i;
  FILE *doc;
  doc = fopen("log.txt","w");
  do
  {
  contador++;
 /* char rh,rv,rd; */
  fprintf(doc,"Iteració: %d\n",contador);

  f_h = po_pf[index] + v_pal[index];		/* posicio hipotetica de la paleta */
  if (f_h != ipo_pf[index])	/* si pos. hipotetica no coincideix amb pos. actual */
  {
    if (v_pal[index] > 0.0)			/* verificar moviment cap avall */
    {
	if (win_quincar(f_h+l_pal-1,ipo_pc[index]) == ' ')   /* si no hi ha obstacle */
	{
	  win_escricar(ipo_pf[index],ipo_pc[index],' ',NO_INV);      /* esborra primer bloc */
	  po_pf[index] += v_pal[index]; ipo_pf[index] = po_pf[index];		/* actualitza posicio */
	  win_escricar(ipo_pf[index]+l_pal-1,ipo_pc[index],'1',INVERS); /* impr. ultim bloc */
	}
	else		/* si hi ha obstacle, canvia el sentit del moviment */
	   v_pal[index] = -v_pal[index];
    }
    else			/* verificar moviment cap amunt */
    {
	if (win_quincar(f_h,ipo_pc[index]) == ' ')        /* si no hi ha obstacle */
	{
	  win_escricar(ipo_pf[index]+l_pal-1,ipo_pc[index],' ',NO_INV); /* esbo. ultim bloc */
	  po_pf[index] += v_pal[index]; ipo_pf[index] = po_pf[index];		/* actualitza posicio */
	  win_escricar(ipo_pf[index],ipo_pc[index],'1',INVERS);	/* impr. primer bloc */
	}
	else		/* si hi ha obstacle, canvia el sentit del moviment */
	   v_pal[index] = -v_pal[index];
    }
  }
  else po_pf[index] += v_pal[index]; 	/* actualitza posicio vertical real de la paleta */
  
  win_retard(retard);
  }while ((tecla != TEC_RETURN) && (cont==-1));
}
Beispiel #4
0
/* funcio per moure la paleta de l'usuari en funcio de la tecla premuda */
void mou_paleta_usuari(void)
{
  
    do
    {
      tecla = win_gettec();
      if ((tecla == TEC_AVALL) && (win_quincar(ipu_pf+l_pal,ipu_pc) == ' '))
      {
        win_escricar(ipu_pf,ipu_pc,' ',NO_INV);	   /* esborra primer bloc */
        ipu_pf++;					   /* actualitza posicio */
        win_escricar(ipu_pf+l_pal-1,ipu_pc,'0',INVERS); /* impri. ultim bloc */
      }
      if ((tecla == TEC_AMUNT) && (win_quincar(ipu_pf-1,ipu_pc) == ' '))
      {
        win_escricar(ipu_pf+l_pal-1,ipu_pc,' ',NO_INV); /* esborra ultim bloc */
        ipu_pf--;					    /* actualitza posicio */
        win_escricar(ipu_pf,ipu_pc,'0',INVERS);	    /* imprimeix primer bloc */
      }
      win_retard(retard);
  
    }while((tecla != TEC_RETURN) && (cont==-1));
}
Beispiel #5
0
/* funcio per moure la paleta de l'usuari en funcio de la tecla premuda */
void mou_paleta_usuari(void)
{
  
    do
    {
      tecla = win_gettec();
      pthread_mutex_lock(&mutex3);
      if ((tecla == TEC_AVALL) && (win_quincar(ipu_pf+l_pal,ipu_pc) == ' '))
      {
        pthread_mutex_unlock(&mutex3);
        pthread_mutex_lock(&mutex1);
        win_escricar(ipu_pf,ipu_pc,' ',NO_INV);	   /* esborra primer bloc */
        pthread_mutex_unlock(&mutex1);
        ipu_pf++;					   /* actualitza posicio */
        pthread_mutex_lock(&mutex1);
        win_escricar(ipu_pf+l_pal-1,ipu_pc,'0',INVERS); /* impri. ultim bloc */
        pthread_mutex_unlock(&mutex1);
      }
      pthread_mutex_unlock(&mutex3);
      pthread_mutex_lock(&mutex3);
      if ((tecla == TEC_AMUNT) && (win_quincar(ipu_pf-1,ipu_pc) == ' '))
      {
        pthread_mutex_unlock(&mutex3);
        pthread_mutex_lock(&mutex1);
        win_escricar(ipu_pf+l_pal-1,ipu_pc,' ',NO_INV); /* esborra ultim bloc */
        pthread_mutex_unlock(&mutex1);
        ipu_pf--;					    /* actualitza posicio */
        pthread_mutex_lock(&mutex1);
        win_escricar(ipu_pf,ipu_pc,'0',INVERS);	    /* imprimeix primer bloc */
        pthread_mutex_unlock(&mutex1);
      }
      pthread_mutex_unlock(&mutex3);
      win_retard(retard);
    }while((tecla != TEC_RETURN) && (cont==-1));
    pthread_exit(NULL);
}
Beispiel #6
0
int main(int n_args, char *ll_args[])
{
	
	int id_win,n_fil,n_col;
	void *p_win;
	int moviments,*p_moviments;
	int retard;
	int tecla,*p_tecla;
	int cont,*p_cont;
	int MAX_MOV;
	
	int l_pal;
	
	
	int ipo_pf;
	int ipo_pc;
	float po_pf;
	float v_pal;
	
	float aux1,aux2;
	int index;
	
	id_win = atoi(ll_args[1]);
	p_win = map_mem(id_win);
	
	n_fil = atoi(ll_args[2]);		/* obtenir dimensions del camp de joc */
	n_col = atoi(ll_args[3]);
	
	win_set(p_win,n_fil,n_col);	/* crea acces a finestra oberta pel proces pare */
	
	
	/* moviments,retard,tecla,cont,MAX_MOV,index,l_pal*/
	
	moviments= atoi(ll_args[4]);
	p_moviments = map_mem(moviments);	/* obtenir adres. de mem. compartida */
	
	
	
	retard= atoi(ll_args[5]);
	tecla= atoi(ll_args[6]);
	p_tecla = map_mem(tecla);	/* obtenir adres. de mem. compartida */
	
	cont= atoi(ll_args[7]);
	p_cont = map_mem(cont);	/* obtenir adres. de mem. compartida */
	
	
	MAX_MOV= atoi(ll_args[8]);
	index= atoi(ll_args[9]);	
	l_pal= atoi(ll_args[10]);
	ipo_pf= atoi(ll_args[11]);
	ipo_pc= atoi(ll_args[12]);
	aux1= atoi(ll_args[13]);
	aux2= atoi(ll_args[14]);
	
	po_pf=aux1/100;
	v_pal=aux2/100;
	
	
	
	
	
	int f_h;
	
	/* char rh,rv,rd; */
	int i= index; 
	int j=i+1;
	char c = j +'0';
  
do{
  
  f_h = po_pf + v_pal;		/* posicio hipotetica de la paleta */
 
  if (f_h != ipo_pf)	/* si pos. hipotetica no coincideix amb pos. actual */
  { 
    if (v_pal > 0.0)			/* verificar moviment cap avall */
    {
	
	if (win_quincar(f_h+l_pal-1,ipo_pc) == ' ')   /* si no hi ha obstacle */
	{
	  
	  win_escricar(ipo_pf, ipo_pc,' ',NO_INV);      /* esborra primer bloc */
	 
	  po_pf += v_pal; ipo_pf = po_pf;		/* actualitza posicio */
	  
	  win_escricar(ipo_pf+l_pal-1, ipo_pc,c,INVERS); /* impr. ultim bloc */
    

	}
	else{		/* si hi ha obstacle, canvia el sentit del moviment */
	   v_pal = -v_pal;
	  *p_moviments=*p_moviments+1;
      

       
     }}
    else			/* verificar moviment cap amunt */
    {

	if (win_quincar(f_h,ipo_pc) == ' ')        /* si no hi ha obstacle */
	{
	   			
	  win_escricar(ipo_pf+l_pal-1,ipo_pc,' ',NO_INV); /* esbo. ultim bloc */
	 
	  po_pf += v_pal; ipo_pf = po_pf;		/* actualitza posicio */
	  
	  win_escricar(ipo_pf, ipo_pc,c,INVERS);	/* impr. primer bloc */
	 
	}
	else{		/* si hi ha obstacle, canvia el sentit del moviment */
	   v_pal = -v_pal;
	   *p_moviments=*p_moviments+1;
        
         
     }}
  }
  else 
  
  po_pf += v_pal; 	/* actualitza posicio vertical real de la paleta */
  
  
  win_retard(retard);
  
	 } while (*p_tecla != TEC_RETURN && (*p_cont==-1) && *p_moviments<MAX_MOV);

return(0);
}