Showing posts with label Games. Show all posts
Sub Killer Game With Score
Friday, 19 June 2015
Posted by Unknown
Tag :
Games,
Simple Application Program
package vijay;
/**
*
* @author VIJAY
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SubKillerWithScore extends JPanel
/**
*
* @author VIJAY
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SubKillerWithScore extends JPanel
{
public static void main(String[] args)
public static void main(String[] args)
{
JFrame window = new JFrame("Sub Killer Game");
SubKillerWithScore content = new SubKillerWithScore();
window.setContentPane(content);
window.setSize(600, 480);
window.setLocation(100,100);
window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
window.setResizable(false); // User can't change the window's size.
window.setVisible(true);
}
//------------------------------------------------------------------------
private Timer timer; // Timer that drives the animation.
private int width, height;
private Boat boat; // The boat, bomb, and sub objects are defined
private Bomb bomb; // by nested classes Boat, Bomb, and Submarine,
private Submarine sub; // which are defined later in this class.
private int hits; // The number of times the user has hit the sub.
private int misses; // The number of times the user has missed the sub.
private Font infoFont = new Font("Monospaced", Font.PLAIN, 16);
// A font for displaying the numbers of hits and misses.
JFrame window = new JFrame("Sub Killer Game");
SubKillerWithScore content = new SubKillerWithScore();
window.setContentPane(content);
window.setSize(600, 480);
window.setLocation(100,100);
window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
window.setResizable(false); // User can't change the window's size.
window.setVisible(true);
}
//------------------------------------------------------------------------
private Timer timer; // Timer that drives the animation.
private int width, height;
private Boat boat; // The boat, bomb, and sub objects are defined
private Bomb bomb; // by nested classes Boat, Bomb, and Submarine,
private Submarine sub; // which are defined later in this class.
private int hits; // The number of times the user has hit the sub.
private int misses; // The number of times the user has missed the sub.
private Font infoFont = new Font("Monospaced", Font.PLAIN, 16);
// A font for displaying the numbers of hits and misses.
public SubKillerWithScore()
{
setBackground( new Color(0,200,0) );
ActionListener action = new ActionListener()
setBackground( new Color(0,200,0) );
ActionListener action = new ActionListener()
{
// Defines the action taken each time the timer fires.
public void actionPerformed(ActionEvent evt)
// Defines the action taken each time the timer fires.
public void actionPerformed(ActionEvent evt)
{
if (boat != null)
if (boat != null)
{
boat.updateForNewFrame();
bomb.updateForNewFrame();
sub.updateForNewFrame();
}
repaint();
}
};
timer = new Timer( 30, action ); // Fires every 30 milliseconds.
addMouseListener( new MouseAdapter()
boat.updateForNewFrame();
bomb.updateForNewFrame();
sub.updateForNewFrame();
}
repaint();
}
};
timer = new Timer( 30, action ); // Fires every 30 milliseconds.
addMouseListener( new MouseAdapter()
{
// The mouse listener simply requests focus when the user
// clicks the panel.
public void mousePressed(MouseEvent evt)
// The mouse listener simply requests focus when the user
// clicks the panel.
public void mousePressed(MouseEvent evt)
{
requestFocus();
}
} );
addFocusListener( new FocusListener()
requestFocus();
}
} );
addFocusListener( new FocusListener()
{
public void focusGained(FocusEvent evt)
public void focusGained(FocusEvent evt)
{
timer.start();
repaint();
}
public void focusLost(FocusEvent evt)
timer.start();
repaint();
}
public void focusLost(FocusEvent evt)
{
timer.stop();
repaint();
}
} );
addKeyListener( new KeyAdapter()
timer.stop();
repaint();
}
} );
addKeyListener( new KeyAdapter()
{
public void keyPressed(KeyEvent evt)
public void keyPressed(KeyEvent evt)
{
int code = evt.getKeyCode();
if (code == KeyEvent.VK_LEFT)
int code = evt.getKeyCode();
if (code == KeyEvent.VK_LEFT)
{
boat.centerX -= 15;
}
else if (code == KeyEvent.VK_RIGHT)
boat.centerX -= 15;
}
else if (code == KeyEvent.VK_RIGHT)
{
boat.centerX += 15;
}
else if (code == KeyEvent.VK_DOWN)
boat.centerX += 15;
}
else if (code == KeyEvent.VK_DOWN)
{
if ( bomb.isFalling == false )
bomb.isFalling = true;
}
}
} );
} // end constructor
public void paintComponent(Graphics g) {
super.paintComponent(g); // Fill panel with background color, green.
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (boat == null) {
width = getWidth();
height = getHeight();
boat = new Boat();
sub = new Submarine();
bomb = new Bomb();
}
if (hasFocus())
g.setColor(Color.CYAN);
else {
g.setColor(Color.BLACK);
g.drawString("CLICK TO ACTIVATE", 20, height - 10);
g.setColor(Color.GRAY);
}
g.drawRect(0,0,width-1,height-1); // Draw a 3-pixel border.
g.drawRect(1,1,width-3,height-3);
g.drawRect(2,2,width-5,height-5);
boat.draw(g);
sub.draw(g);
bomb.draw(g);
g.setFont(infoFont);
g.setColor(Color.BLACK);
g.drawString("Number of hits: " + hits, 15, 24);
g.drawString("Number of misses: " + misses, 15, 45);
} // end paintComponent()
if ( bomb.isFalling == false )
bomb.isFalling = true;
}
}
} );
} // end constructor
public void paintComponent(Graphics g) {
super.paintComponent(g); // Fill panel with background color, green.
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (boat == null) {
width = getWidth();
height = getHeight();
boat = new Boat();
sub = new Submarine();
bomb = new Bomb();
}
if (hasFocus())
g.setColor(Color.CYAN);
else {
g.setColor(Color.BLACK);
g.drawString("CLICK TO ACTIVATE", 20, height - 10);
g.setColor(Color.GRAY);
}
g.drawRect(0,0,width-1,height-1); // Draw a 3-pixel border.
g.drawRect(1,1,width-3,height-3);
g.drawRect(2,2,width-5,height-5);
boat.draw(g);
sub.draw(g);
bomb.draw(g);
g.setFont(infoFont);
g.setColor(Color.BLACK);
g.drawString("Number of hits: " + hits, 15, 24);
g.drawString("Number of misses: " + misses, 15, 45);
} // end paintComponent()
private class Boat {
int centerX, centerY; // Current position of the center of the boat.
Boat() { // Constructor centers the boat horizontally, 80 pixels from top.
centerX = width/2;
centerY = 80;
}
void updateForNewFrame() { // Makes sure boat has not moved off screen.
if (centerX < 0)
centerX = 0;
else if (centerX > width)
centerX = width;
}
void draw(Graphics g) { // Draws the boat at its current location.
g.setColor(Color.BLUE);
g.fillRoundRect(centerX - 40, centerY - 20, 80, 40, 20, 20);
}
} // end nested class Boat
int centerX, centerY; // Current position of the center of the boat.
Boat() { // Constructor centers the boat horizontally, 80 pixels from top.
centerX = width/2;
centerY = 80;
}
void updateForNewFrame() { // Makes sure boat has not moved off screen.
if (centerX < 0)
centerX = 0;
else if (centerX > width)
centerX = width;
}
void draw(Graphics g) { // Draws the boat at its current location.
g.setColor(Color.BLUE);
g.fillRoundRect(centerX - 40, centerY - 20, 80, 40, 20, 20);
}
} // end nested class Boat
private class Bomb {
int centerX, centerY; // Current position of the center of the bomb.
boolean isFalling;
Bomb() { // Constructor creates a bomb that is initially attached to boat.
isFalling = false;
}
void updateForNewFrame() { // If bomb is falling, take appropriate action.
if (isFalling) {
if (centerY > height) {
isFalling = false;
misses++; // USER HAS MISSED THE SUB
}
else if (Math.abs(centerX - sub.centerX) <= 36 &&
Math.abs(centerY - sub.centerY) <= 21) {
sub.isExploding = true;
sub.explosionFrameNumber = 1;
isFalling = false; // Bomb reappears on the boat.
hits++; // USER HAS HIT THE SUB
}
else {
centerY += 10;
}
}
}
void draw(Graphics g) { // Draw the bomb.
if ( ! isFalling ) {
centerX = boat.centerX;
centerY = boat.centerY + 23;
}
g.setColor(Color.RED);
g.fillOval(centerX - 8, centerY - 8, 16, 16);
}
} // end nested class Bomb
private class Submarine {
int centerX, centerY; // Current position of the center of the sub.
boolean isMovingLeft; // Tells whether the sub is moving left or right
boolean isExploding; // Set to true when the sub is hit by the bomb.
int explosionFrameNumber;
Submarine() { // Create the sub at a random location 40 pixels from bottom.
centerX = (int)(width*Math.random());
centerY = height - 40;
isExploding = false;
isMovingLeft = (Math.random() < 0.5);
}
void updateForNewFrame() { // Move sub or increase explosionFrameNumber.
if (isExploding) {
explosionFrameNumber++;
if (explosionFrameNumber == 15) {
centerX = (int)(width*Math.random());
centerY = height - 40;
isExploding = false;
isMovingLeft = (Math.random() < 0.5);
}
}
else { // Move the sub.
if (Math.random() < 0.04) {
isMovingLeft = ! isMovingLeft;
}
if (isMovingLeft) {
centerX -= 5;
if (centerX <= 0) {
centerX = 0;
isMovingLeft = false;
}
}
else {
centerX += 5;
if (centerX > width) {
centerX = width;
isMovingLeft = true;
}
}
}
}
void draw(Graphics g) { // Draw sub and, if it is exploding, the explosion.
g.setColor(Color.BLACK);
g.fillOval(centerX - 30, centerY - 15, 60, 30);
if (isExploding) {
g.setColor(Color.YELLOW);
g.fillOval(centerX - 4*explosionFrameNumber,
centerY - 2*explosionFrameNumber,
8*explosionFrameNumber,
4*explosionFrameNumber);
g.setColor(Color.RED);
g.fillOval(centerX - 2*explosionFrameNumber,
centerY - explosionFrameNumber/2,
4*explosionFrameNumber,
explosionFrameNumber);
}
}
} // end nested class Submarine
} // end class SubKiller
Output:
import java.util.Scanner;
public class GuessingGame {
public static void main(String[] args) {
System.out.println("Let's play a game. I'll pick a number between");
System.out.println("1 and 100, and you try to guess it.");
playGame();
System.out.println("Thanks for playing. Goodbye.");
} // end of main()
static void playGame() {
Scanner input = new Scanner( System.in );
int computersNumber; // A random number picked by the computer.
int usersGuess; // A number entered by user as a guess.
int guessCount; // Number of guesses the user has made.
computersNumber = (int)(100 * Math.random()) + 1;
guessCount = 0;
System.out.println();
System.out.print("What is your first guess? ");
while (true) {
usersGuess = input.nextInt(); // Get the user's guess.
guessCount++;
if (usersGuess == computersNumber) {
System.out.println("You got it in " + guessCount
+ " guesses! My number was " + computersNumber);
break; // The game is over; the user has won.
}
if (guessCount == 6) {
System.out.println("You didn't get the number in 6 guesses.");
System.out.println("You lose. My number was " + computersNumber);
break; // The game is over; the user has lost.
}
if (usersGuess < computersNumber)
System.out.print("That's too low. Try again: ");
else if (usersGuess > computersNumber)
System.out.print("That's too high. Try again: ");
}
System.out.println();
} // end of playGame()
} // end of class GuessingGame
public class GuessingGame {
public static void main(String[] args) {
System.out.println("Let's play a game. I'll pick a number between");
System.out.println("1 and 100, and you try to guess it.");
playGame();
System.out.println("Thanks for playing. Goodbye.");
} // end of main()
static void playGame() {
Scanner input = new Scanner( System.in );
int computersNumber; // A random number picked by the computer.
int usersGuess; // A number entered by user as a guess.
int guessCount; // Number of guesses the user has made.
computersNumber = (int)(100 * Math.random()) + 1;
guessCount = 0;
System.out.println();
System.out.print("What is your first guess? ");
while (true) {
usersGuess = input.nextInt(); // Get the user's guess.
guessCount++;
if (usersGuess == computersNumber) {
System.out.println("You got it in " + guessCount
+ " guesses! My number was " + computersNumber);
break; // The game is over; the user has won.
}
if (guessCount == 6) {
System.out.println("You didn't get the number in 6 guesses.");
System.out.println("You lose. My number was " + computersNumber);
break; // The game is over; the user has lost.
}
if (usersGuess < computersNumber)
System.out.print("That's too low. Try again: ");
else if (usersGuess > computersNumber)
System.out.print("That's too high. Try again: ");
}
System.out.println();
} // end of playGame()
} // end of class GuessingGame
Output:
Let's play a game. I'll pick a number between
1 and 100, and you try to guess it.
What is your first guess? 25
That's too high. Try again: 12
That's too low. Try again: 20
That's too low. Try again: 22
That's too low. Try again: 24
You got it in 5 guesses! My number was 24
Thanks for playing. Goodbye.
This program demonstrates recursion by counting the number of squares in a "blob". The squares are arranged in a grid, and each position in the grid can be either empty or filled. A blob is defined to be a filled square and any square that can be reached from that square by moving horizontally or vertically to other filled squares. This program fills the grid randomly. If the user clicks on a filled square, all the squares in the blob that contains that square are colored red, and the number of squares in the blob is reported. The program can also count and report the number of blobs. When the user clicks a "New Blobs" button, the grid is randomly re-filled.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Blobs extends JPanel implements MouseListener, ActionListener
import java.awt.event.*;
import javax.swing.*;
public class Blobs extends JPanel implements MouseListener, ActionListener
{
public static void main(String[] args)
public static void main(String[] args)
{
JFrame window = new JFrame("Recursive Blob Counting");
window.setContentPane( new Blobs(454,400) );
window.pack();
window.setResizable(false);
window.setLocation(150,100);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
final static int SQUARE_SIZE = 9;
JFrame window = new JFrame("Recursive Blob Counting");
window.setContentPane( new Blobs(454,400) );
window.pack();
window.setResizable(false);
window.setLocation(150,100);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
final static int SQUARE_SIZE = 9;
JLabel message;
JComboBox<String> percentFill;
int rows;
int columns;
boolean[][] filled;
boolean[][] visited;
JComboBox<String> percentFill;
int rows;
int columns;
boolean[][] filled;
boolean[][] visited;
public Blobs(int width, int height) {
setLayout(null);
setBackground(new Color(220,220,255));
addMouseListener(this);
setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.BLUE));
setPreferredSize( new Dimension(width,height) );
rows = (height - 120) / SQUARE_SIZE;
columns = (width - 20) / SQUARE_SIZE;
filled = new boolean[rows][columns];
visited = new boolean[rows][columns];
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++)
filled[r][c] = (Math.random() < 0.3);
/* Create the components. */
message = new JLabel("Click a square to get the blob size.", JLabel.CENTER);
message.setForeground(Color.BLUE);
message.setFont(new Font("Helvetica",Font.PLAIN,14));
percentFill = new JComboBox<String>();
percentFill.addItem("10% fill");
percentFill.addItem("20% fill");
percentFill.addItem("30% fill");
percentFill.addItem("40% fill");
percentFill.addItem("50% fill");
percentFill.addItem("60% fill");
percentFill.addItem("70% fill");
percentFill.addItem("80% fill");
percentFill.addItem("90% fill");
percentFill.setBackground(Color.WHITE);
percentFill.setSelectedIndex(2);
JButton newButton = new JButton("New Blobs");
newButton.addActionListener(this);
newButton.setBackground(Color.LIGHT_GRAY);
JButton countButton = new JButton("Count the Blobs");
countButton.addActionListener(this);
countButton.setBackground(Color.LIGHT_GRAY);
/* Add the components to the panel and set their sizes and positions. */
add(message);
add(newButton);
add(percentFill);
add(countButton);
message.setBounds(15, height-100, width-30, 23);
countButton.setBounds(15, height-70, width-30, 28);
newButton.setBounds(15, height-35, (width-40)/2, 28);
percentFill.setBounds(width/2 + 5, height-35, (width-40)/2, 28);
} // end constructor
public void actionPerformed(ActionEvent evt) {
String cmd = evt.getActionCommand();
if (cmd.equals("New Blobs"))
fillGrid();
else if (cmd.equals("Count the Blobs"))
countBlobs();
}
private void fillGrid() {
double probability = (percentFill.getSelectedIndex() + 1) / 10.0;
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++) {
filled[r][c] = (Math.random() < probability);
visited[r][c] = false;
}
message.setText("Click a square to get the blob size.");
repaint();
}
private void countBlobs() {
int count = 0;
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++)
visited[r][c] = false;
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++) {
if (getBlobSize(r,c) > 0)
count++;
}
repaint();
message.setText("The number of blobs is " + count);
} // end countBlobs()
private int getBlobSize(int r, int c) {
if (r < 0 || r >= rows || c < 0 || c >= columns) {
return 0;
}
if (filled[r][c] == false || visited[r][c] == true) {
return 0;
}
visited[r][c] = true;
int size = 1;
size += getBlobSize(r-1,c);
size += getBlobSize(r+1,c);
size += getBlobSize(r,c-1);
size += getBlobSize(r,c+1);
return size;
} // end getBlobSize()
public void mousePressed(MouseEvent evt) {
int row = (evt.getY() - 10) / SQUARE_SIZE;
int col = (evt.getX() - 10) / SQUARE_SIZE;
if (row < 0 || row >= rows || col < 0 || col >= columns) {
message.setText("Please click on a square!");
return;
}
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++)
visited[r][c] = false; // Clear visited array before counting.
int size = getBlobSize(row,col);
if (size == 0)
message.setText("There is no blob at (" + row + "," + col + ").");
else if (size == 1)
message.setText("Blob at (" + row + "," + col + ") contains 1 square.");
else
message.setText("Blob at (" + row + "," + col + ") contains " + size + " squares.");
repaint();
}
public void mouseReleased(MouseEvent e) { }
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(10, 10, columns*SQUARE_SIZE, rows*SQUARE_SIZE);
g.setColor(Color.BLACK);
for (int i = 0; i <= rows; i++)
g.drawLine(10, 10 + i*SQUARE_SIZE, columns*SQUARE_SIZE + 10, 10 + i*SQUARE_SIZE);
for (int i = 0; i <= columns; i++)
g.drawLine(10 + i*SQUARE_SIZE, 10, 10 + i*SQUARE_SIZE, rows*SQUARE_SIZE + 10);
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++) {
if (visited[r][c]) {
g.setColor(Color.RED);
g.fillRect(11 + c*SQUARE_SIZE, 11 + r*SQUARE_SIZE, SQUARE_SIZE - 1, SQUARE_SIZE - 1);
}
else if (filled[r][c]) {
g.setColor(Color.GRAY);
g.fillRect(11 + c*SQUARE_SIZE, 11 + r*SQUARE_SIZE, SQUARE_SIZE - 1, SQUARE_SIZE - 1);
}
}
} // end paintComponent();
} // end class Blobs
setLayout(null);
setBackground(new Color(220,220,255));
addMouseListener(this);
setBorder(BorderFactory.createMatteBorder(2,2,2,2,Color.BLUE));
setPreferredSize( new Dimension(width,height) );
rows = (height - 120) / SQUARE_SIZE;
columns = (width - 20) / SQUARE_SIZE;
filled = new boolean[rows][columns];
visited = new boolean[rows][columns];
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++)
filled[r][c] = (Math.random() < 0.3);
/* Create the components. */
message = new JLabel("Click a square to get the blob size.", JLabel.CENTER);
message.setForeground(Color.BLUE);
message.setFont(new Font("Helvetica",Font.PLAIN,14));
percentFill = new JComboBox<String>();
percentFill.addItem("10% fill");
percentFill.addItem("20% fill");
percentFill.addItem("30% fill");
percentFill.addItem("40% fill");
percentFill.addItem("50% fill");
percentFill.addItem("60% fill");
percentFill.addItem("70% fill");
percentFill.addItem("80% fill");
percentFill.addItem("90% fill");
percentFill.setBackground(Color.WHITE);
percentFill.setSelectedIndex(2);
JButton newButton = new JButton("New Blobs");
newButton.addActionListener(this);
newButton.setBackground(Color.LIGHT_GRAY);
JButton countButton = new JButton("Count the Blobs");
countButton.addActionListener(this);
countButton.setBackground(Color.LIGHT_GRAY);
/* Add the components to the panel and set their sizes and positions. */
add(message);
add(newButton);
add(percentFill);
add(countButton);
message.setBounds(15, height-100, width-30, 23);
countButton.setBounds(15, height-70, width-30, 28);
newButton.setBounds(15, height-35, (width-40)/2, 28);
percentFill.setBounds(width/2 + 5, height-35, (width-40)/2, 28);
} // end constructor
public void actionPerformed(ActionEvent evt) {
String cmd = evt.getActionCommand();
if (cmd.equals("New Blobs"))
fillGrid();
else if (cmd.equals("Count the Blobs"))
countBlobs();
}
private void fillGrid() {
double probability = (percentFill.getSelectedIndex() + 1) / 10.0;
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++) {
filled[r][c] = (Math.random() < probability);
visited[r][c] = false;
}
message.setText("Click a square to get the blob size.");
repaint();
}
private void countBlobs() {
int count = 0;
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++)
visited[r][c] = false;
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++) {
if (getBlobSize(r,c) > 0)
count++;
}
repaint();
message.setText("The number of blobs is " + count);
} // end countBlobs()
private int getBlobSize(int r, int c) {
if (r < 0 || r >= rows || c < 0 || c >= columns) {
return 0;
}
if (filled[r][c] == false || visited[r][c] == true) {
return 0;
}
visited[r][c] = true;
int size = 1;
size += getBlobSize(r-1,c);
size += getBlobSize(r+1,c);
size += getBlobSize(r,c-1);
size += getBlobSize(r,c+1);
return size;
} // end getBlobSize()
public void mousePressed(MouseEvent evt) {
int row = (evt.getY() - 10) / SQUARE_SIZE;
int col = (evt.getX() - 10) / SQUARE_SIZE;
if (row < 0 || row >= rows || col < 0 || col >= columns) {
message.setText("Please click on a square!");
return;
}
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++)
visited[r][c] = false; // Clear visited array before counting.
int size = getBlobSize(row,col);
if (size == 0)
message.setText("There is no blob at (" + row + "," + col + ").");
else if (size == 1)
message.setText("Blob at (" + row + "," + col + ") contains 1 square.");
else
message.setText("Blob at (" + row + "," + col + ") contains " + size + " squares.");
repaint();
}
public void mouseReleased(MouseEvent e) { }
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(10, 10, columns*SQUARE_SIZE, rows*SQUARE_SIZE);
g.setColor(Color.BLACK);
for (int i = 0; i <= rows; i++)
g.drawLine(10, 10 + i*SQUARE_SIZE, columns*SQUARE_SIZE + 10, 10 + i*SQUARE_SIZE);
for (int i = 0; i <= columns; i++)
g.drawLine(10 + i*SQUARE_SIZE, 10, 10 + i*SQUARE_SIZE, rows*SQUARE_SIZE + 10);
for (int r = 0; r < rows; r++)
for (int c = 0; c < columns; c++) {
if (visited[r][c]) {
g.setColor(Color.RED);
g.fillRect(11 + c*SQUARE_SIZE, 11 + r*SQUARE_SIZE, SQUARE_SIZE - 1, SQUARE_SIZE - 1);
}
else if (filled[r][c]) {
g.setColor(Color.GRAY);
g.fillRect(11 + c*SQUARE_SIZE, 11 + r*SQUARE_SIZE, SQUARE_SIZE - 1, SQUARE_SIZE - 1);
}
}
} // end paintComponent();
} // end class Blobs



