segunda-feira, 15 de junho de 2015

Exercício 21: Jogo da Vida - Parte II

Esse exercício é um aprimoramento do exercício anterior, mostrando outros gráficos representando agora o numero de nascimentos e mortes das gerações.

O gráfico em pizza mostra a porcentagem de mortes e nascimentos da geração corrente, usando apenas uma pequena relação que resulta em um ângulo que e usado para desenhar a "fatia" correspondente.

O gráfico de barras é apenas uma adaptação do gráfico de linhas, a adaptação feita no código anterior foi salvar as motes de cada geração.

Código-Fonte:

float vendaAn;

int NumeroGeracao=1;
int[] escheme = {
};
int[] escheme2 = {
};
int[] Mundoatual = {
  0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1
};
int[] MundoNovo = new int[32];
void setup() {


  size(1280, 720);
  frameRate(1);
  background(0);



  //Mostramundo();
}

int CruzaCelulas(int Posicao) {
  int NumeroCelulas = Mundoatual[Posicao-1] + Mundoatual[Posicao] + Mundoatual[Posicao+1];
  return NumeroCelulas;
}

void Mostramundo() {
  for (int i=0; i<Mundoatual.length; i++) {
    if (Mundoatual[i]==1) {
      ellipse(i*20, NumeroGeracao *30, 20, 20);
    }
  }
}

void estatisticas() {
  int aux=0;
  int aux2=0;
  println(escheme.length);
  // if(escheme.length==0 || escheme[escheme.length-1]!=0){
  for (int cont=0; cont<Mundoatual.length; cont++) {
    aux += Mundoatual[cont];
    if (Mundoatual[cont]==0) {
      aux2++;
    //} else {
    //  aux++;
    }
  }

  //escheme = append(escheme,aux);
  //escheme2 = append(escheme2,aux2);
  // }else{

//ellipse(width/2, height/2, 40, 40);
  println((aux2*360)/32);
  //fill(0,0,255);
  //arc(width/2,height/2,80,80, radians((aux2*360)/32), radians((aux*360)/32));
  background(0);
 
 
 
  fill(50,50,220);
  rect(50,50,10,10); text("Nascimentos",65,60);
  text("Nascimentos: "+(aux*100)/32+"%",50,95);
  arc(width/2,height/2,160,160, radians((aux2*360)/32), radians(360));
  fill(220,50,50);
  rect(50,65,10,10); text("Mortes",65,75);
  text("Mortes: "+(aux2*100)/32+"%",50,110);
  arc(width/2,height/2,160,160, 0, radians((aux2*360)/32));
 
  // }

  //Grafico em barras

  /* 
  
   if(escheme.length==0 || escheme[escheme.length-1]!=0){
   for(int cont=0;cont<Mundoatual.length;cont++){
   aux += Mundoatual[cont];
   if(Mundoatual[cont]==0){
   aux2++;
   }
   }
   escheme = append(escheme,aux);
   escheme2 = append(escheme2,aux2);
   }else{
  
   text("Nascimentos:",50,50);
   for(int cont=0;cont<escheme.length;cont++){
   stroke(255);
   if(cont<escheme.length-1){
   text(escheme[cont],(cont+1)*50-6,(height - escheme[cont]*10-6));
   rect((cont+1)*50-6,(height - escheme[cont]*10-6),20,height-(height - escheme[cont]*10-6));
   //line((cont+1)*150-6,(height - escheme[cont]*50-6),(cont+2)*150-6,(height - escheme[cont+1]*50-6));
   }else{
   text(escheme[cont],(cont+1)*50-6,(height - escheme[cont]*10-6));
   }
   }
  
   line(width/2,0,width/2,height);
  
   text("Mortes:",width/2+50,50);
   for(int cont=0;cont<escheme2.length;cont++){
   stroke(255);
  
   //  if(cont<escheme2.length-1){
   text(escheme2[cont],width/2+(cont+1)*50-6,(height - escheme2[cont]*10-6));
   rect(width/2+(cont+1)*50-6,(height - escheme2[cont]*10-6),20,height-(height - escheme2[cont]*10-6));
   //line((cont+1)*150-6,(height - escheme[cont]*50-6),(cont+2)*150-6,(height - escheme[cont+1]*50-6));
   // }else{
   // text(escheme2[cont],width/2+(cont+1)*50-6,(height - escheme2[cont]*10-6));
   // }
   }
  
   }
  
   */


  //Grafico em linhas
  /*
   if(escheme.length==0 || escheme[escheme.length-1]!=0){
   for(int cont=0;cont<escheme.length;cont++){
   stroke(255)
   point((cont+1)*150-6,(height - escheme[cont]*50-6));
   if(cont<escheme.length-1){
   text(escheme[cont],(cont+1)*150-6,(height - escheme[cont]*50-6));
   line((cont+1)*150-6,(height - escheme[cont]*50-6),(cont+2)*150-6,(height - escheme[cont+1]*50-6));
   }else{
   text(escheme[cont],(cont+1)*150-6,(height - escheme[cont]*50-6));
   }
   }
   */

  /*
  for(int cont=0;cont<escheme.length;cont++){
   println((cont+1)+"ª Geração: "+escheme[cont]);
   if(escheme[cont]==0){
   noLoop();
   }
   }
   */
}


void draw() {
  int NumeroCelulas = 0;
  // Mostramundo();

  estatisticas();

  //println("Tamanho atual: "+Mundoatual.length);
  for (int o=1; o<Mundoatual.length-1; o++) {
    NumeroCelulas = CruzaCelulas(o);
    if (NumeroCelulas==2) {
      MundoNovo[o]=1;
    } else {
      MundoNovo[o]=0;
    }
  }
  arrayCopy(MundoNovo, Mundoatual, 32);
  NumeroGeracao++;
}

Nenhum comentário:

Postar um comentário