Я пытаюсь создать простую 2d игру, и я новичок в программировании. Моя проблема в том, что я пытаюсь создать разные типы прямоугольников в разных классах и добавить их в мой JFrame. Я попытался возиться с добавлением их в JPanel, но тогда я не могу разместить прямоугольники по заданной координате. Компонент игрока является подвижным, а другой будет сплошной стеной, через которую игрок не сможет пройти (но то, что стена сплошная, сейчас не имеет значения).
Поэтому мой вопрос заключается в том, как я могу добавить компонент баррикады и компонент игрока в JFrame и при этом иметь возможность назначать им позиции.
Вот мой код:
Класс арены:
import javax.swing.*;
public class Arena {
public static void main(String args[]){
JFrame f = new JFrame();
Player s = new Player();
Barricade x = new Barricade();
f.add(x);
f.add(s);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(1000, 1028);
f.setResizable(false);
}
}
Класс игрока:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Rectangle2D;
import javax.swing.*;
public class Player extends JPanel implements ActionListener, KeyListener{
Timer t = new Timer(5, this);
int x = 0, y = 0;
public Player() {
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.fill(new Rectangle2D.Double(x * 100, y * 100, 100, 100));
}
public void actionPerformed(ActionEvent e) {
repaint();
}
public void up() {
if (y == 0) {
} else {
y += -1;
x += 0;
}
}
public void down() {
if(y == 9){}
else{
y += 1;
x += 0;}
}
public void left() {
if(x == 0){}
else{
y += 0;
x += -1;}
}
public void right() {
if(x == 9){}
else{
y += 0;
x += 1;}
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_UP) {
up();
}
if (code == KeyEvent.VK_DOWN) {
down();
}
if (code == KeyEvent.VK_RIGHT) {
right();
}
if (code == KeyEvent.VK_LEFT) {
left();
}
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) { }
}
Класс баррикады:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
public class Barricade extends JComponent {
private int x;
private int y;
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.GREEN);
g2.fill(new Rectangle2D.Double(500, 500, 100, 100));
}
}