Skip to main content

blue j program for a helicopter game

import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class HelicopterForm implements MouseListener
{
    public static void main (String [] args)
    {
        HelicopterForm a = new HelicopterForm();
    }

    private JFrame background;
    private Container container;
    private JButton button;
    private ImagePanel back;

    public static boolean paused;
    public static boolean crashed;
    public static boolean started;
    public static boolean playedOnce; 

    public boolean goingUp;
    private double upCount;

    public static int distance;
    public static int maxDistance;

    public final int XPOS;
    public final int NUMRECS;
    public final int RECHEIGHT;
    public final int RECWIDTH;

    private int moveIncrement;
    private int numSmoke;

    private ArrayList<MovingImage> toprecs;
    private ArrayList<MovingImage> bottomrecs;
    private ArrayList<MovingImage> middlerecs;
    private ArrayList<MovingImage> recs;
    private ArrayList<MovingImage> smoke;
    private MovingImage helicopter;

    //private MP3 move = new MP3("HelicopterSound.mp3");

    /*Graphics information:
     *Background is 812 x 537
     *Floor is 74 and Ceiling is 72 pixels high
     *28 rectangles across that are 29 x 73
     */

    public HelicopterForm()
    {
        NUMRECS = 28;
        RECHEIGHT = 73;
        RECWIDTH = 29;
        XPOS = 200;
        playedOnce = false;
        maxDistance = 0;

        load(new File("Best.txt"));

        initiate();
    }

    public void load(File file)
    {
        try
        {
            Scanner reader = new Scanner(file);
            while(reader.hasNext())
            {
                int value = reader.nextInt();
                if(value > maxDistance)
                    maxDistance = value;
            }
        }
        catch(IOException i )
        {
            System.out.println("Error. "+i);
        }
    }

    public void save()
    {
        FileWriter out;
        try
        {
            out = new FileWriter("Best.txt");
            out.write("" + maxDistance);
            out.close();
        }
        catch(IOException i)
        {
            System.out.println("Error: "+i.getMessage());
        }
    }

    public void initiate()
    {
        if(!playedOnce)
        {
            background = new JFrame("Helicopter Game");
            background.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //closes the program when the window is closed
            background.setResizable(false); //don't allow the user to resize the window
            background.setSize(new Dimension(818,568));
            background.setVisible(true);

            back = new ImagePanel("back.JPG");
            background.add(back);

            back.addMouseListener(this);
        }
        playedOnce = true;
        goingUp = false;
        paused = false;
        crashed = false;
        started = false;

        distance = 0;
        upCount = 0;

        moveIncrement = 2;
        numSmoke = 15;

        recs = new ArrayList<MovingImage>();
        toprecs = new ArrayList<MovingImage>();
        middlerecs = new ArrayList<MovingImage>();
        bottomrecs = new ArrayList<MovingImage>();
        smoke = new ArrayList<MovingImage>();

        helicopter = new MovingImage("helicopter.GIF",XPOS,270);

        for(int x = 0; x < NUMRECS; x++)
            toprecs.add(new MovingImage("rec2.JPG",RECWIDTH*x,30));
        for(int x = 0; x < NUMRECS; x++)
            bottomrecs.add(new MovingImage("rec2.JPG",RECWIDTH*x,450));

        middlerecs.add(new MovingImage("rec2.JPG",1392,randomMidHeight()));
        middlerecs.add(new MovingImage("rec2.JPG",1972,randomMidHeight()));

        drawRectangles();
    }

    public void drawRectangles()
    {
        long last = System.currentTimeMillis();
        long lastCopter = System.currentTimeMillis();
        long lastSmoke = System.currentTimeMillis();
        long lastSound = System.currentTimeMillis();
        int firstUpdates = 0;
        double lastDistance = (double)System.currentTimeMillis();
        while(true)
        {
            if(!paused && !crashed && started && (double)System.currentTimeMillis() - (double)(2900/40) > lastDistance)
            { 
                lastDistance = System.currentTimeMillis();
                distance++;
            } 

        /*  if(!paused && !crashed && started && System.currentTimeMillis() - 1300 > lastSound)
            {
                lastSound = System.currentTimeMillis();
                move.play();
            }
        */

            if(!paused && !crashed && started && System.currentTimeMillis() - 10 > lastCopter)
            {
                lastCopter = System.currentTimeMillis();
                updateCopter();
                updateMiddle();
            }
            if(!paused && !crashed && started && System.currentTimeMillis() - 100 > last)
            {
                last = System.currentTimeMillis();
                updateRecs();
            }
            if(!paused && !crashed && started && System.currentTimeMillis() - 75 > lastSmoke)
            {
                lastSmoke = System.currentTimeMillis();
                if (firstUpdates < numSmoke)
                {
                    firstUpdates++;
                    smoke.add(new MovingImage("smoke.GIF",187,helicopter.getY()));
                    for(int x = 0; x < firstUpdates; x++)
                        smoke.set(x,new MovingImage("smoke.GIF",smoke.get(x).getX() - 12, smoke.get(x).getY()));
                }
                else
                {
                    for(int x = 0; x < numSmoke - 1; x++)
                        smoke.get(x).setY(smoke.get(x+1).getY());
                    smoke.set(numSmoke - 1,new MovingImage("smoke.GIF",187,helicopter.getY()));
                }
                    }
                    back.updateImages(toprecs,middlerecs,bottomrecs,helicopter,smoke);
                }
    }

    public void updateRecs()
    {
        for(int x = 0; x < (NUMRECS - 1); x++) //move all but the last rectangle 1 spot to the left
        {
            toprecs.set(x,new MovingImage("rec2.JPG",RECWIDTH*x,toprecs.get(x+1).getY()));
            bottomrecs.set(x,new MovingImage("rec2.JPG",RECWIDTH*x,bottomrecs.get(x+1).getY()));
        }
        lastRec();
    }

    public void lastRec()
    {
        if(distance % 400 == 0)
            moveIncrement++;
        if(toprecs.get(26).getY() < 2) //if too high, move down
            moveDown();
        else if (bottomrecs.get(26).getY() > 463) //else if too low, move up
            moveUp();
        else //else move randomly
        {
            if((int)(Math.random() * 60) == 50)
                randomDrop();
            else
            {
                if((int)(Math.random() * 2) == 1)
                    moveUp();
                else
                    moveDown();
            }
        }
    }

    public void randomDrop()
    {
        toprecs.get(26).setY(toprecs.get(26).getY() + (463 - bottomrecs.get(26).getY()));
        bottomrecs.get(26).setY(463);
    }

    public void moveDown()
    {
        toprecs.set((NUMRECS - 1),new MovingImage("rec2.JPG",RECWIDTH*(NUMRECS - 1),toprecs.get(26).getY() + moveIncrement));
        bottomrecs.set((NUMRECS - 1),new MovingImage("rec2.JPG",RECWIDTH*(NUMRECS - 1),bottomrecs.get(26).getY() + moveIncrement));
    }

    public void moveUp()
    {
        bottomrecs.set((NUMRECS - 1),new MovingImage("rec2.JPG",RECWIDTH*(NUMRECS - 1),bottomrecs.get(26).getY() - moveIncrement));
        toprecs.set((NUMRECS - 1),new MovingImage("rec2.JPG",RECWIDTH*(NUMRECS - 1),toprecs.get(26).getY() - moveIncrement));
    }

    public int randomMidHeight()
    {
        int max = 10000;
        int min = 0;

        for(int x = 0; x < NUMRECS; x++)
        {
            if(toprecs.get(x).getY() > min)
                min = (int)toprecs.get(x).getY();
            if(bottomrecs.get(x).getY() < max)
                max = (int)bottomrecs.get(x).getY();
        }
        min += RECHEIGHT;
        max -= (RECHEIGHT + min);
        return min + (int)(Math.random() * max);
    }

    //moves the randomly generated middle rectangles
    public void updateMiddle()
    {
        if(middlerecs.get(0).getX() > -1 * RECWIDTH)
        {
            middlerecs.set(0,new MovingImage("rec2.JPG",middlerecs.get(0).getX() - (RECWIDTH/5), middlerecs.get(0).getY()));
            middlerecs.set(1,new MovingImage("rec2.JPG",middlerecs.get(1).getX() - (RECWIDTH/5), middlerecs.get(1).getY()));
        }
        else
        {
            middlerecs.set(0,new MovingImage("rec2.JPG",middlerecs.get(1).getX() - (RECWIDTH/5), middlerecs.get(1).getY()));
            middlerecs.set(1,new MovingImage("rec2.JPG",middlerecs.get(0).getX() + 580,randomMidHeight()));
        }
    }

    public boolean isHit()
    {
        for(int x = 3; x <= 7; x++)
            if(helicopter.getY() + 48 >= bottomrecs.get(x).getY())
                return true;

        for(int y = 3; y <= 7; y++)
                if(helicopter.getY() <= toprecs.get(y).getY() + RECHEIGHT)
                    return true;
        for(int z = 0; z <= 1; z++)
            if(isInMidRange(z))
                return true;
        return false;
    }

    public boolean isInMidRange(int num)
    {
        Rectangle middlecheck = new Rectangle((int)middlerecs.get(num).getX(),(int)middlerecs.get(num).getY(),RECWIDTH,RECHEIGHT);
        Rectangle coptercheck = new Rectangle((int)helicopter.getX(),(int)helicopter.getY(),106,48);
        return middlecheck.intersects(coptercheck);
    }

    public void crash()
    {
        crashed = true;
        if(distance > maxDistance)
        {
            maxDistance = distance;
            save();
        }

        initiate();
    }

    //moves the helicopter
    public void updateCopter()
    {
        upCount += .08;
        if(goingUp)
        {
            if(upCount < 3.5)
                helicopter.setPosition(XPOS,(double)(helicopter.getY() - (.3 + upCount)));
            else
                helicopter.setPosition(XPOS,(double)(helicopter.getY() - (1.2 + upCount)));
            helicopter.setImage("upCopter.GIF");   
        }
        else
        {
            if(upCount < 1)
                helicopter.setPosition(XPOS,(double)(helicopter.getY() + upCount));
            else
                helicopter.setPosition(XPOS,(double)(helicopter.getY() + (1.2 + upCount)));
            helicopter.setImage("helicopter.GIF");
        }
        if(isHit())
            crash();
    }

    //Called when the mouse exits the game window
    public void mouseExited(MouseEvent e)
    {

        if(started)
        {
            paused = true;
            //move.close();
        }

    }

    //Called when the mouse enters the game window
    public void mouseEntered(MouseEvent e)
    {

    }

    //Called when the mouse is released
    public void mouseReleased(MouseEvent e)
    {
        goingUp = false;
        upCount = 0;
        if(paused)
            paused = false;
    }

    //Called when the mouse is pressed
    public void mousePressed(MouseEvent e)
    {
        if (!started)
            started = true;
        goingUp = true;
        upCount = 0;
    }

    //Called when the mouse is released
    public void mouseClicked(MouseEvent e)
    {

    }
}

class ImagePanel extends JPanel {

    private Image background;                   //The background image
    private ArrayList<MovingImage> top; //An array list of foreground images
    private ArrayList<MovingImage> bottom;
    private ArrayList<MovingImage> middle;
    private MovingImage copter;
    private ArrayList<MovingImage> smoke;

    //Constructs a new ImagePanel with the background image specified by the file path given
    public ImagePanel(String img)
    {
        this(new ImageIcon(img).getImage());   
            //The easiest way to make images from file paths in Swing
    }

    //Constructs a new ImagePanel with the background image given
    public ImagePanel(Image img)
    {
        background = img;
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));   
            //Get the size of the image
        //Thoroughly make the size of the panel equal to the size of the image
        //(Various layout managers will try to mess with the size of things to fit everything)
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);
        setSize(size);

        top = new ArrayList<MovingImage>();
        middle = new ArrayList<MovingImage>();
        bottom = new ArrayList<MovingImage>();

        smoke = new ArrayList<MovingImage>();
    }

    //This is called whenever the computer decides to repaint the window
    //It's a method in JPanel that I've overwritten to paint the background and foreground images
    public void paintComponent(Graphics g)
    {
        //Paint the background with its upper left corner at the upper left corner of the panel
        g.drawImage(background, 0, 0, null);
        //Paint each image in the foreground where it should go
        for(MovingImage img : top)
            g.drawImage(img.getImage(), (int)(img.getX()), (int)(img.getY()), null);
        for(MovingImage img : middle)
            g.drawImage(img.getImage(), (int)(img.getX()), (int)(img.getY()), null);
        for(MovingImage img : bottom)
            g.drawImage(img.getImage(), (int)(img.getX()), (int)(img.getY()), null);
        for(MovingImage img : smoke)
            g.drawImage(img.getImage(), (int)(img.getX()), (int)(img.getY()), null);
        if(copter != null)
            g.drawImage(copter.getImage(), (int)(copter.getX()), (int)(copter.getY()), null);
        drawStrings(g);
    }

    public void drawStrings(Graphics g)
    {
        g.setFont(new Font("Arial",Font.BOLD,20));
        g.drawString("Distance: " + HelicopterForm.distance,30,500);
        g.setFont(new Font("Arial",Font.BOLD,20));
        if (HelicopterForm.distance > HelicopterForm.maxDistance)
            g.drawString("Best: " + HelicopterForm.distance,650,500);
        else
            g.drawString("Best: " + HelicopterForm.maxDistance,650,500);
        if(HelicopterForm.paused)
        {
                g.setColor(Color.WHITE);
                g.setFont(new Font("Chiller",Font.BOLD,72));
                g.drawString("Paused",325,290);
                g.setFont(new Font("Chiller",Font.BOLD,30));
                g.drawString("Click to unpause.",320,340);
        }
    }

    //Replaces the list of foreground images with the one given, and repaints the panel
    public void updateImages(ArrayList<MovingImage> newTop,ArrayList<MovingImage> newMiddle,ArrayList<MovingImage> newBottom,MovingImage newCopter,ArrayList<MovingImage> newSmoke)
    {
        top = newTop;
        copter = newCopter;
        middle = newMiddle;
        bottom = newBottom;
        smoke = newSmoke;
        repaint();  //This repaints stuff... you don't need to know how it works
    }
}

class MovingImage
{
    private Image image;        //The picture
    private double x;           //X position
    private double y;           //Y position

    //Construct a new Moving Image with image, x position, and y position given
    public MovingImage(Image img, double xPos, double yPos)
    {
        image = img;
        x = xPos;
        y = yPos;
    }

    //Construct a new Moving Image with image (from file path), x position, and y position given
    public MovingImage(String path, double xPos, double yPos)
    {
        this(new ImageIcon(path).getImage(), xPos, yPos); 
            //easiest way to make an image from a file path in Swing
    }

    //They are set methods.  I don't feel like commenting them.
    public void setPosition(double xPos, double yPos)
    {
        x = xPos;
        y = yPos;
    }

    public void setImage(String path)
    {
        image = new ImageIcon(path).getImage();
    }

    public void setY(double newY)
    {
        y = newY;
    }

    public void setX(double newX)
    {
        x = newX;
    }

    //Get methods which I'm also not commenting
    public double getX()
    {
        return x;
    }

    public double getY()
    {
        return y;
    }

    public Image getImage()
    {
        return image;
    }
}

Comments

Popular posts from this blog

electronic configuration of all elements in SPDF format

Element Electrons Electronic Configuration Hydrogen (H) 1 1s 1 Helium (He) 2 1s 2 Lithium (Li) 3 1s 2  2s 1 Beryllium (Be) 4 1s 2  2s 2 Boron (B) 5 1s 2  2s 2  2p 1 Carbon (C) 6 1s 2  2s 2  2p 2 Nitrogen (N) 7 1s 2  2s 2  2p 3 Oxygen (O) 8 1s 2  2s 2  2p 4 Fluorine (F) 9 1s 2  2s 2  2p 5 Neon (Ne) 10 1s 2  2s 2  2p 6 Sodium (Na) 11 1s 2  2s 2  2p 6  3s 1 Magnesium (Mg) 12 1s 2  2s 2  2p 6  3s 2 Aluminum (Al) 13 1s 2  2s 2  2p 6  3s 2 3p 1 Silicon (Si) 14 1s 2  2s 2  2p 6  3s 2 3p 2 Phosphorous (P) 15 1s 2  2s 2  2p 6  3s 2 3p 3 Sulfur (S) 16 1s 2  2s 2  2p 6  3s 2 3p 4 Chlorine (Cl) 17 1s 2  2s 2  2p 6  3s 2 3p 5 Argon (Ar) 18 1s 2  2s 2  2p 6  3s 2 3p 6 Potassium (K) 19 1s 2  2s 2  2p 6  3s 2 3p 6  4s 1 Calcium (Ca) 20 1s 2  2s 2  2p 6  3s 2 3...

বঙ্কিমচন্দ্র চট্টোপাধ্যায়

বঙ্কিমচন্দ্র চট্টোপাধ্যায় বঙ্কিমচন্দ্র চট্টোপাধ্যায় ( জুন ২৬ , ১৮৩৮ - এপ্রিল ৮ , ১৮৯৪ ) উনিশ শতকের বাঙালি সাহিত্যিক ও সাংবাদিক। বাংলা গদ্য ও উপন্যাসের বিকাশে তাঁর অসীম অবদানের জন্যে তিনি বাংলা সাহিত্যের ইতিহাসে অমরত্ব লাভ করেছেন। তাঁকে সাধারণত প্রথম আধুনিক বাংলা ঔপন্যাসিক হিসেবে গণ্য করা হয়। তবে গীতার ব্যাখ্যাদাতা হিসাবে , সাহিত্য সমালোচক হিসাবেও তিনি বিশেষ খ্যাতিমান। তিনি জীবিকাসূত্রে ব্রিটিশ রাজের কর্মকর্তা ছিলেন। তিনি বাংলা ভাষার আদি সাহিত্যপত্র বঙ্গদর্শনের প্রতিষ্ঠাতা সম্পাদক ছিলেন। তিনি ছদ্মনাম হিসেবে কমলাকান্ত নামটি বেছে নিয়েছিলেন। জীবনী জন্ম ও বংশপরিচয় বঙ্কিমচন্দ্র চট্টোপাধ্যায়ের জন্ম হয় বর্তমান উত্তর ২৪ পরগনা জেলার নৈহাটি শহরের নিকটস্থ কাঁঠালপাড়া গ্রামে। তারিখ ২৬ জুন , ১৮৩৮ অর্থাৎ ১৩ আষাঢ় ১২৪৫। চট্টোপাধ্যায়দের আদিনিবাস ছিল হুগলি জেলার দেশমুখো গ্রামে। বঙ্কিমচন্দ্রের প্রপিতামহ রামহরি চট্টোপাধ্যায় মাতামহের সম্পত্তি পেয়ে কাঁঠালপাড়ায় আসেন এবং সেখানেই বসবাস শুরু করেন। রামহরির পৌত্র যাদবচন্দ্র চট্টোপাধ্যায়ের তৃতীয় পুত্র বঙ্কিমচন্দ্র। বঙ্ক...

Gya San Andreas cheat codes

Effect Code All Cars Have Nitro SPEEDFREAK Always Midnight NIGHTPROWLER Boats Fly FLYINGFISH Cars Float Away When Hit BUBBLECARS Chaos Mode STATEOFEMERGENCY Elvis is Everywhere BLUESUEDESHOES Faster Gameplay SPEEDITUP Funhouse Theme CRAZYTOWN Gang Members Everywhere ONLYHOMIESALLOWED Gangs Control the Streets BIFBUZZ Have Jetpack ROCKETMAN Hitman In All Weapon Stats PROFESSIONALKILLER Huge Bunny Hop CJPHONEHOME Infinite Ammo, No Reload FULLCLIP Invisible car WHEELSONLYPLEASE Max All Vehicle Skill Stats NATURALTALENT Max Muscle BUFFMEUP Max Respect WORSHIPME Max Sex Appeal HELLOLADIES Mega Jump KANGAROO Mega Punch STINGLIKEABEE Ninja Theme NINJATOWN No Wanted Level Testeducationalskills Perfect Handling STICKLIKEGLUE Recruit Anyone (Rockets) ROCKETMAYHEM Reduced Traffic GHOSTTOWN Six Star Wanted Level BRINGITON Slower Gameplay SLOWITDOWN Spawn Bloodring Banger OLDSPEEDDEMON Spawn Dozer ITSALLBULL Spawn Hunter OHDUDE Spawn Hydra JUMPJET Spawn Monster ...