Hello guys,
I am new to processing and I’ve been recently trying to learn from some youtube tutorials.
However, I encountered a problem and hope someone could help me to fix it.
This is the link of the video I watched: https://www.youtube.com/watch?v=MKMJz8QYmAU
So it’s a CA (Game of Live) example done by processing, and I followed the steps properly. However, it wasn’t working after those lines:
if( grid[(x+cols-1)%cols] [(y+rows-1)&rows].type ==1 ) count ++;
if(grid[(x+cols)%cols][(y+rows-1)&rows].type ==1) count ++;
if(grid[(x+cols+1)%cols][(y+rows-1)&rows].type ==1) count ++;
if(grid[(x+cols-1)%cols][(y+rows)&rows].type ==1) count ++;
if(grid[(x+cols+1)%cols][(y+rows)&rows].type ==1) count ++;
if(grid[(x+cols-1)%cols][(y+rows+1)&rows].type ==1) count ++;
if(grid[(x+cols)%cols][(y+rows+1)&rows].type ==1) count ++;
if(grid[(x+cols+1)%cols][(y+rows+1)&rows].type ==1) count ++;
And it gave me an error message: ArrayIndexOutOfBoundsException: 100.
Strangely, it looks fine and works properly in his computer.
Here is my code:
import peasy.*;
import toxi.geom.*;
PeasyCam cam;
int cols = 100;
int rows = 100;
CA grid[][] = new CA[cols][rows];
void setup(){
size(800,600,P3D);
cam = new PeasyCam(this,100);
//Initilise the grids
for(int i=0; i<cols; i++){
for(int j=0; j<rows; j++){
Vec3D ptLoc = new Vec3D (i*10, j*10,0);
grid[i][j] = new CA(ptLoc,i,j);
}
}
}
void draw(){
background(0);
stroke(255);
fill(255,20);
//rect(0,0,600,600);
for(int i=0; i<cols; i++){
for(int j=0; j<rows; j++){
grid[i][j].run();
}
}
for(int i=0; i<cols; i++){
for(int j=0; j<rows; j++){
grid[i][j].update();
}
}
}
class CA{
Vec3D loc; //a point
int x;
int y;
int type =0;
int futType = 0;
CA(Vec3D _loc, int _x,int _y){
loc = _loc;
x = _x;
y = _y;
float rnd = random(100);
if(rnd <50){
type = 1;
}
}
void run(){
display();
evalN();
}
void update(){
type = futType;
}
void evalN(){
int count = 0;
if( grid[(x+cols-1)%cols] [(y+rows-1)&rows].type ==1 ) count ++;
if(grid[(x+cols)%cols][(y+rows-1)&rows].type ==1) count ++;
if(grid[(x+cols+1)%cols][(y+rows-1)&rows].type ==1) count ++;
if(grid[(x+cols-1)%cols][(y+rows)&rows].type ==1) count ++;
if(grid[(x+cols+1)%cols][(y+rows)&rows].type ==1) count ++;
if(grid[(x+cols-1)%cols][(y+rows+1)&rows].type ==1) count ++;
if(grid[(x+cols)%cols][(y+rows+1)&rows].type ==1) count ++;
if(grid[(x+cols+1)%cols][(y+rows+1)&rows].type ==1) count ++;
if(type ==1 && count<2){
futType = 0;
}
if(type ==1 && count <=3 && count >=2){
futType =1;
}
if(type ==1 && count>3){
futType =0;
}
if(type ==0 && count==3){
futType =1;
}
}
void display(){
if(type == 1){
stroke(255);
strokeWeight(2);
point(loc.x,loc.y);
}
}
}
Really appreciate it!