欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于Processing实现《黑客帝国》代码雨

程序员文章站 2022-04-07 16:24:57
...

他来了,他来了,初中的时候看了《黑客帝国》,简直太震撼了,从拍摄的角度来说,里面的特效领先现今国内电影特效几条街,而且还是20年轻的事情了。里面最让我印象深刻的就是代码雨特效,记忆犹新啊,现在从事程序员有很大的原因是看了代码雨,感觉代码真的是无所不能。哈哈哈!!
电影特效:
基于Processing实现《黑客帝国》代码雨
基于Processing实现《黑客帝国》代码雨
processing 特效:
基于Processing实现《黑客帝国》代码雨
上源码:

static final int C_MAX_LIT=0xEE;
static final int C_NORMAL_LIT=0x66;
static final int C_BASIC_LIT=0x33;
static final int C_GRADIENT_LIT=0x11;

int pbRowCount=0;
int pbCharSetCount=0;
float pbTextGrid=0f;

String[] pbCharSet;
EcSingleLine[] pbLines;

void setup(){  
  //[ use this instead ]::fullScreen(P2D);
  size(500,500);
  frameRate(16);noStroke();
  textAlign(LEFT,TOP);
  //[ change size if necessary]::textSize(22);
  
  pbTextGrid=textAscent()+textDescent();
  pbRowCount=ceil(height/pbTextGrid);
  
  int lpColumnCount=ceil(width/pbTextGrid);
  pbLines=new EcSingleLine[lpColumnCount];
  for(int i=0,s=pbLines.length;i<s;i++){
    pbLines[i]=new EcSingleLine();
    pbLines[i].cmX=i*ceil(pbTextGrid);
    pbLines[i].cmDripHead=ceil(random(1,pbRowCount));
  }//..~
  
  pbCharSetCount=0x79-0x21;//..see the ascii table!!
  pbCharSet=new String[pbCharSetCount];
  for(int i=0,s=pbCharSet.length;i<s;i++){
    pbCharSet[i]=new StringBuilder().append((char)(i+0x21)).toString();
  } 
}

void draw(){
  background(0);
  
  for(EcSingleLine it:pbLines){
    it.ccUpdate();
    if(random(1f)<0.2){
      it.ccDrip();
    }
  } 
}

void keyPressed(){switch(key){
  case 'f':println(frameRate);break;
  case 'q':exit();break;
  default:break;
}}

class EcSingleLine{  
  int cmX=0;
  int cmDripHead=0;
  boolean cmDripping;
  
  void ccUpdate(){
    cmDripping=cmDripHead<(pbRowCount*2);
    cmDripHead+=cmDripping?1:0;
    
    int lpGreen;
    for(int i=0;i<pbRowCount;i++){
      if(i<cmDripHead){
        lpGreen=C_MAX_LIT-(C_GRADIENT_LIT*(cmDripHead-i));
        lpGreen=constrain(lpGreen,C_NORMAL_LIT,C_MAX_LIT);
        fill(C_BASIC_LIT,lpGreen,C_BASIC_LIT);
      }else{
        fill(C_BASIC_LIT,C_NORMAL_LIT,C_BASIC_LIT);
      }//..?
      
      text(
        pbCharSet[ceil(random(0,pbCharSetCount-1))],
        cmX,
        i*pbTextGrid
      );      
    }
  } 
  void ccDrip(){if(!cmDripping){cmDripHead=0;}}
}
相关标签: Processing