Showing posts with label Games. Show all posts

Sub Killer Game With Score

Friday, 19 June 2015
Posted by Unknown
package vijay;
/**
 *
 * @author VIJAY
 */
import java.awt.*;       
import java.awt.event.*;
import javax.swing.*;
public class SubKillerWithScore extends JPanel 
{
   
    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.
    public SubKillerWithScore() 
    {

        setBackground( new Color(0,200,0) );

        ActionListener action = new ActionListener() 
        {
                // Defines the action taken each time the timer fires.
            public void actionPerformed(ActionEvent evt) 
            {
                if (boat != null) 
                {
                    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) 
            {
                requestFocus();
            }
        } );

        addFocusListener( new FocusListener() 
       {              
            public void focusGained(FocusEvent evt) 
            {
                timer.start();
                repaint();
            }
            public void focusLost(FocusEvent evt) 
            {
                timer.stop();
                repaint();
            }
        } );

        addKeyListener( new KeyAdapter() 
        {
            public void keyPressed(KeyEvent evt) 
            {
                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_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()
 
    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

    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:

Guessing Game

Posted by Unknown
Tag :

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

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.

Blobs Panel

Thursday, 18 June 2015
Posted by Unknown

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 
{
    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;  
    JLabel message;      
   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

Output:

Welcome to My Blog

Translate

Popular Post

Total Pageviews

- Copyright © Learning Java Program - Powered by Blogger -