a evolução da quantidade de células a cada geração
código:
primeiro estabelece-se a variável para guardar o número de gerações
e dois vetores para guardar os dois mundos.
int numeroGeracao = 1; int[] mundoAtual = new int[34]; int[] mundoNovo = new int[34];
dentro do setup()
é colocado o frameRate que a animação irá acontecer, o tamanho da tela, a cor do background
e uma condicional que faz com que o vetor mundoAtual receba 1 ou 2 como valor.
void setup() { frameRate(1); size(800, 400); background(255); for(int i = 1; i < 32; i++) { mundoAtual[i] = (int)random(2); //println(mundoAtual[i]); } }
dentro do draw()
uma variável para armazenar o número de células
a função mostraMundo() é chamada.
uma condicional que estabelece que o numero de celulas é igual a função cruzaCelulas recebendo o contador i como parâmetro.
se o número de celulas for 2 uma nova geração é criada, se for 1, a geração morre.
usa-se a função Array
copy para copiar o vetor e incrementa-se o número de gerações.
void draw() { int numeroCelulas = 0; mostraMundo(); for(int i = 1; i < 32; i++) { numeroCelulas = cruzaCelulas(i); if(numeroCelulas == 2) mundoNovo[i] = 1; else mundoNovo[i] = 0; } arrayCopy(mundoNovo, mundoAtual, 34); numeroGeracao++; }
função mostraMundo()
nessa função tem uma condicional para checar se a geração está viva ou morta.
e cria-se uma variável vivos e desenha-se na tela o gráfico de linhas com as gerações vivas e mortas.
void mostraMundo() { int cont = 0; for(int i = 1; i < 32; i++) { if (mundoAtual[i] == 1) cont++; //ellipse(i * 20, numeroGeracao * 30, 20, 20); } float vivos = (float)cont/32 * height; float mortos = (float)(32-cont)/32 * height; println(cont); strokeWeight(5); stroke(0,255,0); line(numeroGeracao*30 , height - vivos, numeroGeracao*30, height); stroke(255,255,0); line(numeroGeracao*30 + 11, height - mortos, numeroGeracao*30 + 11, height); }
a função CruzaCelulas() faz a checagem no mundoAtual pra ver se a geração irá viver ou morrer.
int cruzaCelulas(int posicao) { int numeroCelulas = mundoAtual[posicao - 1] + mundoAtual[posicao] + mundoAtual[posicao + 1]; return numeroCelulas; }
Resultado:


Nenhum comentário:
Postar um comentário