public double[][][] observeStructure(int a) {
		double[][][] state = new double[rView][cView][3]; // [availability,
															// color, agentScore
															// or 0]
		int x = aStats[a].x;
		int y = aStats[a].y;
		int leftx = x - cView / 2;
		int lefty = y - rView / 2; // correct round?
		for (int i = 0; i < rView; i++) {
			for (int j = 0; j < cView; j++) {
				int xval = leftx + i;
				int yval = lefty + j;
				if (xval >= gameSize || yval >= gameSize || xval < 0
						|| yval < 0) {
					state[i][j][0] = 0; // 0 means its unavailable
					state[i][j][1] = 0;
					state[i][j][2] = 0;
				} else {
					state[i][j][0] = e[xval][yval].available ? 1 : 0;
					state[i][j][1] = e[xval][yval].Color ? 1 : 0;
					state[i][j][2] = e[xval][yval].agentScore
							/ (gameSize * gameSize);
				}
				int distance = Math.abs(x - xval) + Math.abs(y - yval);
				if (distance > cView / 2)
					state[i][j] = null;
			}
		}
		// set corners to null
		return state;
	}