Ich hab hier ein kleines Spiel geschrieben. Es gibt einen Spieler(Pinkes Rechteck) und ein Hindernis das sich zufällig positioniert(Grünes Rechteck). Außerdem hab ich ein JTextField erzeugt namens "Zähler". Ich möchte, dass jedes mal wenn ich das Hindernis berühre der Zähler um eins hochgeht. Ich hab dafür die Variable p angelegt. Mein erster Versuch war, p=p+1; in den ActionListener zu schreiben, weil ich da auch schon den code für die Kollision zwischen Spieler und Hindernis geschrieben habe und das dann ja die selben Koordinaten sind die abgeprüft werden müssen wenn p um eins größer werden soll. Allerdings hat das alles nicht funktioniert und jetzt würde ich gerne wissen wie man das löst und ob das überhaupt funktionieren kann.
Hier noch der code von der Klasse Spieler:
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 Spiel extends JLabel implements KeyListener, ActionListener{
JTextField zähler = new JTextField();
Timer timer = new Timer(5,this);
int x = 0, velX = 0, velY = 0, y = 0, p=0;
int RandomYMin;
int RandomYMax;
int RandomXMin;
int RandomXMax;
int RandomBreiteMin;
int RandomBreiteMax;
int RandomHoeheMin;
int RandomHoeheMax;
int random_intY;
int random_intX;
public Spiel() {
zähler.setBounds(300,0,100,50);
zähler.setText("Punkte:"+p); //p ändert nicht
zähler.setEnabled(true);
zähler.setVisible(true);
zähler.setEditable(false);
timer.start();
addKeyListener(this);
setFocusable(true);
setRequestFocusEnabled(false);
int RandomYMin=1;
int RandomYMax=341;
int RandomXMin=1;
int RandomXMax=370;
random_intY = (int)Math.floor(Math.random()*(RandomYMin+RandomYMax+1)+RandomYMin);
random_intX = (int)Math.floor(Math.random()*(RandomXMin+RandomXMax+1)+RandomXMin);
if(random_intY<=0+30) {
random_intY=0+60;
}
if(random_intY>=341-60) {
random_intY=341-60;
}
if(random_intX+50>=370-30) {
random_intX=370-60;
}
if(random_intX<=0+60) {
random_intX=0+60;
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(x,y,30,30);
g.setColor(Color.PINK);
g.fillRect(x,y,30,30);
g.drawRect(random_intX,random_intY,50,50);
g.setColor(Color.GREEN);
g.fillRect(random_intX,random_intY,50,50);
}
@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;
}
if(y+30==random_intY&&x+30>=random_intX&&x<=random_intX+50) {
y=y-1;
}
if(y==random_intY+50&&x+30>=random_intX&&x<=random_intX+50) {
y=y+1;
}
if(x+30==random_intX&&y+30>=random_intY&&y<=random_intY+50) {
x=x-1;
}
if(x==random_intX+50&&y+30>=random_intY&&y<=random_intY+50) {
x=x+1;
}
x = x + velX;
y = y + velY;
repaint();
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@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;
}
}
Hier noch der code von der Klasse Spieler:
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 Spiel extends JLabel implements KeyListener, ActionListener{
JTextField zähler = new JTextField();
Timer timer = new Timer(5,this);
int x = 0, velX = 0, velY = 0, y = 0, p=0;
int RandomYMin;
int RandomYMax;
int RandomXMin;
int RandomXMax;
int RandomBreiteMin;
int RandomBreiteMax;
int RandomHoeheMin;
int RandomHoeheMax;
int random_intY;
int random_intX;
public Spiel() {
zähler.setBounds(300,0,100,50);
zähler.setText("Punkte:"+p); //p ändert nicht
zähler.setEnabled(true);
zähler.setVisible(true);
zähler.setEditable(false);
timer.start();
addKeyListener(this);
setFocusable(true);
setRequestFocusEnabled(false);
int RandomYMin=1;
int RandomYMax=341;
int RandomXMin=1;
int RandomXMax=370;
random_intY = (int)Math.floor(Math.random()*(RandomYMin+RandomYMax+1)+RandomYMin);
random_intX = (int)Math.floor(Math.random()*(RandomXMin+RandomXMax+1)+RandomXMin);
if(random_intY<=0+30) {
random_intY=0+60;
}
if(random_intY>=341-60) {
random_intY=341-60;
}
if(random_intX+50>=370-30) {
random_intX=370-60;
}
if(random_intX<=0+60) {
random_intX=0+60;
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(x,y,30,30);
g.setColor(Color.PINK);
g.fillRect(x,y,30,30);
g.drawRect(random_intX,random_intY,50,50);
g.setColor(Color.GREEN);
g.fillRect(random_intX,random_intY,50,50);
}
@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;
}
if(y+30==random_intY&&x+30>=random_intX&&x<=random_intX+50) {
y=y-1;
}
if(y==random_intY+50&&x+30>=random_intX&&x<=random_intX+50) {
y=y+1;
}
if(x+30==random_intX&&y+30>=random_intY&&y<=random_intY+50) {
x=x-1;
}
if(x==random_intX+50&&y+30>=random_intY&&y<=random_intY+50) {
x=x+1;
}
x = x + velX;
y = y + velY;
repaint();
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@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;
}
}