J'ai écrit ce code pour pong très simple et tout fonctionne bien, sauf que je ne peux pas comprendre comment faire fonctionner KeyListener. Je ne sais pas où placer l'auditeur ou comment l'utiliser. Tous les autres conseils sont les bienvenus, je suis un noob alors s'il vous plaît expliquer à ce niveau.KeyListener ne répond pas dans JFrame
package pong;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class Pong extends JPanel implements KeyListener
{
int border = 15;
int enemyScore = 0;
int playerScore = 0;
int ballx = 248;
int bally = 170;
int playerx = 482;
double playery = 162;
int playeryy = 162;
int enemyx = 0;
double enemyy = 162;
int enemyyy = 162;
boolean gameReset = true;
boolean down;
boolean right;
//ball movement
private void moveBall()
{
Random rand = new Random();
while (gameReset == true)
{
ballx = 240;
bally = 170;
down = rand.nextBoolean();
right = rand.nextBoolean();
gameReset = false;
}
if (right == true)
{
ballx++;
}
else
{
ballx--;
}
if (down == true)
{
bally++;
}
else
{
bally--;
}
if(bally == getHeight()-border)
{
down = false;
}
else if (bally == 0)
{
down = true;
}
if (playeryy < bally+14 && playeryy+59 > bally && ballx == 468)
{
right = false;
}
else if (ballx == getWidth()-border)
{
gameReset = true;
enemyScore ++;
}
else if (enemyyy < bally+14 && enemyyy+59 > bally && ballx == 13)
{
right = true;
}
else if (ballx == 0)
{
gameReset = true;
playerScore ++;
}
}
//enemy movement
private void moveEnemy()
{
if (right == false && bally > enemyy+8 && enemyy < 294)
{
enemyy += 0.8;
enemyyy = (int) enemyy;
}
else if (right == false && bally < enemyy+8 && enemyy > 0)
{
enemyy -= 0.8;
enemyyy = (int) enemyy;
}
}
//Drawing
@Override
public void paint(Graphics g)
{
super.paint(g);
g.fillRect(enemyx, enemyyy, 15, 60);
g.fillRect(playerx, playeryy, 15, 60);
g.fill3DRect(ballx, bally, 15, 15, true);
System.out.println("Enemy Score: " + enemyScore + " Player Score: "+ playerScore);
}
public static void main(String[] args) throws InterruptedException
{
JFrame frame = new JFrame("p0ng"); //makes new frame
frame.setSize(512,384); //sets the size
frame.setVisible(true); //makes it visble
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //allows it to sleep
Pong game = new Pong();
frame.add(game);
while(true)
{
game.moveBall();
game.moveEnemy();
game.repaint();
Thread.sleep(10);
}
}
@Override
public void keyTyped(KeyEvent ke) {
//not being used
}
//Player movement
@Override
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_UP && playery < 294)
{
playery += .8;
playeryy = (int) playery;
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN && playery > 0)
{
playery -= .8;
playeryy = (int) playery;
}
repaint();
}
@Override
public void keyReleased(KeyEvent ke) {
//not being used
}
}
Plus vous ajoutez le keylistener à votre cadre – Jens
où dois-je ajouter cela? –
Vous pouvez utiliser Frame.addKeyListener (jeu) – Jens