当前位置: 首页 > 知识库问答 >
问题:

使用Threads Java的迷你网球游戏

衡安晏
2023-03-14

我在开发代码时遇到了一些困难。由于我对Java不太先进,所以我需要一些帮助。我正在尝试使用线程开发迷你网球游戏。这个游戏的目的是用球拍捕捉在窗户上移动的球,桨可以用键盘上的左右按钮控制。

这些球应该在窗口上呈对角线移动,当它们接触到任何角落(底部以外)时,它们应该像光线反射一样改变方向。除此之外,当球碰到一个障碍物时,他们也应该改变方向。

窗口底部的拨片可以用左右键控制。运动员的任务是接球。用户接住的球的数量将显示在得分部分,球的总数将显示在底部角落。

用户可能需要保存游戏状态。当用户点击“保存游戏”按钮时;球的位置和得分应该保存到文件中。当用户点击打开按钮时,应该重新加载游戏状态。

我的源代码文件是:

public class BallPanel extends JPanel implements Runnable {

int RED, GREEN, BLUE;
int Xdirection = 1, Ydirection = 1;
boolean pleaseWait = false;

BallPanel(int X, int Y){
    locateBall(X, Y, 30, 30);               
/*  Random r = new Random();
    RED = r.nextInt(255);
    GREEN = r.nextInt(255);
    BLUE = r.nextInt(255);
    */
}   
public void paint(Graphics g){
    int panelWidth = this.getWidth();
    int panelHeight = this.getHeight();     

//  g.setColor( new Color(RED, GREEN, BLUE ));
    g.setColor(Color.ORANGE);

    g.fillOval(panelWidth/2, panelHeight/2,panelWidth/2, panelHeight/2);
}

public void locateBall(int x, int y, int width, int height){

    setBounds(x, y, width, height);
    repaint();
}

public void run() {

    int width = this.getWidth();
    int height = this.getHeight();
    Random r = new Random();

    while(true){
        if(!pleaseWait){
            int lastX = this.getX();
            int lastY = this.getY();

            if (lastX > 675) Xdirection = -1;
            if (lastY > 485) Ydirection = -1;
            if (lastX < -5) Xdirection = 1;
            if (lastY < -5) Ydirection = 1;

    /*      if(lastX > 280 && lastY > 170){
                Xdirection = -1;
                Ydirection = -1;
            }
    */      
            locateBall(lastX + Xdirection*r.nextInt(3), 
                       lastY + Ydirection*r.nextInt(3), 
                       width, height );
        }
        try{
            Thread.sleep(5);
        }catch(Exception e){};
    }

}

}


public class BallWindow extends JFrame implements ActionListener{
    JButton btnStop = new JButton("STOP");
    JButton btnSave = new JButton("SAVE");
    Vector<BallPanel> ballVector = new Vector<BallPanel>();

    JPanel p1 = createPanel(280, 200, 200, 20, Color.gray);
    JPanel p2 = createPanel(280, 300, 200, 20, Color.gray);
    JPanel bottomp = createPanel(345, 540, 70, 15, Color.black);

    JPanel lborder = createPanel(10, 10, 2, 560, Color.black);
    JPanel rborder = createPanel(720, 10, 2, 560, Color.black);
    JPanel tborder = createPanel(10, 10, 710, 2, Color.black);



public BallWindow() {
    setLayout(null);
    btnStop.setBounds(12, 15, 100, 30);
    btnStop.addActionListener(this);
    add(btnStop);
    btnSave.setBounds(12, 50, 100, 30);
    //btnSave.addActionListener(this);
    add(btnSave);
    Random r = new Random();
    for(int i=0; i<7; i++){
        BallPanel bp = new BallPanel(r.nextInt(740), r.nextInt(590));
        Thread t = new Thread(bp);
        ballVector.add(bp);
        t.start();
        add(bp);
    }


    add(p1);
    add(p2);
    add(bottomp);
    add(lborder);
    add(rborder);
    add(tborder);

    setSize(740, 590);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    repaint();
}


JPanel createPanel(int x, int y, int width, int height, Color pColor){
    JPanel temp = new JPanel();
    temp.setBackground(pColor);
    temp.setBounds(x, y, width, height);
    return temp;    
}



public static void main(String[] args) {
    new BallWindow();

}

public void actionPerformed(ActionEvent arg0) {
    for (BallPanel ball : ballVector) {
        ball.pleaseWait = !ball.pleaseWait;
    }

    if( btnStop.getText().equalsIgnoreCase("STOP"))
        btnStop.setText("START");
    else
        btnStop.setText("STOP");

//  if(arg0.getSource())

}

}

