java - 关于创建矩形的问题

标签 java

首先,如果我在错误的地方问这个问题或者问这个问题做了错误的事情,我感到非常抱歉。如果我需要更正任何内容,请通知我。我正在制作一款躲避球类型的游戏,您可以用鼠标移动一个方 block 并尝试躲避敌人。敌人本身就是正方形,他们将来自屏幕的随机侧面。我想知道我怎样才能:

A.让程序自己创建方 block ,玩家得分越高,方 block 的数量就越大。

B.将正方形出现的位置设置为屏幕边缘的随机位置。

这是我的代码。这是我绘制矩形的部分:

public void paint(Graphics g){

        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, 0, 0, this);

    }

    public void paintComponent(Graphics g) {

        Rectangle player = new Rectangle(playerX, playerY, 50, 50);
        g.setColor(Color.blue);
        g.fillRect(player.x, player.y, player.width, player.height);

    }

以下是 GamePanel 类的完整代码:

package main;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JPanel;

public class GamePanel extends JPanel implements Runnable{

    //Global variables

    //Double buffering
    private Image dbImage;
    private Graphics dbg;


    //JPanel variables
    static final int GWIDTH = 500, GHEIGHT = 500;
    static final Dimension gameDim = new Dimension(GWIDTH, GHEIGHT);

    //Game variable
    private Thread game;
    private volatile boolean running = false;
    public boolean mouseClicked = false;

    //Character variables
    int playerX = 150, playerY = 150;

    public class Mouse extends MouseAdapter{

        public void mousePressed(MouseEvent e){

            mouseClicked = true;

        }

        public void mouseReleased(MouseEvent e){

            mouseClicked = false;

        }

        public void mouseMoved(MouseEvent e){

            mouseClicked = false;

            repaint();
            playerX = e.getX()-25;
            playerY = e.getY()-25;
            if(playerX <= 50){
                playerX = 50;
            }
            else if(playerX >= 400){
                playerX = 400;
            }

            if(playerY <= 25){
                playerY = 25;
            }
            else if(playerY >= 400){
                 playerY = 400;
            }

            repaint();

        }
    }



    public GamePanel(){

        addMouseMotionListener(new Mouse());
        setPreferredSize(gameDim);
        setBackground(Color.BLUE);
        setFocusable(true);
        requestFocus(true);

    }

    public void run(){

        while(running){



        }

    }

    public void addNotify(){

        super.addNotify();
        startGame();

    }

    private void startGame(){

        if(game == null || !running){

            game = new Thread(this);
            game.start();
            running = true;

        }

    }

    public void stopGame(){

        if(running){

            running = false;

        }

        //Paint method


    }

    public void paint(Graphics g){

        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, 0, 0, this);

    }

    public void paintComponent(Graphics g) {

        Rectangle player = new Rectangle(playerX, playerY, 50, 50);
        g.setColor(Color.blue);
        g.fillRect(player.x, player.y, player.width, player.height);

    }

    private void log(String s){

        System.out.println(s);

    }

}

感谢您的宝贵时间。

最佳答案

嗯,我想这可能是一个关于如何完成编程任务的问题;所以我会尝试一下。

我不会提供任何代码,而是会提供有关如何实现您想要做的事情的解释。因此,您必须研究或弄清楚编码。

所以 GamePanel 是 java 类中的主要类。

首先创建一个能够自行绘制的 Rectangle 类。您还需要包含一个“移动”方法,以允许矩形(或敌人)自行移动(最好与类型和速度/速度相关)。 在其构造函数内部,您可以将其初始 X、Y 位置设置为随机值。让它从顶部随机开始(假设顶部 = 0,底部 = 屏幕尺寸 y,左侧 = 0,右侧 = 屏幕尺寸 x);你有四个选择: 随机选择顶部的位置,设置 y = 0 且 x = random int;随机选择底部的一个位置,设置 y = 屏幕大小 - 矩形高度,x = random int;对于 left,您将设置 x = 0 和 y = random int;右侧设置 x = 屏幕尺寸 - 矩形宽度。

注意:此矩形类也可用于您的播放器矩形。

接下来,您需要 GamePanel 内部有一个数据结构来包含所有矩形(敌人)。如果您不熟悉数据结构,请查找如何在 java 中执行列表。

还在 GamePanel 中,将 int 变量设置为您想要的最大敌人数量。随着玩家得分的增加,您可以更改此设置。您将需要另一个变量来跟踪当前拥有的敌人数量,如果您使用上述列表,它可能是一个长度方法,您可以使用它来获取内存中当前敌人的数量。

在你的主循环中,检查你有多少敌人,如果数量较少,则创建一个敌人(本质上,如果没有足够的敌人,你将在每个循环中创建一个敌人;这可能太慢或者太快,取决于你想要什么);但基本思想是(在伪代码中):

public void run(){

    while(running){

       if(current_enemies < max_enemies) {
           enemy = new Enemy()
           enemy_list.append(enemy)
       }

    }

}

您必须检查敌人何时跑出屏幕并将其从列表中删除,否则一旦它们全部跑掉,它们将仍然存在,但不会创建新的敌人。

可能不是您正在寻找的答案,但我希望这会有所帮助。

关于java - 关于创建矩形的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730081/

相关文章:

java - 部署到远程服务器后解决/下载依赖项

java - 从列表到详细信息的 Angular 重定向 - 使用共享服务或传递 ID 并调用 Web 服务

java - 增加上传 Play Framework 中的 json 限制

Java Hibernate.merge 在任何情况下都可能返回 null 吗?

java - 有没有办法在调用构造函数时检查我的对象的实例?

java - ActiveMQ主题到队列,使用Camel路由消息从Master切换到Slave时丢失?

java - Apache HttpClient 空响应 header

java - 当你将 int 左移时会发生什么

java - IOException : "Received authentication challenge is null" (Apache Harmony/Android)

java - 如何在 ZK DataBinding 中选择一个模板?