一系列敌人,2D Java游戏

时间:2012-05-05 23:07:57

标签: java

基本上,我正在制作一个简单的小行星-y风格的侧卷轴,我有一点Java经验,但在某些实现方面并不是很好。所以,我想创建一堆随机时间和随机y位置产生的小行星。我认为最好的方法是做一些数组,但我不知道如何真正实现它,并对整个数组进行冲突检查。以下是我的敌人和比赛场地的相关部分。

奖励指向任何可以帮助我让我的主题音乐工作的人!

import java.awt.*;
import javax.swing.ImageIcon;

public class Enemy 
{
    int x, y;
    Image img;
    boolean isAlive = true;


    public Enemy(int startX, int startY, String location)
    {
        x = startX;
        y = startY;
        ImageIcon l = new ImageIcon(location);
        img = l.getImage();
    }

    public Rectangle getBounds()
    {
        return new Rectangle(x, y, 60, 60);
    }

public class Board extends JPanel implements ActionListener
{
    Player p;
    Image img;
    Timer time;
    Thread animator;
    Enemy en1, en2;
    boolean lost = false;
    static Font font = new Font("SanSerif", Font.BOLD, 24);
    public AudioClip theme;

    public static int score = 0;
    public static int lives = 3;

    public Board() 
    {
        //theme = Applet.newAudioClip(getClass().getResource("images/theme.mid"));
        //theme.play();
        p = new Player();       
        addKeyListener(new ActionListener());
        setFocusable(true);
        ImageIcon i = new ImageIcon("images/background.png");
        img = i.getImage();
        time = new Timer(5, this);
        time.start();
        int v =  172;
        en1 = new Enemy(p.x + 600, 260, "images/enemy1.png");
        en2 = new Enemy(p.x + 600, 200, "images/asteroid.gif");
    }

    public void actionPerformed(ActionEvent e)
    {
        checkCollisions();
        ArrayList bullets = Player.getBullets();

        for(int i = 0; i < bullets.size(); i++)
        {
            Bullet b = (Bullet)bullets.get(i);

            if(b.isVisible() == true)
            {
                b.move();
            }
            else
            {
                bullets.remove(i);
            }
        }

        p.move();

        if(p.x > 400)
        {
            en1.move(p.getdx());
        }
        if(p.x > 500)
        {
            en2.move(p.getdx());
        }
        repaint();
    }

    public void paint(Graphics g)
    {
        if(lost)
        {
            System.out.println("You Lose");
        }
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        if((p.getX() - 590) % 2400 == 0 || (p.getX() - 590) % 2400 == 1)
        {
            p.nx = 0;
        }
        if((p.getX() - 1790) % 2400 == 0 ||(p.getX() - 1790) % 2400 == 1)
        {
            p.nx2 = 0;
        }

        g2d.drawImage(img, 685-p.nx2, 0, null);

        if(p.getX() >= 590)
        {
            g2d.drawImage(img, 685-p.nx, 0, null);
        }

        g2d.drawImage(p.getImage(), p.edge, p.getY(), null);

        ArrayList bullets = Player.getBullets();
        for(int i = 0; i < bullets.size(); i++)
        {
            Bullet b = (Bullet)bullets.get(i);
            g2d.drawImage(b.getImg(), b.getX(), b.getY(), null);
        }
        if(p.x > 400)
        {
            if(en1.isAlive == true)
            {
                g2d.drawImage(en1.getImg(), en1.getX(), en1.getY(), null);
            }
        }
        if(p.x > 500)
        {
            if(en2.isAlive == true)
            {
                g2d.drawImage(en2.getImg(), en2.getX(), en2.getY(), null);
            }           
        }
    }
    public void checkCollisions()
    {
            Rectangle r1 = en1.getBounds();
            Rectangle r2 = en2.getBounds();
            ArrayList bullets = Player.getBullets();

            for (int i = 0; i < bullets.size(); i++)
            {
                Bullet m = (Bullet) bullets.get(i);
                Rectangle m1 = m.getBounds();

                if (r1.intersects(m1) && en1.isAlive())
                {
                    score++;
                    en1.isAlive = false;
                    m.visible = false;
                 }
                 else if (r2.intersects(m1)&& en2.isAlive())
                 {
                     en2.isAlive = false;
                     m.visible = false;
                 }
            }

            Rectangle d = p.getBounds();
            if (d.intersects(r1) || d.intersects(r2))
            {
            lives--;
                    if(lives < 0)
                    {
                        lost = true;
                    }
            }

        }

2 个答案:

答案 0 :(得分:0)

您可能希望在数组上查看本教程:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

您也可能想要考虑一个ArrayList,但由于您在使用数组时遇到困难,我会先坚持使用基础知识。

答案 1 :(得分:0)

前段时间,我做了一个小小行星游戏。在那里我使用Vector作为Asteriord对象的集合。然后在LaserBeam类(星舰有激光枪!),我有这样的事情:

// collision with an asteroid?
for (Asteroid a : getAsteroids())
    if (a.getCp().getBounds2D().intersects(xPos, yPos, width, height))  
    {
        a.newHit();
        break;
    }   

因此光束迭代通过小行星并检查是否有人与光束发生碰撞。在这种情况下,光束和小行星的寿命结束。

如果您有兴趣,可以找到完整的源代码herehere就是小程序游戏。