Hallo,
Ich habe ein Labyrinth in Java programmiert.
Mein Problem ist nun, dass die Kollision Sachen macht, die ich nicht verstehe xD
Hier ist der Code den ich verwende...
Komischerweise rendert er das Spiel richtig hat jedoch die Falsche Kollision.
Hat jemand eine Idee wo ich was falsch gemacht haben kann?
Danke für eure Hilfe
PS: Außerdem Habe ich Probleme mit dem zeichnen welches immer flackert (also bei repeint()
. Ideen?
Ich habe ein Labyrinth in Java programmiert.
Mein Problem ist nun, dass die Kollision Sachen macht, die ich nicht verstehe xD
Java:
package aMazeIng;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class aMazeIng extends JFrame {
private JPanel contentPane;
public int[][] level1 = new int[][] {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1 },
{ 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1 },
{ 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1 },
{ 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1 },
{ 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1 },
{ 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1 },
{ 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1 },
{ 1, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, };
public int playerX = 1;
public int playerY = 1;
Toolkit tk = Toolkit.getDefaultToolkit();
int xSize = ((int) tk.getScreenSize().getWidth());
int ySize = ((int) tk.getScreenSize().getHeight());
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
aMazeIng frame = new aMazeIng();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public aMazeIng() {
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
}
private void goDown() {
if (level1[playerX][playerY + 1] == 0) {
System.out.println("Frei!");
playerY++;
repaint();
} else if (level1[playerX][playerY + 1] == 1) {
System.out.println("Mauer!");
} else if (level1[playerX][playerY + 1] == 3) {
System.out.println("Ziel!");
playerY++;
repaint();
}
}
private void goUp() {
if (level1[playerX][playerY - 1] == 0) {
System.out.println("Frei!");
playerY--;
repaint();
} else if (level1[playerX][playerY - 1] == 1) {
System.out.println("Mauer!");
} else if (level1[playerX][playerY - 1] == 3) {
System.out.println("Ziel!");
playerY--;
repaint();
}
}
private void goRight() {
if (level1[playerX + 1][playerY] == 0) {
System.out.println("Frei!");
playerX++;
repaint();
} else if (level1[playerX + 1][playerY] == 1) {
System.out.println("Mauer!");
} else if (level1[playerX + 1][playerY] == 3) {
System.out.println("Ziel!");
playerX++;
repaint();
}
}
private void goLeft() {
if (level1[playerX - 1][playerY] == 0) {
System.out.println("Frei!");
playerX--;
repaint();
} else if (level1[playerX - 1][playerY] == 1) {
System.out.println("Mauer!");
} else if (level1[playerX - 1][playerY] == 3) {
System.out.println("Ziel!");
playerX--;
repaint();
}
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 340, 277);
contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
contentPane.setForeground(Color.WHITE);
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
setUndecorated(true);
JButton btnLeft = new JButton("<--");
btnLeft.setBounds(0, 20, 50, 240);
btnLeft.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (level1[playerX - 1][playerY] == 0) {
System.out.println("Frei!");
playerX--;
repaint();
} else if (level1[playerX - 1][playerY] == 1) {
System.out.println("Mauer!");
} else if (level1[playerX - 1][playerY] == 3) {
System.out.println("Ziel!");
playerX--;
repaint();
}
}
});
contentPane.setLayout(null);
contentPane.add(btnLeft);
JButton btnRight = new JButton("-->");
btnRight.setBounds(240 + 50, 20, 50, 240);
btnRight.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (level1[playerX + 1][playerY] == 0) {
System.out.println("Frei!");
playerX++;
repaint();
} else if (level1[playerX + 1][playerY] == 1) {
System.out.println("Mauer!");
} else if (level1[playerX + 1][playerY] == 3) {
System.out.println("Ziel!");
playerX++;
repaint();
}
}
});
contentPane.add(btnRight);
JButton btnUp = new JButton("up");
btnUp.setBounds(0, 0, 340, 20);
btnUp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (level1[playerX][playerY - 1] == 0) {
System.out.println("Frei!");
playerY--;
repaint();
} else if (level1[playerX][playerY - 1] == 1) {
System.out.println("Mauer!");
} else if (level1[playerX][playerY - 1] == 3) {
System.out.println("Ziel!");
playerY--;
repaint();
}
}
});
contentPane.add(btnUp);
JButton btnDown = new JButton("down");
btnDown.setBounds(0, 257, 340, 20);
btnDown.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (level1[playerX][playerY + 1] == 0) {
System.out.println("Frei!");
playerY++;
repaint();
} else if (level1[playerX][playerY + 1] == 1) {
System.out.println("Mauer!");
} else if (level1[playerX][playerY + 1] == 3) {
System.out.println("Ziel!");
playerY++;
repaint();
}
}
});
contentPane.add(btnDown);
}
@Override
public void paint(Graphics g) {
super.paintComponents(g);
// super.paint(g);
g.setColor(Color.BLACK);
g.fillRect(50, 20, 240, 240);
for (int i = 0; i < level1.length; i++) {
for (int r = 0; r < level1[0].length; r++) {
if (level1[r][i] == 0) {
g.setColor(Color.WHITE);
g.fillRect(i * 20 + 50, r * 20 + 20, 20, 20);
}
if (level1[r][i] == 1) {
g.setColor(new Color(0x315e12));
g.fillRect(i*20+50, r*20+20, 20,20);
g.setColor(new Color(0x65ab36));
g.fillRect(i*20+53, r*20+23, 14,14);
}
if (level1[r][i] == 3) {
g.setColor(Color.GREEN);
g.fillRect(i * 20 + 50, r * 20 + 20, 20, 20);
}
}
}
Random rand = new Random();
float r = rand.nextFloat();
float d = rand.nextFloat();
float b = rand.nextFloat();
Color randomColor = new Color(r, d, b);
g.setColor(randomColor);
g.setColor(Color.BLUE);
g.fillRect(playerX * 20 + 50, playerY * 20 + 20, 20, 20);
}
}
Hier ist der Code den ich verwende...
Komischerweise rendert er das Spiel richtig hat jedoch die Falsche Kollision.
Hat jemand eine Idee wo ich was falsch gemacht haben kann?
Danke für eure Hilfe
PS: Außerdem Habe ich Probleme mit dem zeichnen welches immer flackert (also bei repeint()
Zuletzt bearbeitet: