gpt4 book ai didi

java - 尝试 Java 乒乓球

转载 作者:行者123 更新时间:2023-12-01 17:27:28 26 4
gpt4 key购买 nike

我正在尝试做一个 Java Pong 游戏。我对 Java 的经验很少,需要一些帮助。我在网上阅读了很多内容,下面是我想出的代码。我创建了以下类,但我得到的只是灰屏。我只是想为此实现最简单的解决方案。谁能指出这段代码有什么问题吗?谢谢。

    package pong_test_1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
*
* @author jtrinidad
*/

public class main_class extends JFrame implements KeyListener{
static final int FRAME_WIDTH = 800;
static final int FRAME_HEIGHT = 500;
JFrame f;

public main_class()
{
super();
addKeyListener (this);
setFocusable (true);

f = new JFrame("Pong");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setResizable(false);

f.setSize(FRAME_WIDTH,FRAME_HEIGHT);
f.setVisible(true);

}

@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
Pong_Test_1 p = new Pong_Test_1();
int keyCode = e.getKeyCode();
switch( keyCode ) {
case KeyEvent.VK_UP:
Pong_Test_1.p2_pos_y--;
break;
case KeyEvent.VK_DOWN:
Pong_Test_1.p2_pos_y++;
break;
case KeyEvent.VK_Q:
Pong_Test_1.p1_pos_y++;
break;
case KeyEvent.VK_A :
Pong_Test_1.p1_pos_y++;
break;
}
add(p);
repaint();
}

/** Handle the key released event from the text field. */
@Override
public void keyReleased(KeyEvent e) {

}

public static void main(String[] args) {
// TODO code application logic here
main_class c = new main_class();
}


}

    /*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pong_test_1;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;



/**
*
* @author jtrinidad
*/
public class Pong_Test_1 extends JPanel implements ActionListener{

/**
* @param args the command line arguments
*/
//Sizes of each object
static final int WIDTH = 10;
static final int HEIGHT = 120;
static final int RADIUS = 10;
//Position of Player 1's paddle
static int p1_pos_x = 10;
static int p1_pos_y = main_class.FRAME_HEIGHT/2;
//Position of Player 2's paddle
static int p2_pos_x = main_class.FRAME_WIDTH - 20;
static int p2_pos_y = main_class.FRAME_HEIGHT/2;;
//Position of the ball
static int ball_pos_x;
static int ball_pos_y;


Timer animator;

public Pong_Test_1()
{
animator = new Timer (10, this);
animator.start();
}


public void paintComponent(Graphics g){
super.paintComponent(g);
this.setBackground(Color.BLACK); //Sets background color

g.setColor(Color.WHITE);
g.fillRect(p1_pos_x, p1_pos_y, WIDTH, HEIGHT);
g.fillRect(p2_pos_x, p2_pos_y, WIDTH, HEIGHT);
g.fillOval(100, 100, RADIUS, RADIUS);
}

public void actionPerformed( ActionEvent e ) {
repaint();
revalidate(); // new line
}

private void addKeyListener(Pong_Test_1 aThis) {
throw new UnsupportedOperationException("Not yet implemented");
}


}

最佳答案

看看这个 SSCCE更符合您的期望,主要问题是扩展和拥有 JFrame 实例。

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;

public class main_class implements KeyListener {

static final int FRAME_WIDTH = 800;
static final int FRAME_HEIGHT = 500;
JFrame f;

public main_class() {
f = new JFrame("Pong");

JPanel gui = new JPanel();
gui.setFocusable(true);
gui.addKeyListener(this);
f.setContentPane(gui);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setResizable(false);

f.setSize(FRAME_WIDTH, FRAME_HEIGHT);
f.setVisible(true);
}

@Override
public void keyTyped(KeyEvent e) {
}

@Override
public void keyPressed(KeyEvent e) {
// this will steal the focus for KeyEvents, or rather..
// Pong_Test_1 p = new Pong_Test_1();
int keyCode = e.getKeyCode();
System.out.println(e);
switch (keyCode) {
case KeyEvent.VK_UP:
Pong_Test_1.p2_pos_y--;
break;
case KeyEvent.VK_DOWN:
Pong_Test_1.p2_pos_y++;
break;
case KeyEvent.VK_Q:
Pong_Test_1.p1_pos_y++;
break;
case KeyEvent.VK_A:
Pong_Test_1.p1_pos_y++;
break;
}
// ..adding it will steal the content area & focus
//add(p);
f.repaint();
}

/**
* Handle the key released event from the text field.
*/
@Override
public void keyReleased(KeyEvent e) {
}

public static void main(String[] args) {
// TODO code application logic here
main_class c = new main_class();
}
}

一般建议:

  • 不要扩展框架,只需保留对框架的引用即可。
  • 对于 Swing,请使用键绑定(bind)而不是 KeyListener

关于java - 尝试 Java 乒乓球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13768027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com