コード例 #1
0
ファイル: dla_ctrl.c プロジェクト: cyamauch/eggx
void draw(void *_prms)
{
  param_set *p = (param_set *) _prms;
  int id, aggr = 0, this_r;
  int x, y, xnt, ynt, tk, key = 0;
  float tx[50000], ty[50000], th;

  for (;;) {
    if (*p->new_r) {
      *p->new_r = 0;
      *p->src_r += *p->r_inc;
      *p->rem_r = *p->src_r + *p->r_inc;
      if (*p->src_r >= (*p->R / 2)) {
	*p->run = 0;
	print_density(p);
	break;
      }
    }

    th = drand48() * 2.0 * M_PI;
    x = *p->src_r * cos(th) + *p->mid;
    y = *p->src_r * sin(th) + *p->mid;
    tk = 0;

    while (*p->run) {
      id = floor(drand48() * 4.0);
      xnt = (id == 0) ? x - 1 : (id == 1) ? x + 1 : x;
      ynt = (id <= 1) ? y : (id == 2) ? y - 1 : y + 1;
      tx[tk] = xnt;
      ty[tk] = ynt;
      this_r = hypot(xnt - *p->mid, ynt - *p->mid);

      if ((xnt < *p->mid - *p->R) || (xnt >= *p->mid + *p->R) ||
	  (ynt < *p->mid - *p->R) || (ynt >= *p->mid + *p->R) ||
	  (this_r > *p->rem_r)) {
	newcolor(*p->win, "red4");
	break;
      }
      /* seems to escape */
      if (grid[xnt - 1][ynt] == 1 || grid[xnt][ynt - 1] == 1 ||
	  grid[xnt][ynt + 1] == 1 || grid[xnt + 1][ynt] == 1) {
	aggr = 1;
	if (drand48() <= *p->agg_prob) {
	  grid[xnt][ynt] = 1;
	  if (this_r >= *p->src_r)
	    *p->new_r = 1;
	  layer(*p->win, 0, 2);
	  newcolor(*p->win, ECTRL_FGCOLOR);
	  pset(*p->win, xnt, ynt);
	  layer(*p->win, 0, 1);
	  newcolor(*p->win, "green3");
	}
	break;
      }				/* aggregate */
      if (aggr == 0) {
	x = xnt;
	y = ynt;
      }
      aggr = 0;
      tk++;
    }
    gclr(*p->win);
    copylayer(*p->win, 2, 1);
    newlinestyle(*p->win, LineSolid);
    drawpts(*p->win, tx, ty, tk - 1);
    newcolor(*p->win, "gray50");
    newlinestyle(*p->win, LineOnOffDash);
    drawarc(*p->win, *p->mid, *p->mid, *p->src_r, *p->src_r, 0, 360, 0);
    copylayer(*p->win, 1, 0);
    msleep(5);
    key = ggetch();
    if (key == 'q') {
      *p->run = 0;
      goto RET;
    }
  }
RET:
  ;				/* do nothing just return */
}
コード例 #2
0
ファイル: demo3d.c プロジェクト: cyamauch/eggx
int main()
{
  int win, i, j, k, m, key = 0;
  int arp[5] = { 0, 3, 1, 4, 2 }, ars[7] = {
  0, 5, 3, 1, 6, 4, 2};
  double pentagon[3][5], septagon[3][7], parab[3][144], y;

  win = gopen(L, L);
  window(win, -L / 2, -L / 2, L / 2, L / 2);
  gsetbgcolor(win, ECTRL_BGCOLOR);
  newcolor(win, ECTRL_FGCOLOR);
  winname(win, "e_3d demo");
  layer(win, 0, 1);
  gsetnonblock(ENABLE);
  i = j = m = 0;

  for (i = 0; i < 144; i++) {
    y = L/(2*144.0)*i;
    parab[0][i] = 0;
    parab[1][i] = -y;
    parab[2][i] = 0.02*y*(L/2 - y);
  }

  while (key != 'q') {
    g3dsetangle(torad(40 * (1.5 + sin(j * 2 * M_PI / 30))),
		i * 2 * M_PI / 144);
    gclr(win);

    for (k = 0; k < 5; k++) {
      pentagon[0][k] =
	  L / 6 * cos(arp[k] * 2 * M_PI / 5 + m * 2 * M_PI / 50) + L / 5;
      pentagon[1][k] =
	  L / 6 * sin(arp[k] * 2 * M_PI / 5 + m * 2 * M_PI / 50) + L / 5;
      pentagon[2][k] = 0;
    }
    for (k = 0; k < 7; k++) {
      septagon[0][k] =
	  L / 6 * cos(ars[k] * 2 * M_PI / 7 + 2 * m * 2 * M_PI / 50) -
	  L / 5;
      septagon[1][k] = 0;
      septagon[2][k] =
	  L / 6 * sin(ars[k] * 2 * M_PI / 7 + 2 * m * 2 * M_PI / 50) +
	  L / 5;
    }
    newcolor(win, "lightsteelblue");
    newlinestyle(win, LineOnOffDash);
    for(k = 0; k < 6; k++) {
      drawline3d(win, -L/10*k, 0, 0,  -L/10*k, -L/2, 0);
      drawline3d(win, 0, -L/10*k, 0,  -L/2, -L/10*k, 0);
    }
    newlinestyle(win, LineSolid);
    newcolor(win, "red4");
    fillpoly3d(win, pentagon[0], pentagon[1], pentagon[2], 5, 0);
    newcolor(win, "green4");
    fillpoly3d(win, septagon[0], septagon[1], septagon[2], 7, 0);
    newcolor(win, ECTRL_FGCOLOR);
    drawarrow3d(win, 0, 0, 0, 0, 0, L / 3, 10, 6, 12);
    drawarrow3d(win, 0, 0, 0, 0, L / 3, 0, 10, 6, 12);
    drawarrow3d(win, 0, 0, 0, L / 3, 0, 0, 10, 6, 12);
    newcolor(win, "gold3");
    drawstr3d(win, 0, 0, L/3+10, FONTSET, 0, "z¼´");
    drawlines3d(win, parab[0], parab[1], parab[2], 144);
    y = L/(2*36.0)*(i%36);
    putimg24m3d(win, 0 - 6 *(-sin(_phi) - cos(_th)*cos(_phi)), 
                     -y - 6*(cos(_phi) - cos(_th)*sin(_phi)), 
                0.02*y*(L/2 - y) -6*sin(_th), 12, 12, Xpm_image_stone6);
    copylayer(win, 1, 0);
    i++;
    i %= 144;
    j++;
    j %= 30;
    m++;
    m %= 50;
    msleep(40);
    key = ggetch();
  }
  gcloseall();
  return 0;
}
コード例 #3
0
ファイル: roche.c プロジェクト: cyamauch/eggx
int main()
{
    int i,j,key,sl=0,wl=1 ;
    int shape_i = 11, shape_j = 4 ;
    float f=MRATIO_F ;
    float x,y,zx,zy,z,ph,ms_w,ms_h ;
    float zran=(ZMAX-ZMIN) ;
    float zcen=(ZMAX+ZMIN)/2.0 ;
    color_prms cl = {
	EGGX_COLOR_BEGIN,			/* カラーパターン */
	CP_CONTRAST | CP_BRIGHTNESS | CP_GAMMA,	/* フラグ */
	1.0,					/* コントラスト */
	0.0,					/* ブライトネス*/
	1.0,					/* γ */
    } ;
    int win ;
    int cl_r,cl_g,cl_b ;

    win=gopen(WINWIDTH,WINHEIGHT) ;	/* ウィンドゥのタイトル */
    /* 座標系を変更する */
    coordinate(win, 0,0, XMIN,YMIN, 
	       WINWIDTH/(XMAX-XMIN), WINHEIGHT/(YMAX-YMIN)) ;
    layer(win,sl,wl) ;

    puts("【キーボードでの操作方法】") ;
    puts("'PageUp','PageDown'  … 質量比変更") ;
    puts("'c','C'              … カラーパターン") ;
    puts("'↑','↓','←','→'  … カラー調整") ;
    puts("'[',']'              … コントラスト") ;
    puts("'{','}'              … ブライトネス") ;
    puts("'<','>'              … γ補正") ;
    puts("'s'                  … 画像を保存") ;
    puts("'q','Esc'            … 終了") ;

    ms_w=(float)(XMAX-XMIN)/XSAMPLES ;	/* メッシュ1個分のサイズ */
    ms_h=(float)(YMAX-YMIN)/YSAMPLES ;

    do{
	/* ウィンドゥのタイトル */
	winname(win,"ロッシュワールド('s'キーで画像save) f=%g zcen=%g zran=%g",
		f,zcen,zran) ;
	for( i=0 ; i<XSAMPLES ; i++ ){	/* ポテンシャルを色で表現 */
	    x=XMIN+ms_w*i ;
	    for( j=0 ; j<YSAMPLES ; j++ ){
		y=YMIN+ms_h*j ;
		ph=get_phi(x+ms_w/2.0,y+ms_w/2.0,f) ;
		generatecolor(&cl,zcen-zran/2,zcen+zran/2,ph,
			      &cl_r,&cl_g,&cl_b) ;
		newrgbcolor(win,cl_r,cl_g,cl_b) ;
		fillrect(win,x,y,ms_w*1.5,ms_h*1.5) ;
	    }
	}
	newpen(win,1) ;
	for( i=0 ; i<XSAMPLES ; i++ ){	/* テスト粒子に働く力を矢印で表現 */
	    x=XMIN+ms_w*(i+0.5) ;
	    for( j=0 ; j<YSAMPLES ; j++ ){
		y=YMIN+ms_h*(j+0.5) ;
		zx=get_fx(x,y,f) ;
		zy=get_fy(x,y,f) ;
		zx *= VXSCALE ;
		zy *= VYSCALE ;
		z=sqrt(zx*zx+zy*zy) ;
		if( z <= VCARMAX ){
		    drawarrow(win,x-zx,y-zy,x+zx,y+zy,0.3,0.2,
			      shape_i*10+shape_j) ;
		}
	    }
	}
	sl ^= 1 ;				/* XORをとってレイヤを切替 */
	wl ^= 1 ;
	layer( win,sl,wl ) ;
	key=ggetch() ;				/* キー入力があるまで待つ */
	if( key == 0x002 ) f += 0.1 ;		/* PageUp */
	else if( key == 0x006 ) f -= 0.1 ;	/* PageDown */
	else if( key == 0x01e ) zcen += 0.1 ;	/* ↑ */
	else if( key == 0x01f ) zcen -= 0.1 ;	/* ↓ */
	else if( key == 0x01c ) zran += 0.1 ;	/* → */
	else if( key == 0x01d ) zran -= 0.1 ;	/* ← */
	else if( key == 'i' ) {
	    shape_i += 1 ;
	    if ( 12 < shape_i ) shape_i = 10 ;
	}
	else if( key == 'j' ) {
	    shape_j += 1 ;
	    if ( 7 < shape_j ) shape_j = 1 ;
	}
	else if( key == 'c' ){			/* 'c','C'キーでカラーパターン変更 */
	    cl.colormode++ ;
	    if( EGGX_COLOR_BEGIN+EGGX_COLOR_NUM <= cl.colormode )
		cl.colormode=EGGX_COLOR_BEGIN ;
	}
	else if( key == 'C' ){
	    cl.colormode-- ;
	    if( cl.colormode < EGGX_COLOR_BEGIN )
		cl.colormode=EGGX_COLOR_BEGIN+EGGX_COLOR_NUM-1 ;
	}
	else if( key == '[' ){			/* '[',']'でコントラスト変更 */
	    cl.contrast += 0.05 ;
	    if( 1 < cl.contrast ) cl.contrast = 1 ;
	}
	else if( key == ']' ){
	    cl.contrast -= 0.05 ;
	    if( cl.contrast < 0 ) cl.contrast = 0 ;
	}
	else if( key == '{' ){			/* '{','}'でブライトネス変更 */
	    cl.brightness += 0.05 ;
	    if( 1 < cl.brightness ) cl.brightness = 1 ;
	}
	else if( key == '}' ){
	    cl.brightness -= 0.05 ;
	    if( cl.brightness < 0 ) cl.brightness = 0 ;
	}
	else if( key == '<' ){			/* '<','>'でγ変更 */
	    cl.gamma += 0.025 ;
	}
	else if( key == '>' ){
	    cl.gamma -= 0.025 ;
	    if( cl.gamma <= 0 ) cl.gamma = 0.025 ;
	}
	else if( key == 's' ){			/* 's'キーで保存 */
#ifdef USE_NETPBM
	    saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,
		     "pnmtops -noturn -dpi 72 -equalpixels -psfilter -flate -ascii85",256,
		     "roche_f=%g.eps",f) ;
	    printf("画像を保存: filename='roche_f=%g.eps'\n",f) ;
#else
#ifdef USE_IMAGEMAGICK
	    saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,"convert",256,
		     "roche_f=%g.png",f) ;
	    printf("画像を保存: filename='roche_f=%g.png'\n",f) ;
#else
	    saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,"",256,
		     "roche_f=%g.ppm",f) ;
	    printf("画像を保存: filename='roche_f=%g.ppm'\n",f) ;
