CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

求火焰效果的Applet。

楼主nethunterx(猎人)2004-05-02 13:38:11 在 Java / J2SE / 基础类 提问

如题。 问题点数:100、回复次数:1Top

1 楼VVV_lucky(*太阳*)回复于 2004-05-02 13:47:19 得分 100

转帖  
  import   java.awt.*;  
  import   java.lang.*;  
   
  public   class   fire   extends   java.applet.Applet   implements   Runnable   {  
      boolean   first=true;  
      int   ROWS   =   50;  
      int   COLS   =   64;  
      int   HIDDEN   =   4;  
      int   ROWS_SEED   =   4;  
      int   ROWS_RESEED   =   48;  
      int   MAX_SEED   =   8;  
      int   PALETTE_SIZE   =   64;  
      int   COOLING_LIMIT   =   32;  
      int   COOLING_ROWS   =   42;  
      int   COOLING_FACTOR   =   2;  
      java.awt.Color   palette[]   =   new   java.awt.Color[PALETTE_SIZE];  
      byte   Buffer[],Buffer2[];  
      String   message,textfont;  
      int   textsize,textX,textY;  
      Color   textcolor;  
      Image   offScrImage=null;  
      Graphics   offScrGC;  
      Dimension   offScrSize;  
   
      Thread   kicker=null;  
   
      public   String   getAppletInfo()   {  
          return   "Fire   applet   by   Javier   Rodriguez   <jrodrig@data.net.mx>";  
      }  
   
      public   String[][]   getParameterInfo()   {  
          String[][]   info   =   {  
  {"coolingrows", "int", "number   of   rows   to   cool"},  
  {"coolingfactor", "int", "cooling   factor"},  
  {"coolinglimit", "int", "cooling   threshold"},  
  {"soundtrack", "url", "background   sound"},  
  {"text", "String", "message"},  
  {"textcolor", "String", "text   color"},  
  {"textfont", "String", "text   font"},  
  {"textsize", "int", "text   size"}  
          };  
          return   info;  
      }  
   
      public   void   init()   {  
          int   r,i;  
          String   aux;  
          //   Set   some   constants  
          COLS   =   size().width;  
          ROWS   =   size().height   +   HIDDEN;  
          //   Get   parameters  
          aux=getParameter("coolinglimit");  
          if((aux!=null)&&(aux.endsWith("%")))   {   aux=aux.substring(0,aux.length()-1);   }  
          COOLING_LIMIT   =   (aux==null)?(int)(PALETTE_SIZE*0.5):(int)(PALETTE_SIZE*(Integer.valueOf(aux).intValue())/100);  
          aux=getParameter("coolingrows");  
          if((aux!=null)&&(aux.endsWith("%")))   {   aux=aux.substring(0,aux.length()-1);   }  
          COOLING_ROWS   =   (aux==null)?(int)(ROWS*0.8):(int)(ROWS*(Integer.valueOf(aux).intValue())/100);  
          aux=getParameter("coolingfactor");  
          COOLING_FACTOR=   (aux==null)?2:(int)(Integer.valueOf(aux).intValue());  
          ROWS_RESEED   =   (int)(ROWS*0.96);  
          //   Get   text   parameters  
          aux   =   getParameter("text");  
          message=(aux==null)?"":aux;  
          aux   =   getParameter("textfont");  
          textfont=(aux==null)?"TimesRoman":aux;  
          aux=getParameter("textsize");  
          textsize=(aux==null)?18:(Integer.valueOf(aux).intValue());  
          aux=getParameter("textcolor");  
          textcolor=hexColor(aux,Color.white);  
          //   Setup   buffers;  
          Buffer   =   new   byte[COLS*ROWS];  
          Buffer2   =   new   byte[COLS*ROWS];  
          //   Setup   palette  
          for(i=0;   i<16;   ++i)  
              palette[i]=   new   Color(16*i,0,0);  
          for(i=0;   i<16;   ++i)  
              palette[16+i]   =   new   Color(255,   16*i,   0);  
          for(i=0;   i<32;   ++i)  
              palette[32+i]   =   new   Color(255,255,8*i);  
          //   Setup   text  
          Font   myFont=new   Font(textfont,   Font.BOLD,   textsize);  
          FontMetrics   myMetrix=getFontMetrics(myFont);  
          int   textH=myMetrix.getHeight();  
          int   textW=myMetrix.stringWidth(message);  
          textX=(int)((COLS-textW)/2);  
          textY=ROWS-HIDDEN-(int)((ROWS-HIDDEN-textH)/2)-myMetrix.getDescent();  
          setFont(myFont);  
          //   Seed   image  
          for(r=COLS*(ROWS-ROWS_SEED);   r<(ROWS*COLS);   ++r)   {  
              Buffer[r]=(byte)(Math.random()*(PALETTE_SIZE-1));  
          }  
      }  
   
  void   MainLoop()   {  
      int   r,a,i;  
      for(r=COLS+1;r<(COLS*(ROWS-1))-1;++r)   {  
          a=Buffer[r-COLS-1]+Buffer[r-COLS]+Buffer[r-COLS+1]+Buffer[r-1]+Buffer[r+1]+  
              Buffer[r+COLS-1]+Buffer[r+COLS]+Buffer[r+COLS+1];  
  //         a=(a>>3)%PALETTE_SIZE;  
          a=(a>>3);  
          //   Cool   flames  
          if(a<COOLING_LIMIT)   {  
              if((r<COOLING_ROWS*COLS)&&(a>COOLING_FACTOR))   a-=COOLING_FACTOR;  
          }  
          Buffer2[r]=(byte)(a);  
      }  
      //   Seed   at   base  
      for(r=COLS*(ROWS_RESEED);r<COLS*(ROWS);++r)   {  
          a=Buffer2[r];  
          Buffer2[r]=(byte)((a-(Math.random()*MAX_SEED))%(PALETTE_SIZE*1.1));  
          //Buffer2[r]=(byte)((a-(Math.random()*MAX_SEED))%PALETTE_SIZE);  
      }  
      //   Scroll   image  
      for(i=0;i<COLS*(ROWS-1);++i)    
          Buffer[i]=Buffer2[i+COLS];  
  }  
   
      public   final   synchronized   void   update(Graphics   g)   {  
          //   Setup   off-screen   buffer  
          Dimension   d=size();  
          if((offScrImage==null)||(d.width!=offScrSize.width)||(d.height!=offScrSize.height))   {  
              offScrImage=createImage(d.width,d.height);  
              offScrSize=d;  
              offScrGC=offScrImage.getGraphics();  
              offScrGC.setFont(getFont());  
          }  
          if   (offScrGC!=null)   {  
              offScrGC.fillRect(0,0,d.width,d.height);  
              paint(offScrGC);  
              g.drawImage(offScrImage,0,0,null);  
          }  
      }  
   
  public   void   paint(Graphics   g)   {  
          int   a;  
          Color   c;  
          //   Do   main   loop  
          MainLoop();  
          //   Copy   buffer   to   off-screen   buffer  
          for(int   y=0;y<(ROWS-HIDDEN);++y)  
              for(int   x=0;x<COLS;++x)   {  
                  a=Buffer[y*COLS+x];  
                  a=a<0?-a:a;   //   Patch   nasty   bug    
                  a=a<(PALETTE_SIZE-1)?(a):(PALETTE_SIZE-1);  
                  c=palette[a];  
                  try   {  
                      offScrGC.setColor(c);  
                      offScrGC.drawLine(x,y,x+1,y);  
                  }   catch   (Exception   e)   {   }  
              }  
          try   {  
          //   Write   text  
              offScrGC.setColor(textcolor);  
              offScrGC.drawString(message,textX,textY);  
          //   Paint   off-screen   buffer  
              g.drawImage(offScrImage,0,0,this);  
          }   catch   (Exception   e)   {   }  
   
      }  
   
      public   void   start()   {  
          if   (kicker==null)   {  
              kicker=new   Thread(this);  
  //             kicker.setPriority(kicker.MAX_PRIORITY);  
              kicker.start();  
          }  
      }  
   
      public   void   stop()   {  
          kicker=null;  
      }  
   
      public   void   run()   {  
          while(kicker!=null)   {  
              repaint();  
              try   {kicker.sleep(15);}   catch   (InterruptedException   e)   {}  
          }  
      }  
   
      //   Place   fire   bubble   on   click  
      public   boolean   mouseDown(java.awt.Event   evt,   int   x,   int   y)   {  
          int   i;  
          i=x+y*COLS;    
          if(i>81)   {  
              Buffer[i]=(byte)255;  
              Buffer[i-COLS]=(byte)255;  
              Buffer[i+COLS]=(byte)255;  
              Buffer[i-1]=(byte)255;  
              Buffer[i+1]=(byte)255;  
          }  
          return   true;  
      }  
   
      public   Color   hexColor(String   hex,   Color   std)   {  
          try   {  
              Integer   rgb=new   Integer(0);  
              hex.replace('#','   ');  
              hex.trim();  
              rgb=Integer.valueOf(hex,16);  
              return   new   Color(rgb.intValue());  
          }   catch   (Exception   e)   {  
              return   std;  
          }  
      }  
  }  
  Top

相关问题

  • XP看不到java applet的效果呀
  • jb5中如何启动tomcat看applet的运行效果?
  • 请问什么同样效果的flash和applet的执行速度却不一样?
  • 为啥applet不能在包含他的html,而appletviewer他的html文件就能看到效果呢?
  • 众人拾柴火焰高---征集case工具下载地址
  • “”“零度火焰_2002”“”兄,进来 。帮帮我!!!
  • 急!请高手指教! 我的applet从html里取得的PARAM可以用于显示,可为什么用作判断条件却不起效果??
  • 请问:我想在applet中处理动画图像,能看见水在动的效果,谁有好的建议能给谈谈?来者有分!!!
  • 请教高人,为什么我的PC看APPLET效果时,页面总是跳动,而且鼠标也在闪烁?求解决方案!在线等待,谢谢~!
  • 闪动效果

关键词

  • null
  • aux
  • cool
  • palette
  • applet
  • hex
  • rows
  • buffer
  • awt
  • rgb

得分解答快速导航

  • 帖主:nethunterx
  • VVV_lucky

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo