Welcome, guest | Sign In | My Account | Store | Cart
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.Timer;



public class Game extends JApplet // swing applet
{
    /////// SCREENS

    boolean titleScreen = true; // implements the menu screen when true
    boolean gameBegin = false; // Begins the game screen when true
    boolean instruction = false; // Begins the game screen when true

    /////// IMAGE

    Dimension dim; // buffering
    Image offscreen; // buffering
    static Graphics bufferGraphics; // buffering

    static Image h1, h2; // Cursor image
    static Image bg, button1a, button1b, button2a, button2b; // image for menu screen (background, buttons)
    static Image instrbg; // instruction background
    static Image gamebg, m1, m1a, m1b; // image for game screen (background, monkey sprite)
    static Image[] mk = new Image [9]; // image variable for the 9 "moles"

    /////// MOUSE

    Cursor c; // cursor variable
    boolean myButtonPressed = false; // mouse button pressed (true or false)
    boolean myButtonEntered = false; // mouse enter the screen (true or false)
    int myMouseX = 0, myMouseY = 0; // mouse coordinates x and y from top left
    int myRow = -1, myCol = -1; // mouse coordinate outside of the screen

    /////// GAME VARIABLES

    private static final int[] mX = {5, 170, 335, 5, 170, 335, 5, 170, 335}; // "mole" (monkey) x coordinates on the game screen
    // grid format going from left to right & down the rows
    private static final int[] mY = {5, 5, 5, 170, 170, 170, 335, 335, 335}; // "mole" y coordinates on the game screen
    // grid format going from left to right & down the rows
    int randm; // randomizes which "mole" will activate
    int rand; // randomizes the time space between the mole activation/deactivation

    static boolean mup = false; // a "mole" is activated (true/false)
    static boolean[] mhit = {false, false, false, false, false, false, false, false, false}; // monkey (1 to nine in same grid format as above) hit

    private int[] respawnCounter = {0, 0, 0, 0, 0, 0, 0, 0, 0};
    private int[] removeCounter = {0, 0, 0, 0, 0, 0, 0, 0, 0};

    static int score = 0; // score counter

    /////// IPLEMENTING CLASSES

    GameScreen g1 = new GameScreen (); // instantiates the GameScreen Class
    Timer repaintM = null; // sets the repaint timer for monkey

    public void init ()  // instantiating variables
    {
        /////// Screen variables
        setSize (600, 500); // sets screensize to 600 by 500 pixels

        /////// Buffering variables
        dim = getSize (); // gets the dimension of the screen
        setBackground (Color.white); // sets the background of screen to white
        offscreen = createImage (dim.width, dim.height); // buffering method to the applet screen
        bufferGraphics = offscreen.getGraphics (); // new object for instantiating images on the paint()

        /////// Receiving images
        m1a = getImage (getCodeBase (), "m1a.gif"); // monkey up image
        m1b = getImage (getCodeBase (), "m1b.gif"); // monkey hit image
        m1 = getImage (getCodeBase (), "m1.gif"); // monkey none image

        h1 = getImage (getCodeBase (), "hammer.gif"); // hammer cursor
        h2 = getImage (getCodeBase (), "hammer2.gif"); // hammer hit cursor
        bg = getImage (getCodeBase (), "mainbg.gif"); // main menu background
        gamebg = getImage (getCodeBase (), "gbg.gif"); // game background
        instrbg = getImage (getCodeBase (), "instruction.gif"); // game background

        button1a = getImage (getCodeBase (), "button1a.gif"); // start button
        button1b = getImage (getCodeBase (), "button1b.gif"); // instruction button
        button2a = getImage (getCodeBase (), "button2a.gif"); // start pressed button
        button2b = getImage (getCodeBase (), "button2b.gif"); // instruction pressed button

        for (int x = 0 ; x < 9 ; x++) // loops 9 times for each monkey image array
        {
            mk [x] = m1; // monkey [x] is equal to "monkey none image"
        }

        /////// MOUSE
        Toolkit tk = Toolkit.getDefaultToolkit ();
        c = tk.createCustomCursor (tk.getImage (""), new Point (0, 0), "invisible"); // creates an invalid cursor thus appears like there is no cursor
        setCursor (c); // activates the cursor

        addMouseListener (new MyMouseListener ()); // adds mouse listener class which moniters the status of the mouse button
        addMouseMotionListener (new MyMouseMotionListener ());  // adds mouse motion listener class which moniters the movement of the mouse

    } // end init method



    /////////////////////////////////////
    /////// MOUSELISTENER CLASS /////////
    /////////////////////////////////////

    public class MyMouseListener implements MouseListener // Mouse Listener Class: "status of mouse button"
    {
        public void mousePressed (MouseEvent me)  // mouse pressed method
        {
            myButtonPressed = true; // mouse pressed becomes true (mouse pressed)
            myMouseX = me.getX (); // returns x coordinate of mouse
            myMouseY = me.getY (); // returns y coordinate of mouse
            handleMouseEvents (); // values are implemented into the handleMouseEvents ()
        }

        public void mouseReleased (MouseEvent me)  // mouse released method
        {
            myButtonPressed = false; // mouse pressed becomes false (mouse released)
            myMouseX = me.getX (); // returns x coordinate of mouse
            myMouseY = me.getY (); // returns y coordinate of mouse
            handleMouseEvents (); // values are implemented into the handleMouseEvents ()
        }

        public void mouseEntered (MouseEvent me)  // mouse entered method
        {
            myButtonEntered = true; // mouse enters the screen becomes true
            myMouseX = me.getX (); // returns x coordinate of mouse
            myMouseY = me.getY (); // returns y coordinate of mouse
            handleMouseEvents (); // values are implemented into the handleMouseEvents ()
        }

        public void mouseExited (MouseEvent me)  // mouse excited method
        {
            myButtonEntered = false; // mouse pressed becomes true
            myMouseX = me.getX (); // returns x coordinate of mouse
            myMouseY = me.getY (); // returns y coordinate of mouse
            handleMouseEvents (); // values are implemented into the handleMouseEvents ()
        }

        public void mouseClicked (MouseEvent me)  // mouse clicked method
        {
            // must access all the methods in an interface
        }
    } // end MyMouseListener class


    public class MyMouseMotionListener implements MouseMotionListener // Mouse Motion Listener class: "movement of mouse"
    {
        public void mouseMoved (MouseEvent me)  // mouse moved class
        {
            myMouseX = me.getX (); // returns x coordinate of mouse
            myMouseY = me.getY (); // returns y coordinate of mouse
            handleMouseEvents (); // values are implemented into the handleMouseEvents ()
        } // end mouseMoved method

        public void mouseDragged (MouseEvent me)  // mouse dragged class (pressed and moved simultaneously)
        {
            myMouseX = me.getX (); // returns x coordinate of mouse
            myMouseY = me.getY (); // returns y coordinate of mouse
            handleMouseEvents (); // values are implemented into the handleMouseEvents ()
        } // end mouseDragged method
    } // end MyMouseListener class


    public Image getMouseImage ()  // method that returns mouse image
    {
        if (myButtonPressed) // when mouse button is pressed
        {
            return h2; // cursor changes to hammer hit image
        }
        return h1; // cursor returns to original hammer image
    }


    public void handleMouseEvents ()  // the coordinates of the mouse on screen
    {
        int nCol = myMouseX - 50; // variable for x coordinate of mouse
        // variable is subtracted to place the x coordinate of the cursor in the center of the hammer image (size = 100 by 100)
        int nRow = myMouseY - 50; // variable for y coordinate of mouse
        // variable is subtracted to place the x coordinate of the cursor in the center of the hammer image (size = 100 by 100)

        if (!myButtonEntered) // if mouse has not entered the screen
            nCol = nRow = -1; // the coordinates of the mouse is out of bounds
        if (nCol != myCol || nRow != myRow) // if the mouse has entered the screen
        {
            myRow = nRow; // cursor x coordinate
            myCol = nCol; // cursor y coordinate
        }
        repaint (); // repaints the cursor as coordinates of the mouse moves
    } // end handleMouseEvents method


    public void mouse ()  // draws hammer cursor
    {
        if (myRow != -1 && myCol != -1) // if mouse is in the boundaries of the screen
        {
            Image mouseImage = getMouseImage (); // mouse image is rendered depending on the situation
            // see getMouseImage ()
            bufferGraphics.drawImage (mouseImage, myCol, myRow, 100, 100, null, this); // draws the cursor
        } // end if
    }


    public void paint (Graphics g)  // paint method - handles images
    {
        // buffering tool
        bufferGraphics.clearRect (0, 0, dim.width, dim.height);

        if (titleScreen == true) // if screen title is true
        {
            mainScreen (); // main screen appears
        }
        if (gameBegin == true) // if game begin is true
        {
            repaint ();
            game (); // game screen appears
        }
        if (instruction == true) // if game begin is true
        {
            instruction (); // game screen appears
        }
        mouse (); // mouse hammer cursor is repeatedly drawn

        // buffering tool
        g.drawImage (offscreen, 0, 0, this);
    } // end Paint method


    public void update (Graphics g)  // double buffering method
    {
        paint (g);
    }


    public void instruction ()
    {
        /////// IMAGE
        bufferGraphics.drawImage (instrbg, 0, 0, 600, 500, Color.red, this); // background
        if (myButtonPressed && myRow > (384 - 50) && myRow < (433 - 50)
                && myCol > (427 - 50) && myCol < (586 - 50)) // if mouse button is pressed and hits start button coordinates
        {
            instruction = false; // instruction screen closes
            gameBegin = true; // game begins
        }
    }


    public void mainScreen ()  // main screen method
    {
        /////// IMAGE
        bufferGraphics.drawImage (bg, 0, 0, 600, 500, Color.red, this); // background
        bufferGraphics.drawImage (button1a, 427, 384, 159, 49, Color.red, this); // start button
        bufferGraphics.drawImage (button2a, 427, 440, 159, 49, Color.red, this); // instruction button

        if (myButtonPressed == true) // if mouse button is pressed
        {
            if (myRow > (384 - 50) && myRow < (433 - 50)
                    && myCol > (427 - 50) && myCol < (586 - 50)) // and hits start button coordinates
            {
                titleScreen = false; // title screen closes
                gameBegin = true; // game begins
            }
            else if (myRow > (340 - 50) && myRow < (489 - 50)
                    && myCol > (427 - 50) && myCol < (586 - 50)) // and hits instruction button coordinates
            {
                titleScreen = false; // title screen closes
                instruction = true;
            }
        }
    }


    public void game ()  // Game method
    {
        // new ReminderBeep (5);

        Monkey m = new Monkey (); // randomizing which monkey becomes activated
        m.randmonkey ();

        /////// IMAGE
        bufferGraphics.drawImage (gamebg, 0, 0, 600, 500, Color.red, this); // game background
        for (int i = 0 ; i < 9 ; i++) // 9 arrays of monkey image
        {
            bufferGraphics.drawImage (mk [i], mX [i], mY [i], 160, 160, Color.red, this);
            // draws the monkey arrays in order from left to right in grid format
        }


        bufferGraphics.setFont (new Font ("Arial", Font.BOLD, 20));
        bufferGraphics.drawString (String.valueOf (score), 560, 160); // score
    }


    class Monkey extends JApplet
    {
        public void monkeyhit ()  // monkey collision detector method
        {
            if (myButtonPressed == true) // if mouse button is pressed and...
            {
                for (int hit = 0 ; hit < 9 ; hit++) // for 9 arrays of monkey image
                    if (mk [hit] == m1a && myRow > (mY [hit] - 50) && myRow < (mY [hit] + 160 - 50)
                            && myCol > (mX [hit] - 50) && myCol < (mX [hit] + 160 - 50))
                        // ... button is in the boundaries of monkey that is activated
                        {
                            mk [hit] = m1b; // monkey image changes to monkey hit image
                            mhit [hit] = false; // monkey that is hit is no longer activated
                            score += 10; // score counts up 10 pts.
                        }
            }
        }


        public void randmonkey ()  // randomizaing monkey activation method
        {
            repaintM = new Timer (2000, new RepaintAction (this)); // creates a new timer that will delay the repaint of the monkeys (2 seconds
            rand = ((int) (Math.random () * 100)) + 1000; // monkey activation delay in between
            randm = ((int) (Math.random () * 500)); // randomizes the number from 1 to 500 to determine which monkey becomes activated
            // 9 out of 500 chance of monkey appearing

            if (randm <= 8) // if random number is between 0 to 8
            {
                for (int a = 0 ; a < 9 ; a++) // for 9 monkey arrays
                {
                    if (randm == a) // if random number matches up with the corect monkey coordinates
                    {
                        mhit [randm] = true; // activates the monkey
                        mk [randm] = m1a; // monkey none image changes to monkey image
                    }
                    else if (randm != a) // if random number does not match up
                    {
                        mhit [a] = false; // monkey stays deactivated
                        mk [a] = m1; // monkey none stays monkey none
                    }
                }

                for (int i = 0 ; i < rand * 100 ; i++) // monkey is activated for a certain time of delay
                {
                    monkeyhit (); // monkey hit method is activated for player to hit the "mole"
                    if (mhit [randm] = false) // when monkey deactivates (monkey is hit)
                    {
                        mk [randm] = m1; // monkey hit image is changed to money none image
                        break; // the loop discontinues
                    }
                }
            }
        }
    }


    class RepaintAction implements ActionListener // Repaint method
    {
        Monkey randmonkey;

        public RepaintAction (Monkey randmonkey)
        {
            this.randmonkey = randmonkey; // random monkey is equal to random monkey here
        }


        public void actionPerformed (ActionEvent e)
        {
            randmonkey.repaint (); // repaints randmonkey method
        }
    }
}

History