首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试Java pong

尝试Java pong
EN

Stack Overflow用户
提问于 2012-12-08 01:26:22
回答 2查看 1.2K关注 0票数 0

我在试着做一个Java乒乓球游戏。我几乎没有使用Java的经验,需要一些帮助。我在网上读了很多东西,下面是我想出来的代码。我已经创建了以下类,但我得到的只是一个灰色屏幕。我只是想为此实现最简单的解决方案。有人能指出这段代码有什么问题吗?谢谢。

代码语言:javascript
复制
    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();
        }


    }

代码语言:javascript
复制
    /*
     * 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");
        }


    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-08 01:44:41

看看这个SSCCE是否能更好地满足您的期望,主要问题是扩展和拥有JFrame的实例。

代码语言:javascript
复制
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,
  • 使用键绑定而不是frame
票数 4
EN

Stack Overflow用户

发布于 2012-12-08 01:43:36

  1. 不要将你的类命名为main_class,而是使用MainClassPongWindow来代替Java -> main_class extends JFrame,所以这应该是要实例化的JFrame,不要在constructor.
  2. Create的getter和setter中为Pong_Test_1.
  3. Read中的字段创建新的JFrame。

代码语言:javascript
复制
private final Pong_Test_1 myPong;    

public PongWindow() {
  super();
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.addKeyListener(this);
  this.setFocusable(true);
  this.setResizable(false);
  this.setSize(FRAME_WIDTH,FRAME_HEIGHT);

  myPong = new Pong_Test_1();
  this.getContentPane().add(myPong);

  this.setVisible(true);
}

在你的keyPressed()方法中,使用你的实例来操作。

代码语言:javascript
复制
myPong.p2_pos_y--;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13768027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档