Cześć,
nieudolnie próbuję stworzyć moją pierwszą grę. Menu.java ją uruchamia:
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Menu extends JFrame {
Panel ballPanel = new Panel();
Panel commandsPanel = new Panel();
final int max = 10;
int num;
Ball[] ball = new Ball[max];
private Board displayBoard;
public Menu() {
initUI();
displayBoard = new Board();
add(displayBoard);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Font f = new Font("Courier", Font.BOLD, 18);
Label titleLabel = new Label("GO GO LUKE", Label.CENTER);
titleLabel.setFont(f);
commandsPanel.add(titleLabel);
commandsPanel.setLayout(new GridLayout(6, 10));
addButton(commandsPanel, "Start", new ActionListener() {
public void actionPerformed(ActionEvent evt) {
}
});
addButton(commandsPanel, "Dodaj kulke", new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Ball b = new Ball(ballPanel);
b.start();
}
});
addButton(commandsPanel, "OUT", new ActionListener() {
public void actionPerformed(ActionEvent evt) {
}
});
ballPanel.setBackground(Color.WHITE);
add(ballPanel, BorderLayout.CENTER);
add(commandsPanel, BorderLayout.WEST);
}
private void addButton(Panel p, String title, ActionListener a) {
Button b = new Button(title);
p.add(b);
b.addActionListener(a);
}
private void initUI() {
setTitle("GoGoLuke");
setSize(700, 700);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(() - > {
Menu ex = new Menu();
ex.setVisible(true);
});
}
}
Dodatkowo mam klasy:
Ball.java
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Panel;
public class Ball extends Thread {
Panel pl;
static final int XSIZE = 15;
static final int YSIZE = 15;
int x = 100;
int y = 100;
int dx = 2;
int dy = 2;
// konstruktor
public Ball(Panel b) {
pl = b;
}
public void draw() {
Graphics g = pl.getGraphics();
g.fillOval(x, y, XSIZE, YSIZE);
g.dispose();
}
public void move() {
if (!pl.isVisible())
return;
Graphics g = pl.getGraphics();
g.setXORMode(pl.getBackground());
g.fillOval(x, y, XSIZE, YSIZE);
Dimension d = pl.getSize();
x += dx;
y += dy;
if (x < 0) {
x = 0;
dx = -dx;
}
if (x + XSIZE >= d.width) {
x = d.width - XSIZE;
dx = -dx;
}
if (y < 0) {
y = 0;
dy = -dy;
}
if (y + YSIZE >= d.height) {
y = d.height - YSIZE;
dy = -dy;
}
g.fillOval(x, y, XSIZE, YSIZE);
g.dispose();
}
public void run() {
try {
draw();
for (;;) {
move();
sleep(5);
}
} catch (InterruptedException e) {}
}
}
oraz Board.java
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Board extends JPanel
implements ActionListener {
private final int INITIAL_X = 300;
private final int INITIAL_Y = 300;
private final int DELAY = 500;
private Image luke;
private Timer timer;
private int x, y;
public Board() {
initBoard();
}
private void loadImage() {
ImageIcon ii = new ImageIcon("luke.png");
luke = ii.getImage();
}
private void initBoard() {
setBackground(Color.WHITE);
setDoubleBuffered(true);
loadImage();
x = INITIAL_X;
y = INITIAL_Y;
}
public void gameStart() {
timer = new Timer(DELAY, this);
timer.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
drawLuke(g);
}
private void drawLuke(Graphics g) {
g.drawImage(luke, x, y, this);
Toolkit.getDefaultToolkit().sync();
}
public void moveLeft() {
x -= 50; //o ile luke przechodzi w lewo
repaint();
}
public void moveRight() {
x += 50;
repaint();
}
public void moveUp() {
y -= 50;
repaint();
}
public void moveDown() {
y += 50;
repaint();
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
}
}
Co muszę zmienić aby stworek i piłki pojawiły się jednocześnie? Gdy usuwam piłki pojawia się stworek więc coś go przykrywa... :/