#endif
#endif
	}
	if( f < 0 ) f=0 ;
	if( zran < 0 ) zran=0.1 ;
    } while( key != 0x01b && key != 'q' ) ;	/* ESCキーか 'q'キーで終了 */

    gcloseall() ;
    return(0) ;
}
コード例 #4
0
ファイル: wartool.c プロジェクト: Solomoriah/WAR
int main(int argc, char *argv[])
{
	int rc, i, uid, n, c, ch, t, mtbl, line, offset;
	FILE *fp;
	char filename[64], inbuf[128], name[NATIONNMLEN+1], *p, *u;
	struct stat st_buf;


	/* set directory */

	if(argc > 1)
		if(chdir(argv[1]) == -1) {
			gmove(20,18);
			gprintf("Error Setting Directory %s\n", argv[1]);
			ggetch();
			gend();
			exit(1);
		}
	

	/* set up display */

	ginit();

	gmove(5, 10);
	gputs("WARTOOL 1.0 Game Editor for Solomoriah's WAR!");
	gmove(6, 10);
	gputs("Copyright 1994, J. Christopher Gonnerman");
	gmove(7, 10);
	gputs("All Rights Reserved.");

	
	/* load map file */

	rc = loadmap();

	if(rc != 0) {
		gmove(20,10);
		gprintf("Error Loading Map (%s)\n", errors[rc]);
		ggetch();
		gend();
		exit(1);
	}

	/* load game save */

	rc = loadsave();

	if(rc != 0) {
		gmove(20,10);
		gprintf("Error Loading Game Save (%s)\n", errors[rc]);
		ggetch();
		gend();
		exit(1);
	}

	/* execute master file */

	gmove(20,10);
	gputs("Reading Master Commands...  ");
	grefresh();

	fp = fopen(MASTERFL, "r");

	if(fp != NULL) {
		for(i = 0; fgets(inbuf, 128, fp) != NULL; i++) {
			rc = execpriv(inbuf);
			if(rc == 0) {
				if((i+1) % 10 == 0) {
					gmove(20,48);
					gprintf("%3d lines", i+1);
					grefresh();
				}
			} else {
				gmove(20,10);
				gprintf("Master Cmd Failed, Line %d, Code %d  ", i+1, rc);
				(void)ggetch();
				gend();
				exit(2);
			}
		}

		fclose(fp);
	}

	/* main loop */

	gmove(20,10);
	gputs("Press Any Key to Begin...  ");
	gclrline();

	ggetch();

	mainscreen();

	toolmain();

	unlink("game.bak");
	if(rename("game.sav", "game.bak") == 0)
		fp = fopen("game.sav", "w");
	else
		fp = fopen("game.sv!", "w");

	savegame(fp);

	fclose(fp);

	/* clean up */

	endwin();

	exit(0);
}