O código a seguir, implementa uma versão simplificada do algoritmo Jogo da Vida, a implementação original requeria matrizes e uma varredura na área ao redor de cada célula. Essa implementação mostra um vetor de células ao invés de uma matriz, em condições normal essa "linha" de células só iria ser atualizada, mas nesse caso, cada geração é mostrada, para que a diferença seja notada com mais facilidade.
O código do jogo da vida fora desenvolvido em sala, e foi somente adaptado para processar 32 valores, ao invés dos originais 8 valores; como pedido na atividade, se faz necessário guardar o numero de células em cada geração e gerar um gráfico de linhas baseado em tais valores (o código do gráfico de linhas foi reutilizado de uma aula anterior), a função Mostramundo (responsável por mostra a representação gráfica de cada geração) deixa de ser chamada, um novo vetor de inteiros vazio é criado para armazenar o numero de células das gerações, a função responsável por fazer isso acontecer será explanada abaixo.
A função estatisticas é criada para atribuir o numero de células vivas, um pequeno teste é feito para evitar redundâncias, quando o número de células vivas for igual a zero esse valor é atribuído ao próximo índice do vetor, no entanto o laço de repetição que atribui esses valores não é mais executado, pois dali em diante todos os valores serão zero, sendo o fim. Se a condição para executar o laço não for satisfeita significa que todos os valores já foram salvos, então o gráfico é desenhado na tela, junto com os valores que cada vértice representa.
Código-Fonte:
float vendaAn;
int NumeroGeracao=1;
int[] escheme = {};
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(60);
background(0);
}
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;
println(escheme.length);
if(escheme.length==0 || escheme[escheme.length-1]!=0){
for(int cont=0;cont<Mundoatual.length;cont++){
aux += Mundoatual[cont];
}
escheme = append(escheme,aux);
}else{
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));
}
}
}
}
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