i got problem with KeyListener i got for game. I want from KeyListener got information about pressed space at the moment when level == 0. I want change boolean to true and got that boolean to GameLogic class where i want work with it to change a level from 0 to 1 (i got loop, where when level 3 is finish, game returns to 1). Can somebody help me with it?
Here is my GamePerseus (class where is KeyListener):
public class GamePerseus {
GameLogic logic;
private final int PLAYER_STEPS = 20;
public GamePerseus() {
logic = new GameLogic();
GameGraphics graphic = new GameGraphics(logic);
logic.initialize();
graphic.render(logic);
logic.update();
graphic.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if (!(logic.level == 0)) {
for (Enemy enemy: getEnemies()) {
if (!(enemy.getRectangle_Enemy().intersects(player.getRectangle_Player())))
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT:
logic.setPlayer(new Player(logic.getPlayer().getX(), logic.getPlayer().getY(), "Player_left.png"));
controlledMove(player, Direction.LEFT);
break;
case KeyEvent.VK_RIGHT:
logic.setPlayer(new Player(logic.getPlayer().getX(), logic.getPlayer().getY(), "Player_right.png"));
controlledMove(player, Direction.RIGHT);
break;
case KeyEvent.VK_UP:
logic.setPlayer(new Player(logic.getPlayer().getX(), logic.getPlayer().getY(), "Player_up.png"));
controlledMove(player, Direction.UP);
break;
case KeyEvent.VK_DOWN:
logic.setPlayer(new Player(logic.getPlayer().getX(), logic.getPlayer().getY(), "Player_down.png"));
controlledMove(player, Direction.DOWN);
break;
case KeyEvent.VK_W:
logic.setPlayer(new Player(logic.getPlayer().getX(), logic.getPlayer().getY(), "Player_up.png"));
controlledMove(player, Direction.UP);
break;
case KeyEvent.VK_S:
logic.setPlayer(new Player(logic.getPlayer().getX(), logic.getPlayer().getY(), "Player_down.png"));
controlledMove(player, Direction.DOWN);
break;
case KeyEvent.VK_A:
logic.setPlayer(new Player(logic.getPlayer().getX(), logic.getPlayer().getY(), "Player_left.png"));
controlledMove(player, Direction.LEFT);
break;
case KeyEvent.VK_D:
logic.setPlayer(new Player(logic.getPlayer().getX(), logic.getPlayer().getY(), "Player_right.png"));
controlledMove(player, Direction.RIGHT);
break;
}
else {
keyPressed(null);
keyReleased(null);
keyTyped(null);
}
}
} else {
switch (e.getKeyCode()) {
case KeyEvent.VK_SPACE -> {
System.out.println("Input menu");
logic.setMenu_Switch(true);
}
}
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
Timer timer = new Timer(100, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
graphic.render(logic);
logic.update();
}
});
timer.start();
}
public void controlledMove(Entity entity, Direction direction1) {
logic.getPlayer().move(PLAYER_STEPS, direction1);
}
public GameLogic getLogic() {
return logic;
}
And here is my GameLogic where is that boolean i want set true:
public class GameLogic {
public static Player player;
private static ArrayList<Enemy> enemies;
private ArrayList<Bush> bushes;
private ArrayList<Wall> walls;
private final int ENEMY_STEPS = 2;
private final int ITEM_STEPS = 15;
public PNG bg = new PNG(0,0,"Background_no_object.png");
public PNG logo = new PNG(0,0,"Perseus.png");
public JOptionPane pane = new JOptionPane();
public int time;
public Item item1;
public int level;
public boolean menu_Switch = false;
public GameLogic() {
this.player = null;
this.enemies = new ArrayList<>();
this.bushes = new ArrayList<>();
this.walls = new ArrayList<>();
this.level = 0;
}
public void update() {
for (Wall wall : walls) {
if (level == 0) {
System.out.println("Input není dostupný");
/*System.out.println("Input z KeyListeneru funguje");
pane.showConfirmDialog(pane,"Ahoj hráčí, jsi připraven na tuto skvělou hru?", "Spustit hru :D", JOptionPane.YES_NO_OPTION);
level = 1;
initialize();*/
}
if (!(level == 0)) {
if (level == 1) {
if (item1.isCollided(wall.getRectangle().getBounds())) {
var level1 = JOptionPane.showConfirmDialog(pane,"Dokončení level " + level + ", tvůj čas byl: " + time + "." + "nPřeješ si pokračovat?", "Level 1", JOptionPane.YES_NO_OPTION);
if (level1 == pane.YES_OPTION) {
level = 2;
initialize();
}
else {
System.exit(0);
}
}
} else if (level == 2) {
if (item1.isCollided(wall.getRectangle().getBounds())) {
var level2 = JOptionPane.showConfirmDialog(pane,"Dokončení level " + level + ", tvůj čas byl: " + time + "." + "nPřeješ si pokračovat?", "Level 3", JOptionPane.YES_NO_OPTION);
if (level2 == pane.YES_OPTION) {
level = 3;
initialize();
}
else {
System.exit(0);
}
}
} else if (level == 3) {
if (item1.isCollided(wall.getRectangle().getBounds())) {
var level3 = JOptionPane.showConfirmDialog(pane,"Dokončení level " + level + ", tvůj čas byl: " + time + "." + "nPřeješ si pokračovat?", "Reset hry", JOptionPane.YES_NO_OPTION);
if (level3 == pane.YES_OPTION) {
level = 1;
initialize();
}
else {
System.exit(0);
}
}
}
}
if (!(time == 0)) {
time--;
} else if (time == 0){
JOptionPane.showMessageDialog(null, "Game Over");
initialize();
}
collision();
for (Enemy enemy: enemies) {
enemy.move(ENEMY_STEPS, RIGHT);
}
}
}
Thanks for help.
P.S:
I tried add boolean at GamePerseus class and import at to GameLogic, but without work (not working input). I tried print at update sout about running level 0 (not work)
Lukas Kukkuk is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.