Java抓球游戏

时间:2015-06-08 20:25:36

标签: java swing loops arraylist

我的学校Java项目遇到了问题。 计划是制作一个简单的游戏,你需要接球,如果你接球,你将获得积分。 目前我有两个问题:

  • 我不知道如何让球以随机宽度出现并使其保持在该宽度(导致随机值不断变化)。
  • 我如何发表一个声明,检查捕手是否接球?

这是我目前的代码:

replace
import instruct.*;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO;
import javax.swing.Timer;

public class opdracht extends WindowPanel implements MouseMotionListener {
    List<comet> comets;
    Image afb1;
    Image afb2;
    Image comet;
    int xmuis;
    int score;
    int random;
    int h;
    int plaats;
    static int randomNum;
    private static final int D_W = 700;
    private static final int X_INC = 10;

    public opdracht() throws IOException {
        score = 0;
        h = -100;
        afb1 = ImageIO.read(new File("afb/space.jpg"));
        afb2 = ImageIO.read(new File("afb/pipe.png"));
        BufferedImage cometbuf = ImageIO.read(new File("afb/comet.png"));
        File output = new File("comet.png");
        ImageIO.write(cometbuf, "png", output);
        comet = ImageIO.read(new File("comet.png"));
        addMouseMotionListener(this);
        try {
            drawcomet();
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        plaats = randomNum;
        comets = new LinkedList<>();

        Timer timer = new Timer(40, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Iterator<comet> it = comets.iterator();
                while (it.hasNext()) {
                    comet ball = it.next();
                    if (ball.h > D_W) {
                        it.remove();
                        System.out.println(comets.size());
                    } else {
                        ball.h += X_INC;
                        repaint();
                    }
                }
            }
        });
        timer.start();
    }

    public void paintComponent(Graphics g) {
        g.drawImage(afb1, 0, 0, 1200, 800, this);
        g.setColor(Color.yellow);
        g.setFont(new Font("TimesRoman", Font.PLAIN, 30));
        g.drawString("score = " + score, 1020, 30);
        for (comet ball : comets) {
            ball.drawcomet(g);
        }
        g.drawImage(afb2, xmuis, 730, 70, 75, this);
    }

    public static void randInt(int min, int max) {
        // NOTE: Usually this should be a field rather than a method
        // variable so that it is not re-seeded every call.
        Random rand = new Random();

        // nextInt is normally exclusive of the top value,
        // so add 1 to make it inclusive
        randomNum = rand.nextInt((max - min) + 1) + min;

        System.out.print(randomNum);
    }

    public void drawcomet() throws InterruptedException {
        ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
        exec.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                comets.add(new comet(comet));
            }
        }, 0, 2, TimeUnit.SECONDS);
    }

    public class comet {
        protected int h;
        Image comet;

        public comet(Image image) {
            comet = image;
        }

        public void drawcomet(Graphics g) {
            g.drawImage(comet, plaats, h, 75, 50, null);
        }
    }

    public void mouseMoved(MouseEvent e) {
        xmuis = e.getX();
        repaint();
    }

    public void mouseDragged(MouseEvent e) {
        // do something
    }

    public static void main(String[] a) throws IOException {
        new opdracht().createGUI();
    }
}

1 个答案:

答案 0 :(得分:1)

第一个问题:&#34;我不知道如何让球以随机宽度出现。&#34;

我假设你想给球(= comet类的一个实例)一个随机的x位置(= plaats字段)?您可以进行以下更改(不再需要randomNum字段,现在可以是本地变量):

    //plaats = randomNum;
    plaats = randInt(0, 1200);

    // more code...

//public static void randInt(int min, int max) {
public static int randInt(int min, int max) {

    // more code...

    return randomNum;
}

第二个问题:&#34;如何制作一个声明,检查捕手是否缓存球。&#34;

要确定球是否被捕获,当球的y坐标(xmuis字段?)等于管道的顶部时,您可以将plaatsh进行比较(约730)。