我被障碍部分和关键听众卡住了。任何类型的帮助都将不胜感激。

共有1个答案

罗俭
2023-03-14

看看http://zetcode.com/tutorials/javagamestutorial/吧

你应该特别检查一下基础和动画部分。这将有助于清理动画和线程的东西,你正在做的。它还展示了如何实现java游戏的一般模式。

 类似资料:
  • 本教程将教你如何使用 Kivy 编写一款乒乓球游戏。我们将从一个基本的应用程序开始,描述创建这个游戏的每个步骤。 Kivy 是用 Python 和 Cython 编写的,基于 OpenGL ES 2,支持各种输入设备并拥有丰富的部件库。使用相同的代码,你可直接实现多平台应用,包括 Windows、macOS、Linux、Android 和 iOS。所有 Kivy 部件都支持多点触控。

  • 我是库伯内特斯的新手,我正在学习。我有我的视窗8机器,我在那里安装了瓦格兰特。使用流浪者,我运行ubuntu虚拟机,在虚拟机中,我运行3个docker容器。 流浪者档案: 容器 in Ubuntu VM : 在同一个VM中,现在我安装了迷你库贝和库贝特,如此链接中所述 迷你库贝版本: kubectl版本: 迷你库贝在我的 ubuntu VM 中成功启动。我已经创建了 文件。 使用这个yml文件,我

  • 迷你任务(MiniTES)汉化版是一款网页放置游戏,运行于 web 浏览器。 攻略 此攻略仅原版剧情、非常简单; 升级有助于顺利展开剧情,挂机即可; 一些道具需要移动主角到地图各点: 银汐滇池:塞尔拉克 传说。 麦德拉斯:鹤立澳湾 传说。 亜达新村:瑞代尔堡 传说。 黑曜草原:鄂尔科特 传说。 死亡泽塔:奎姆森宫 传说。 天景豪苑:法林深坑 传说。 巴雷斯特:火云雾海 传说。 三角洲头:西鲁瓦恩

  • 本文向大家介绍python使用pygame实现笑脸乒乓球弹珠球游戏,包括了python使用pygame实现笑脸乒乓球弹珠球游戏的使用技巧和注意事项,需要的朋友参考一下 今天我们用python和pygame实现一个乒乓球的小游戏,或者叫弹珠球游戏。 笑脸乒乓球游戏功能介绍 乒乓球游戏功能如下: 乒乓球从屏幕上方落下,用鼠标来移动球拍,使其反弹回去,并获得得分,如果没有接到该球,则失去一条命。玩家有一

  • 问题内容: 我是在Python中创建一个简单的迷你语言解析器之后,在接近问题域的地方进行编程。 无论如何,我想知道这里的人会怎么做-在Python中执行此类操作的首选方式是什么? 我将不提供我所追求的具体细节,因为目前我只是在研究整个领域在Python中有多容易。 感谢您的输入! 问题答案: Pyparsing非常适合编写“小语言”。我在PyCon‘06上做了一个有关编写简单冒险游戏引擎的演示,其

  • 本文向大家介绍python3.6使用tkinter实现弹跳小球游戏,包括了python3.6使用tkinter实现弹跳小球游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python3.6实现弹跳小球游戏的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。