首先,如果我在错误的地方提出这个问题或者通过询问这个问题做错事我很抱歉。如果我需要纠正任何问题,请通知我。我正在制作一个躲闪球类型的游戏,你用鼠标移动一个方块,并试图躲避敌人。敌人将自己成为正方形,并且它们将来自屏幕的随机侧面。我想知道我怎么做:
一个。让程序自己创建正方形,增加玩家得分的数量。
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);
}
}
感谢您的时间。
答案 0 :(得分:1)
嗯,我想这可能是一个关于如何完成编程任务的问题;所以我会试一试。
我不会给出任何代码,而是会提供有关如何实现您想要做的事情的解释。所以你必须研究或弄清楚编码。
所以GamePanel是你java类中的主要类。
首先创建一个能够自己绘制的Rectangle类。您还需要包含一个&#34;移动&#34;允许矩形(或敌人)自行移动的方法(最好与类型和速度/速度有关)。 在其构造函数内部,您可以将其初始X,Y位置设置为随机值。让它从顶部随机开始(假设顶部= 0,底部=屏幕尺寸y,左边= 0,右边=屏幕尺寸x);你有四个选择:在顶部随机选择一个位置,设置y = 0和x = random int;随机选择底部设置的位置y =屏幕尺寸 - 矩形高度,x =随机int;左边你设置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)
}
}
}
你必须检查敌人何时离开屏幕并从列表中移除它们,否则一旦它们全部跑掉它们仍将存在但不会创建新的敌人。
可能不是你想要的答案,但我希望这有帮助。