import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class FloodFill extends JFrame{ private int myPixel = 25; private int loops = 1; public FloodFill() { KeyListener listener = new MyKeyListener(); addKeyListener(listener); setFocusable(true); } private void drawGrid(Graphics g){ g.setColor(Color.white); for(int i=0; i < 500; i+=myPixel){ g.drawLine(0, i, 500, i); g.drawLine(i, 0, i, 500); } } private Color[][] fill(int x, int y, int loops){ Color[][] toFill = new Color[20][20]; toFill = floodFill(x, y, toFill, loops); return toFill; } private Color[][] floodFill(int x, int y, Color[][] toFill, int loops){ if(loops <= 0){ return toFill; } if(x < 3 || x >= 17 || y < 3 || y >= 17){ return toFill; } if(toFill[x][y] != null && (!toFill[x][y].equals(Color.red))){ return toFill; } else{ toFill[x][y] = Color.red; toFill = floodFill(x+1, y, toFill, loops-1); toFill = floodFill(x, y+1, toFill, loops-1); toFill = floodFill(x-1, y, toFill, loops-1); toFill = floodFill(x, y-1, toFill, loops-1); } return toFill; } private void drawFill(Graphics g, Color[][] toFill){ for(int i=0; i < toFill.length; i++){ for(int j=0; j< toFill[i].length; j++){ g.setColor(toFill[i][j]); g.fillRect(i*myPixel, j*myPixel, myPixel, myPixel); g.setColor(Color.black); } } } public void paint(Graphics g){ Color[][] toFill = fill(10,10,loops); drawFill(g, toFill); drawGrid(g); repaint(); } public static void main(String[] args){ FloodFill frame = new FloodFill(); frame.setTitle("Flood Fill"); frame.setSize(500,500); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public class MyKeyListener implements KeyListener{ @Override public void keyPressed(KeyEvent arg0) { } @Override public void keyReleased(KeyEvent arg0) { if(arg0.getKeyCode() == 39){ loops++; } if(arg0.getKeyCode() == 37){ loops--; } System.out.println(loops); } @Override public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub } } }