コード例 #1
0
ファイル: tennis2.c プロジェクト: loirotv/P2_FSO
/* funcio per inicialitar les variables i visualitzar l'estat inicial del joc */
int inicialitza_joc(void)
{
  int i,j, i_port, f_port, retwin;
  char strin[51];

  retwin = win_ini(&n_fil,&n_col,'+',INVERS);   /* intenta crear taulell */

  if (retwin < 0)       /* si no pot crear l'entorn de joc amb les curses */
  { fprintf(stderr,"Error en la creacio del taulell de joc:\t");
    switch (retwin)
    {   case -1: fprintf(stderr,"camp de joc ja creat!\n");
                 break;
        case -2: fprintf(stderr,"no s'ha pogut inicialitzar l'entorn de curses!\n");
 		 break;
        case -3: fprintf(stderr,"les mides del camp demanades son massa grans!\n");
                 break;
        case -4: fprintf(stderr,"no s'ha pogut crear la finestra!\n");
                 break;
     }
     return(retwin);
  }

  i_port = n_fil/2 - m_por/2;	    /* crea els forats de la porteria */
  if (n_fil%2 == 0) i_port--;
  if (i_port == 0) i_port=1;
  f_port = i_port + m_por -1;
  for (i = i_port; i <= f_port; i++)
  {	win_escricar(i,0,' ',NO_INV);
	win_escricar(i,n_col-1,' ',NO_INV);
  }


  ipu_pf = n_fil/2; ipu_pc = 3;		/* inicialitzar pos. paletes */
  if (ipu_pf+l_pal >= n_fil-3) ipu_pf = 1;
  for (i=0; i< l_pal; i++)      /* dibuixar paleta inicialment */
  { 
    win_escricar(ipu_pf +i, ipu_pc, '0',INVERS);
  }
  i=0;
  do
  {
  for (j=0; j< l_pal; j++)	    /* dibuixar paleta inicialment */
  {	
	win_escricar(ipo_pf[i] +j, ipo_pc[i], '1',INVERS);
  }
  po_pf[i] = ipo_pf[i];		/* fixar valor real paleta ordinador */
  i++;
  }while(i<num_oponents);
  pil_pf = ipil_pf; pil_pc = ipil_pc;	/* fixar valor real posicio pilota */
  win_escricar(ipil_pf, ipil_pc, '.',INVERS);	/* dibuix inicial pilota */

  sprintf(strin,"Tecles: \'%c\'-> amunt, \'%c\'-> avall, RETURN-> sortir.",
		TEC_AMUNT, TEC_AVALL);
  win_escristr(strin);
  return(0);
}
コード例 #2
0
ファイル: multiproc2.c プロジェクト: rogerurv/fso
int main(int n_args, char * ll_args[])
{
  int i,n,t,t_total,n_proc,n_veg;
  int *p_lletres,id_lletres;
  int id_win,n_fil,n_col,mida_camp;
  char a1[20],a3[20],a4[20],a5[10],a6[10], fmis[80];
  void *p_win;

  if (n_args != 4)
  {	fprintf(stderr,"comanda: multiproc2 num_procs n_vegades n_lletres\n");
	exit(1);
  }
  n_proc = atoi(ll_args[1]);		/* convertir arguments a num. enter */
  n_veg = atoi(ll_args[2]);
  if (n_proc < 1) n_proc = 1;		/* i filtrar el seu valor */
  if (n_proc > MAX_PROCS) n_proc = MAX_PROCS;
  if (n_veg < 1) n_veg = 1;
  if (n_veg > MAX_VEGADES) n_veg = MAX_VEGADES;

  id_lletres = ini_mem(sizeof(int));	/* crear zona mem. compartida */
  p_lletres = map_mem(id_lletres);	/* obtenir adres. de mem. compartida */
  *p_lletres = atoi(ll_args[3]);	/* inicialitza variable compartida */
  if (*p_lletres < 1) *p_lletres = 1;
  if (*p_lletres > n_proc*n_veg) *p_lletres = n_proc*n_veg;
  sprintf(a3,"%i",id_lletres);	/* convertir identificador mem. en string */

  n_fil = n_proc+3;
  n_col = n_veg+2;
  mida_camp = win_ini(&n_fil,&n_col,'+',INVERS);
  if (mida_camp < 0)
  {			/* si no pot crear l'entorn de joc amb les curses */
    switch (mida_camp)
    {	case -1: fprintf(stderr,"camp de joc ja creat!\n"); break;
	case -2: fprintf(stderr,"no s'ha pogut inicialitzar l'entorn de curses!\n"); break;
	case -3: fprintf(stderr,"les mides del camp demanades son massa grans!\n"); break;
	case -4: fprintf(stderr,"no s'ha pogut crear la finestra!\n"); break;
    }
    elim_mem(id_lletres);	/* elimina zona de memoria compartida */
    exit(2);
  }
  id_win = ini_mem(mida_camp);	/* crear zona mem. compartida */
  p_win = map_mem(id_win);	/* obtenir adres. de mem. compartida */
  sprintf(a4,"%i",id_win);
  sprintf(a5,"%i",n_fil);	/* convertir mides camp en string */
  sprintf(a6,"%i",n_col);

  win_set(p_win,n_fil,n_col);		/* crea acces a finestra oberta */

  n = 0;
  for ( i = 0; i < n_proc; i++)
  {
    tpid[n] = fork();		/* crea un nou proces */
    if (tpid[n] == (pid_t) 0)		/* branca del fill */
    {
	sprintf(a1,"%i",(i+1));
	execlp("./mp_car2", "mp_car2", a1, ll_args[2], a3, a4, a5, a6, (char *)0);
	fprintf(stderr,"error: no puc executar el process fill \'mp_car2\'\n");
	exit(0);
    }
    else if (tpid[n] > 0) n++;		/* branca del pare */
  }
/* fprintf(stderr,"Pare: he creat %d processos fill, espero que acabin!\n\n",n);*/
      
  do
  { sprintf(fmis,"lletres = %d",*p_lletres);
    win_escristr(fmis);
    win_update();			/* actualitza visualitzacio CURSES */
    win_retard(20);
  } while (*p_lletres != 0);
      
  t_total = 0;
  for (i = 0; i < n; i++)
  {
    waitpid(tpid[i],&t,0);	/* espera finalitzacio d'un fill */
    t = t >> 8;			/* normalitza resultat	*/
/* 	fprintf(stderr,"el proces (%d) ha escrit %d lletres\n",tpid[i],t); */
    t_total += t;
  }
  win_fi();

  printf("\nJa han acabat tots els processos creats!\n");
  printf("Entre tots els processos han escrit %d lletres.\n",t_total);

  elim_mem(id_win);		/* elimina zones de memoria compartida */
  elim_mem(id_lletres);
  return(0);
}