Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private class PixelBoard extends JPanel implements MouseListener, MouseMotionListener {
- private boolean leftMouse = false;
- private HiddenOptions hiddenOptions;
- public Bucket(int startPixel, Color groupColor) {
- this.groupColor = groupColor;
- if (groupColor != getColor) {
- bucket = add(startPixel, getColor, bucket);
- getPixels.add(startPixel);
- }
- new Thread(this).start();
- }
- @Override
- public void run() {
- while (!getPixels.isEmpty()) {
- getPixels = move(getPixels, groupColor, getColor, bucket);
- }
- }
- public ArrayList<Integer> bucket() {
- return bucket;
- }
- private ArrayList<Integer> add(int p, Color getColor, ArrayList<Integer> bucket) {
- pixel[p].setColor(getColor);
- pixel[p].setToolTipText(pixel(p));
- container.repaint();
- bucket.add(p);
- return bucket;
- }
- private ArrayList<Integer> move(ArrayList<Integer> getPixels, Color groupColor, Color getColor, ArrayList<Integer> bucket) {
- ArrayList<Integer> pix = new ArrayList<Integer>();
- for (int p : getPixels) {
- for (int m : mov(p)) {
- if (!bucket.contains(m)) {
- if (pixel[m].getColor().equals(groupColor)) {
- bucket = add(m, getColor, bucket);
- pix.add(m);
- }
- }
- }
- }
- return pix;
- }
- private boolean[] pixelLocations(int index) {
- boolean topLeftCorner = index == 0, topRightCorner = index == pixels - 1;
- boolean bottomLeftCorner = index == lastPixel - pixels, bottomRightCorner = index == lastPixel - 1;
- boolean leftEdge = index % pixels == 0, rightEdge = (index + 1) % pixels == 0;
- boolean topEdge = index > 0 && index < pixels - 1, bottomEdge = index > lastPixel - pixels && index < lastPixel - 1;
- return new boolean[] {topLeftCorner, topRightCorner, bottomLeftCorner, bottomRightCorner, leftEdge, rightEdge, topEdge, bottomEdge};
- }
- private int[] move(int p) {
- int[] move = {p + 1, p - 1, p + pixels, p - pixels};
- boolean[] location = pixelLocations(p);
- if (location[0])
- move = move(move, new int[] {0, 2});
- else if (location[1])
- move = move(move, new int[] {1, 2});
- else if (location[2])
- move = move(move, new int[] {0, 3});
- else if (location[3])
- move = move(move, new int[] {1, 3});
- else if (location[4])
- move = move(move, new int[] {0, 2, 3});
- else if (location[5])
- move = move(move, new int[] {1, 2, 3});
- else if (location[6])
- move = move(move, new int[] {0, 1, 2});
- else if (location[7])
- move = move(move, new int[] {0, 1, 3});
- return move;
- }
- private int[] move(int[] move, int[] newMove) {
- int[] m = new int[newMove.length];
- for (int i = 0; i < m.length; i++)
- m[i] = move[newMove[i]];
- return m;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement