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...

bengali language

Bengali  ( / b ɛ ŋ ˈ ɡ ɔː l i / ), [4]  also known by its  endonym   Bangla  ( UK :  / ˈ b ʌ ŋ l ə / ;  বাংলা ), is an  Indo-Aryan language  primarily spoken by the  Bengalis  in  South Asia . It is the official and most widely spoken language of  Bangladesh  and second most widely spoken of the 22  scheduled languages of India , behind  Hindi . In 2015, 160 million speakers were reported for Bangladesh, [1]  and the 2011 Indian census counted another 100 million. [5]  With approximately 260–300   million total speakers worldwide, [6]  Bengali is the  6th most spoken language by number of native speakers  and  7th most spoken language by total number of speakers  in the world. [7] [8] The  official  and  de facto   national language  of Bangladesh is Modern Standard Bengali (Literary Bengali). [9] [10] [11]  It serves as the  ling...

মুকুন্দরাম চক্রবর্তী

মুকুন্দরাম চক্রবর্তী , কবিিক্যানকে আমাদের মধ্যবিত্ত বাঙালি কবিদের সম্পর্কে প্রায়ই তথ্য হেরেস বা মৌখিক ঐতিহ্যের উপর ভিত্তি করে দেওয়া হয়। তাদের সত্যতা যাচাই করা অসম্ভব। চন্দীমঙ্গল কাব্যের রচয়িতা মুকুন্দরাম এবং পঞ্চালির অন্যান্য লেখক (বিশেষ দেবগণের গৌরব উদযাপনের গৌরব) সংক্ষিপ্ত জীবনীমূলক বক্তৃতা বিবৃতিগুলি তাদের জীবনের গল্পের জন্য আরো সত্যিকারের উত্স প্রদান করে। মুকুন্দরামের রচনায় এই দুটি নোট আছে। এই বিখ্যাত আত্মজীবনীমূলক নোট একটি মধ্যযুগীয় বাংলা গ্রামে জীবনের একটি গ্রাফিক ছবিও সরবরাহ করে , বিশেষত ব্রাহ্মণ পরিবার তাদের জীবিকা জন্য কৃষি উপর নির্ভরশীল। আমরা দুটি বিবৃতিগুলির একটি , কম পরিচিত এক থেকে শিখতে পারি যে , বর্ধমান জেলার রতনা নদীর তীরে দমুনিয়া গ্রামে (দমিনিয়ায় স্থানীয় উচ্চারণ) চক্র্রধিত্য নাম অনুসারে চক্রদিত্য নামে একটি অবতার রয়েছে , যেখানে এক ধুসদত্ত তাঁর সম্মানে একটি মন্দির নির্মাণ করেছিলেন। । কিন্তু দেবতা একটি পিপুল গাছের নিচে তার বাসভবন স্থাপন করতে মন্দির ত্যাগ করেন। এক হরি নন্দী শিবা পূজার জন্য জমি দান করে এবং তিনি মাধব ওঝা নিযুক্ত করেন , যা মঠের তত্ত্বাবধানে...