熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

一個用java演示的產生圖像煙花的算法

2022-06-13   來源: Java核心技術 

  以下是一個用java演示的產生圖像煙花的算法可以用來研究以下相關的東西希望對有興趣的朋友有用
  import   javaappletAudioClip;
  import   javaawt*;
  import   javaawtimageMemoryImageSource;
  import   javautilRandom;
  public   class   jhanabi   extends   Applet
  implements   Runnable
  {
  //   類成員變量定義域開始
  private   int   m_nAppX;
  private   int   m_nAppY;
  private   int   m_centerX;
  private   int   m_centerY;
  private   int   m_mouseX;
  private   int   m_mouseY;
  private   int   m_sleepTime;
  private   boolean   isError;
  private   boolean   m_isPaintFinished;
  boolean   isRunning;
  boolean   isInitialized;
  Thread   runner;
  int   pix[];
  MemoryImageSource   offImage;
  Image   dbImg;
  int   pixls;
  int   pixls;
  Random   rand;
  int   bits;
  double   bit_px[];
  double   bit_py[];
  double   bit_vx[];
  double   bit_vy[];
  int   bit_sx[];
  int   bit_sy[];
  int   bit_l[];
  int   bit_f[];
  int   bit_p[];
  int   bit_c[];
  int   bit_max;
  int   bit_sound;
  int   ru;
  int   rv;
  AudioClip   sound;
  AudioClip   sound;
  //   類成員變量定義域結束   <   初始化過程祥見構造方法   >


  public   jhanabi//   構造方法   (如有必要請手工調整該方法)
  {
  m_mouseX   =   ;
  m_mouseY   =   ;
  m_sleepTime   =   ;
  isError   =   false;
  isInitialized   =   false;
  rand   =   new   Random;
  bits   =   ;
  bit_px   =   new   double[bits];
  bit_py   =   new   double[bits];
  bit_vx   =   new   double[bits];
  bit_vy   =   new   double[bits];
  bit_sx   =   new   int[bits];
  bit_sy   =   new   int[bits];
  bit_l   =   new   int[bits];
  bit_f   =   new   int[bits];
  bit_p   =   new   int[bits];
  bit_c   =   new   int[bits];
  ru   =   ;
  rv   =   ;
  }//   jhanabi   結束
  //構造方法結束
  public   void   init
  {
  String   s   =   getParameter( para_bits );
  if(s   !=   null)
  bits   =   IntegerparseInt(s);
  s   =   getParameter( para_max );
  if(s   !=   null)
  bit_max   =   IntegerparseInt(s);
  s   =   getParameter( para_blendx );
  if(s   !=   null)
  ru   =   IntegerparseInt(s);
  s   =   getParameter( para_blendy );
  if(s   !=   null)
  rv   =   IntegerparseInt(s);
  s   =   getParameter( para_sound );
  if(s   !=   null)
  bit_sound   =   IntegerparseInt(s);
  m_nAppX   =   sizewidth;
  m_nAppY   =   sizeheight;
  m_centerX   =   m_nAppX   /   ;
  m_centerY   =   m_nAppY   /   ;
  m_mouseX   =   m_centerX;
  m_mouseY   =   m_centerY;
  resize(m_nAppX   m_nAppY);
  pixls   =   m_nAppX   *   m_nAppY;
  pixls   =   pixls      m_nAppX   *   ;
  pix   =   new   int[pixls];


  offImage   =   new   MemoryImageSource(m_nAppX   m_nAppY   pix      m_nAppX);
  offImagesetAnimated(true);
  dbImg   =   createImage(offImage);
  for(int   i   =   ;   i   <   pixls;   i++)
  pix[i]   =   xff;
  sound   =   getAudioClip(getDocumentBase   fireworkau );
  sound   =   getAudioClip(getDocumentBase   syuau );
  for(int   j   =   ;   j   <   bits;   j++)
  bit_f[j]   =   ;
  isInitialized   =   true;
  start;
  }//init   結束
  public   void   run
  {
  while(!isInitialized)
  try
  {
  Threadsleep(L);
  }
  catch(InterruptedException   interruptedexception)   {   }
  do
  {
  for(int   j   =   ;   j   <   pixls;   j++)
  {
  int   k   =   pix[j];
  int   l   =   pix[j   +   ];
  int   i   =   pix[j   +   m_nAppX];
  int   j   =   pix[j   +   m_nAppX   +   ];
  int   i   =   (k   &   xff)   > >   ;
  int   k   =   ((((l   &   xff)   > >   )      i)   *   ru   > >   )   +   i;
  i   =   (k   &   xff)   > >   ;
  int   l   =   ((((l   &   xff)   > >   )      i)   *   ru   > >   )   +   i;
  i   =   k   &   xff;
  int   i   =   (((l   &   xff)      i)   *   ru   > >   )   +   i;
  i   =   (i   &   xff)   > >   ;
  int   j   =   ((((j   &   xff)   > >   )      i)   *   ru   > >   )   +   i;
  i   =   (i   &   xff)   > >   ;
  int   k   =   ((((j   &   xff)   > >   )      i)   *   ru   > >   )   +   i;
  i   =   i   &   xff;
  int   l   =   (((j   &   xff)      i)   *   ru   > >   )   +   i;
  int   i   =   ((j      k)   *   rv   > >   )   +   k;
  int   j   =   ((k      l)   *   rv   > >   )   +   l;
  int   k   =   ((l      i)   *   rv   > >   )   +   i;
  pix[j]   =   i   < <      |   j   < <      |   k   |   xff;
  }//for   結束
  rend;
  offImagenewPixels(      m_nAppX   m_nAppY);
  try
  {
  Threadsleep(m_sleepTime);
  }
  catch(InterruptedException   interruptedexception)   {   }
  }//   do   結束
  while(true);
  }//run   結束



  public   void   update(Graphics   g)
  {
  paint(g);
  }
  public   void   paint(Graphics   g)
  {
  gdrawImage(dbImg         this);
  }
  public   void   start
  {
  if(isError)
  return;
  isRunning   =   true;
  if(runner   ==   null)
  {
  runner   =   new   Thread(this);
  runnerstart;
  }
  }
  public   void   stop
  {
  if(runner   !=   null)
  {
  runnerstop;
  runner   =   null;
  }
  }
  public   boolean   mouseMove(Event   event   int   i   int   j)
  {
  m_mouseX   =   i;
  m_mouseY   =   j;
  return   true;
  }
  public   boolean   mouseDown(Event   event   int   i   int   j)
  {
  m_mouseX   =   i;
  m_mouseY   =   j;
  int   k   =   (int)(randnextDouble   *   D);
  int   l   =   (int)(randnextDouble   *   D);
  int   i   =   (int)(randnextDouble   *   D);
  int   j   =   k   < <      |   l   < <      |   i   |   xff;
  int   k   =   ;
  for(int   l   =   ;   l   <   bits;   l++)
  {



  if(bit_f[l]   !=   )
  continue;
  bit_px[l]   =   m_mouseX;
  bit_py[l]   =   m_mouseY;
  double   d   =   randnextDouble   *   D;
  double   d   =   randnextDouble;
  bit_vx[l]   =   Mathsin(d)   *   d;
  bit_vy[l]   =   s(d)   *   d;
  bit_l[l]   =   (int)(randnextDouble   *   D)   +   ;
  bit_p[l]   =   (int)(randnextDouble   *   D);
  bit_c[l]   =   j;
  bit_sx[l]   =   m_mouseX;
  bit_sy[l]   =   m_nAppY      ;
  bit_f[l]   =   ;
  if(++k   ==   bit_max)
  break;
  }
  if(bit_sound   >   )
  soundplay;
  return   true;
  }//mouseDown   結束
  public   boolean   mouseExit(Event   event   int   i   int   j)
  {
  m_mouseX   =   i;
  m_mouseY   =   j;
  return   true;
  }
  void   rend
  {
  boolean   flag   =   false;
  boolean   flag   =   false;
  boolean   flag   =   false;
  for(int   k   =   ;   k   <   bits;   k++)
  switch(bit_f[k])
  {
  default:
  break;
  case   :   // \
  bit_vy[k]   +=   randnextDouble   /   D;
  bit_px[k]   +=   bit_vx[k];
  bit_py[k]   +=   bit_vy[k];
  bit_l[k];
  if(bit_l[k]   ==      ||   bit_px[k]   <   D   ||   bit_py[k]   <   D   ||   bit_px[k]   >   (double)m_nAppX   ||   bit_py[k]   >   (double)(m_nAppY      ))
  {
  bit_c[k]   =   xff;
  bit_f[k]   =   ;
  }
  else
  if(bit_p[k]   ==   )
  {
  if((int)(randnextDouble   *   D)   ==   )
  bit_set((int)bit_px[k]   (int)bit_py[k]   );
  }
  else
  {
  bit_set((int)bit_px[k]   (int)bit_py[k]   bit_c[k]);
  }
  break;
  case   :   // \
  bit_sy[k]   =   ;
  if((double)bit_sy[k]   <=   bit_py[k])
  {
  bit_f[k]   =   ;
  flag   =   true;
  }
  if((int)(randnextDouble   *   D)   ==   )
  {
  int   i   =   (int)(randnextDouble   *   D);
  int   j   =   (int)(randnextDouble   *   D);
  bit_set(bit_sx[k]   +   i   bit_sy[k]   +   j   );
  }
  break;
  }//switch   結束
  if(flag   &&   bit_sound   >   )
  soundplay;
  }//   rend   結束
  void   bit_set(int   i   int   j   int   k)
  {
  int   l   =   i   +   j   *   m_nAppX;
  pix[l]   =   k;
  }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26065.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.