home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1999 February / VPR9902A.BIN / FFILLY / BOID / boid1.tfy < prev    next >
Text File  |  1997-11-23  |  2KB  |  142 lines

  1. #info IART "もりきゅう,VZF07161@niftyserve.or.jp"
  2. #info ICMT "Boid 1"
  3. #info INAM "Boid 1"
  4. #info ICOP "(c)Kazuhiro.Yoshida"
  5. #info ISBJ "Boid 1"
  6. #info VIDO "640x480; 256"
  7. #info GRPC "もりきゅう,VZF07161@niftyserve.or.jp"
  8.  
  9. #include "local.tfy"
  10.  
  11. main()
  12. {
  13.     int i;
  14.     int x,y;
  15.     int sum; // 物体(岩と鳥)の数
  16.     int in; // ここまで岩。ここから鳥。
  17.     
  18.     int wMain;
  19.     int pBase,pBack,pBoid,pRock;
  20.     int cBack;
  21.     int nTransColor; // 透明色
  22.     
  23.     int cBoid[];
  24.     int bw2,bh2;
  25.     
  26.     int nx[],ny[]; // 位置
  27.     int vx[],vy[]; // 速度
  28.     int ax[],ay[]; // 加速度
  29.     
  30.     pBase = LoadPic("base.bmp");
  31.     pBoid = LoadPic("boid.bmp");
  32.     pRock = LoadPic("rock.bmp");
  33.     pBack = copyPic(pBase);
  34.     
  35.     nTransColor = GetColor(pBoid,0,0);
  36.     cBack = PutCast(pBack,pBase);
  37.     wMain = OpenWin(pBase);
  38.     
  39.     // ボイド表示修正用
  40.     bw2 = PicWidth(pBoid) / 2;
  41.     bh2 = PicHeight(pBoid) / 2;
  42.     
  43.     sum = 10;
  44.     in = 1;
  45.     
  46.     // 岩の状態
  47.     for( i=0 ; i<in ; i=i+1 )
  48.     {
  49.         nx[i] = PicWidth(pBase)/2;
  50.         ny[i] = PicHeight(pBase)/2;
  51.         vx[i] = 0;
  52.         vy[i] = 0;
  53.         ax[i] = 0;
  54.         ay[i] = 0;
  55.         cBoid[i] = PutCast(pRock,pBase,nx[i]-bw2,ny[i]-bh2,nTransColor);
  56.     }
  57.     
  58.     // 鳥の状態
  59.     for( i=in ; i<sum ; i=i+1 )
  60.     {
  61.         nx[i] = Random(PicWidth(pBase));
  62.         ny[i] = Random(PicHeight(pBase));
  63.         vx[i] = Random(11)-5;
  64.         vy[i] = Random(11)-5;
  65.         ax[i] = 0;
  66.         ay[i] = 0;
  67.         cBoid[i] = PutCast(pBoid,pBase,nx[i]-bw2,ny[i]-bh2,nTransColor);
  68.     }
  69.     
  70.     int mesTIME;
  71.     
  72.     mes(TIME)
  73.     {
  74.     step(3)
  75.     {
  76.         // 質量中心を求める
  77.         x=0;
  78.         y=0;
  79.         for(i=0;i<sum;i=i+1)
  80.         {
  81.             x = x + nx[i];
  82.             y = y + ny[i];
  83.         }
  84.         x = x/sum;
  85.         y = y/sum;
  86.         
  87.         // 規則1
  88.         // 鳥は質量中心に向かう
  89.         for(i=in;i<sum;i=i+1)
  90.         {
  91.             if ( nx[i] < x )
  92.             {
  93.                 ax[i] = 1;
  94.             }
  95.             else if ( nx[i] > x )
  96.             {
  97.                 ax[i] = -1;
  98.             }
  99.             
  100.             if ( ny[i] < y )
  101.             {
  102.                 ay[i] = 1;
  103.             }
  104.             else if ( ny[i] > y )
  105.             {
  106.                 ay[i] = -1;
  107.             }
  108.         }
  109.         
  110.         // 鳥の状態を変化
  111.         for(i=in;i<sum;i=i+1)
  112.         {
  113.             vx[i] = vx[i] + ax[i];
  114.             vy[i] = vy[i] + ay[i];
  115.             nx[i] = nx[i] + vx[i] / 2;
  116.             ny[i] = ny[i] + vy[i] / 2;
  117.         }
  118.         
  119.         // 移動
  120.         for(i=in;i<sum;i=i+1)
  121.         {
  122.             MoveCast(cBoid[i],pBoid,nx[i]-bw2,ny[i]-bh2);
  123.         }
  124.     }
  125.     }
  126.     mesTIME = GetMesNo(0);
  127.     
  128.     int pause;
  129.     pause = 0;
  130.     
  131.     mes(LBUP)
  132.     {
  133.         if ( pause == 0 ) {
  134.             FreezeMes(mesTIME);
  135.             pause = 1;
  136.         } else {
  137.             ActivateMes(mesTIME);
  138.             pause = 0;
  139.         }
  140.     }
  141. }
  142.