int g_size = 10; color background_color = color (80, 80, 220); color runner = color (255, 50, 50); color visited_color = color(220, 240, 240); color done_color = color (100, 160, 250); int c_size; Cell[][] cell; ArrayList done = new ArrayList(); ArrayList visit = new ArrayList(); Cell run_cell; void setup() { size(600, 600); frameRate(20); smooth(4); strokeCap(ROUND); c_size = max(width/g_size, height/g_size); cell = new Cell[g_size][g_size]; for (int i = 0; i < g_size; i++) { for (int j = 0; j < g_size; j++) { cell[i][j] = new Cell(i, j); } } for (int i = 0; i < g_size; i++) { for (int j = 0; j < g_size; j++) { cell[i][j].add_neighbor(); } } run_cell = cell[0][0]; visit.add(run_cell); } void draw() { background(background_color); for (int i = 0; i < g_size; i++) { for (int j = 0; j < g_size; j++) { cell[i][j].draw_cell(); cell[i][j].draw_wall(); } } if (visit.size() < g_size*g_size) { if (run_cell.check_sides()) { Cell chosen = run_cell.pick_neighbor(); done.add(run_cell); run_cell.stacked = true; if (chosen.i - run_cell.i == 1) { run_cell.wall[1] = false; chosen.wall[3] = false; } else if (chosen.i - run_cell.i == -1) { run_cell.wall[3] = false; chosen.wall[1] = false; } else if (chosen.j - run_cell.j == 1) { run_cell.wall[2] = false; chosen.wall[0] = false; } else { run_cell.wall[0] = false; chosen.wall[2] = false; } run_cell.current = false; run_cell = chosen; run_cell.current = true; run_cell.visited = true; } else if (done.size()>0) { run_cell.current = false; run_cell = done.remove(done.size()-1); run_cell.stacked = false; run_cell.current = true; } } } class Cell { ArrayList neighbor; boolean visited, stacked, current; boolean[] wall; int i, j; Cell(int _i, int _j) { i = _i; j = _j; wall = new boolean[]{true,true,true,true}; } Cell pick_neighbor() { ArrayList unvisited = new ArrayList(); for(int i = 0; i < neighbor.size(); i++){ Cell nb = neighbor.get(i); if(nb.visited == false) unvisited.add(nb); } return unvisited.get(floor(random(unvisited.size()))); } void add_neighbor() { neighbor = new ArrayList(); if(i>0){neighbor.add(cell[i-1][j]);} if(i0){neighbor.add(cell[i][j-1]);} if(j