Ich bin dabei ein kleines Spiel zu programmieren. Es gibt einen Spieler, ein Hindernis und eine Zähler, der hochgehen soll, wenn der Spieler das Hindernis berührt. Die Klassen an sich funktionieren. Nur ich verzweifle aktuell bisschen daran alle verschiedene Klassen auf einem Frame darzustellen. Manchmal wird nur eine angezeigt, manchmal gar keine. Ich hab schon bisschen was ausprobiert (anderes Layout usw.), aber das hat alles nicht so funktioniert wie ich es haben will.
Hier noch die Codes:
Hier die Klasse Main, in der das Frame erzeugt wird und im Endeffekt alles drauf gepackt werden soll. Ich hab hier noch ohne Layout gearbeitet weil alle Versuche schiefgingen.
Hier die Klasse Spieler. Funktioniert auch.
Hier die Klasse Hindernis, welche ein Rechteck zufällig auf dem Frame erzeugen soll. Funktioniert auch.
Der Zähler funktioniert auch. p wird genauer beschrieben später.
Also meine Frage lautet wie ich diese ganzen Klassen auf einen Frame darstellen kann.
LG
Hier noch die Codes:
Java:
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class Main extends JFrame {
JPanel panel = new JPanel();
Spieler spieler = new Spieler();
Zähler zähler = new Zähler();
public Main() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(400,400);
add(spieler);
add(zähler); //wenn ich das so hinzufüge sieht man gar nichts mehr. ohen sieht man den Spieler allerdings
}
public static void main (String [] args) {
Main main = new Main();
main.setVisible(true);
}
}
Hier die Klasse Main, in der das Frame erzeugt wird und im Endeffekt alles drauf gepackt werden soll. Ich hab hier noch ohne Layout gearbeitet weil alle Versuche schiefgingen.
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
@SuppressWarnings("serial")
public class Spieler extends JPanel implements KeyListener, ActionListener{
Timer timer = new Timer(5,this);
int x = 0, velX = 0, velY = 0, y = 0;
public Spieler() {
timer.start();
addKeyListener(this);
setFocusable(true);
setRequestFocusEnabled(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(x,y,30,30);
g.setColor(Color.PINK);
g.fillRect(x,y,30,30);
}
@Override
public void actionPerformed(ActionEvent e) {
if(x < 0) {
velX = 0;
x = 0;
}
if(x > 370) {
velX = 0;
x = 370;
}
if(y < 0) {
velY = 0;
y = 0;
}
if(y > 341) {
velY = 0;
y = 341;
}
x = x + velX;
y = y + velY;
repaint();
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_W) {
velX = 0;
velY = -1;
}
if(e.getKeyCode() == KeyEvent.VK_S) {
velX = 0;
velY = 1;
}
if(e.getKeyCode() == KeyEvent.VK_A) {
velX = -1;
velY = 0;
}
if(e.getKeyCode() == KeyEvent.VK_D) {
velX = 1;
velY = 0;
}
}
@Override
public void keyReleased(KeyEvent e) {
velX = 0;
velY = 0;
}
}
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.util.*;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Hindernis extends JPanel{
Random rand = new Random();
public Hindernis() {
}
public void paint(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(rand.nextInt(370),rand.nextInt(341),50,50);
}
}
Java:
import javax.swing.*;
@SuppressWarnings("serial")
public class Zähler extends JLabel{
JTextField zähler = new JTextField();
int p=0;
public Zähler() {
zähler.setBounds(300,0,100,50);
zähler.setText("Punkte: "+p);
zähler.setVisible(true);
zähler.setEditable(false);
}
}
Also meine Frage lautet wie ich diese ganzen Klassen auf einen Frame darstellen kann.
LG