Java 如何解决乒乓球比赛中的得分问题

Java 如何解决乒乓球比赛中的得分问题,java,Java,我正在用java编写我的第一个游戏之一,我需要在得分方面得到帮助。每次球碰到对方时,每个球员的得分都应该增加。一方面它工作得很好,但另一方面它不工作。另外,在代码中有和我一样多的if语句是否健康/正常 另外,我知道我的代码非常混乱,但这是我第一次在没有完整教程的情况下创建一些东西 import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.Acti

我正在用java编写我的第一个游戏之一,我需要在得分方面得到帮助。每次球碰到对方时,每个球员的得分都应该增加。一方面它工作得很好,但另一方面它不工作。另外,在代码中有和我一样多的if语句是否健康/正常

另外,我知道我的代码非常混乱,但这是我第一次在没有完整教程的情况下创建一些东西

import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Pong extends JPanel implements KeyListener{

int x = 90;
int y = 90;
int rectytop = 30;
int rectytop2 = 30;
int rectybottom = rectytop + 100; 
int rectybottom2 = rectytop2 + 100;
int scoreplayer1 = 0;
int scoreplayer2 = 0;
int xedge2= 448;
int border = 30;
int scoreplayer1a = (int) scoreplayer1;
boolean balldown = true;
boolean ballright = true;
boolean playerborderup = false;
boolean playerborderdown = false;
boolean balltouch1 = false;
boolean balltouch2 = false;
boolean w = false;
boolean s = false;
boolean up = false;
boolean down = false;
boolean goalon1 = false;
boolean goalon2 = false;



private void moveball() {

    if (balldown == true){
        y = y + 2;
    }

    if (y >= getHeight()-border){
        balldown = false;
    }
   if (balldown == false){
        y = y - 2;
    }






   if (ballright == true){
       x = x + 2;
   }
   if (x == getWidth()-border){
       ballright = false;
   }
   if (ballright == false){
       x = x - 2;
   }



   if (y == 0){
       balldown = true;
   }

   if (x == 0){
       ballright = true;
   }



   if (balltouch1 == false){
       if (x == 76){
           if(y < rectybottom && y > rectytop){
               ballright = true;
           }
       }
   }


   if (balltouch2 == false){
       if (x == 390 && y < rectybottom2 && y > rectytop2){
               ballright = false;
       }
   }


}    

@Override
public void paint(Graphics g){
    super.paint(g);

    //drawing ball
    g.fillOval(x, y, 30, 30);
    g.fillRect(48 , rectytop, 30, 100);
    g.fillRect(420, rectytop2, 30, 100);

    g.setFont(new Font("Arial", Font.PLAIN, 100));
    g.drawString(Integer.toString(scoreplayer1a), 175, 100);
    g.drawString(Integer.toString(scoreplayer2), 300, 100);
}

public Timer timer = new Timer(30, new ActionListener(){

        @Override
        public void actionPerformed(ActionEvent e) {

    if (w == true){

           if (rectytop == 0){
            playerborderup = true;
            }
           if (rectytop != 0){
            playerborderup = false;
            }
           if (playerborderup == true){
            rectytop = rectytop + 0;
            rectybottom = rectytop + 100;
            repaint();
            }
           if (playerborderup == false){
            rectytop = rectytop - 5;
            rectybottom = rectytop + 100;
            repaint();
            }
    }

    if (s == true){
                        if (rectytop == 585){
            playerborderdown = true;
        }
        if (rectytop != 585){
            playerborderdown = false;
        }
        if (playerborderdown == true){
            rectytop = rectytop - 0;
            rectybottom = rectytop + 100;
            repaint();
        }
        if (playerborderdown == false){
            rectytop = rectytop + 5;
            rectybottom = rectytop + 100;
            repaint();
        }
    }

    if (up == true){
        if (rectytop2 == 0){
            playerborderup = true;
        }
        if (rectytop2 != 0){
            playerborderup = false;
        }
        if (playerborderup == true){
            rectytop2 = rectytop2 + 0;
            rectybottom2 = rectytop2 + 100;
            repaint();
        }
        if (playerborderup == false){
            rectytop2 = rectytop2 - 5;
            rectybottom2 = rectytop2 + 100;
            repaint();
        }
    }
    if (down == true){
        if (rectytop2 == 585){
            playerborderdown = true;
        }
        if (rectytop2 != 585){
            playerborderdown = false;
        }
        if (playerborderdown == true){
            rectytop2 = rectytop2 - 0;
            rectybottom2 = rectytop2 + 100;
            repaint();
        }
        if (playerborderdown == false){
            rectytop2 = rectytop2 + 5;
            rectybottom2 = rectytop2 + 100;
            repaint();
        }
    }

  }

    });

  public void start(){
   timer.start();
   }

public static void main(String[] args) throws InterruptedException {

    //making the window
    JFrame f = new JFrame("Pong Game");
    JPanel p = new JPanel();
    Pong game = new Pong();
    Font font = new Font("Courier", Font.BOLD, 30);

    f.setVisible(true);
    f.setSize(502, 502);//1024, 724
    f.setResizable(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.addKeyListener(game);
    f.add(game);
    f.add(p);
    game.start();


    //game code

    f.add(game);        
    while (true){
        game.repaint();
        game.moveball();   

        game.setscore();
        Thread.sleep(10); 
    }
}

public void setscore(){
    if (x == 0){
        goalon1 = true;
    }

    if (x != 0){
        goalon1 = false;
    }

    if (x == getWidth()-30){
        goalon2 = true;
    }

    if (x != getWidth()-30){
        goalon2 = false;
    }

    if (goalon1 == true){
        scoreplayer2 ++;
    }
    if (goalon2 == true){
        scoreplayer1 = scoreplayer1 + 1;

    }


}

@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {

    //player one
    if (e.getKeyCode() == KeyEvent.VK_W){
       w = true;     
    }

    if (e.getKeyCode() == KeyEvent.VK_S){
       s = true; 
    }


    //player two
    if (e.getKeyCode() == KeyEvent.VK_UP){
        up = true;

    }

    if (e.getKeyCode() == KeyEvent.VK_DOWN){
        down = true;
    }







}

@Override
public void keyReleased(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_W){
        w = false;
    }
    if (e.getKeyCode() == KeyEvent.VK_S){
        s = false;
    }
    if (e.getKeyCode() == KeyEvent.VK_UP){
        up = false;
    }
    if (e.getKeyCode() == KeyEvent.VK_DOWN){
        down = false;
    }
}
}
导入java.awt.Font;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.Timer;
公共类Pong扩展JPanel实现KeyListener{
int x=90;
int y=90;
int-rectytop=30;
int rectytop2=30;
int rectybottom=rectytop+100;
int rectybottom2=rectytop2+100;
int scoreplayer1=0;
int scoreplayer2=0;
int-xedge2=448;
int-border=30;
int scoreplayer1a=(int)scoreplayer1;
布尔balldown=true;
布尔ballright=true;
布尔值playerOrderUp=false;
布尔值playerOrderDown=false;
布尔balltouch1=假;
布尔balltouch2=假;
布尔w=假;
布尔s=假;
布尔向上=假;
布尔向下=假;
布尔值goalon1=false;
布尔值goalon2=false;
私有void moveball(){
if(balldown==true){
y=y+2;
}
如果(y>=getHeight()-border){
balldown=false;
}
if(balldown==false){
y=y-2;
}
如果(ballright==真){
x=x+2;
}
if(x==getWidth()-border){
ballright=false;
}
如果(ballright==false){
x=x-2;
}
如果(y==0){
balldown=正确;
}
如果(x==0){
ballright=正确;
}
如果(balltouch1==假){
如果(x==76){
if(yrectytop){
ballright=正确;
}
}
}
如果(balltouch2==假){
if(x==390&&yrectytop2){
ballright=false;
}
}
}    
@凌驾
公共空间涂料(图g){
超级油漆(g);
//拉丝球
g、 椭圆形(x,y,30,30);
g、 fillRect(48,Recytop,30100);
g、 fillRect(420,rectytop2,30100);
g、 setFont(新字体(“Arial”,Font.PLAIN,100));
g、 抽绳(整型toString(scoreplayer1a),175100);
g、 抽绳(整数.toString(scoreplayer2),300100);
}
公共计时器计时器=新计时器(30,新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
如果(w==true){
if(rectytop==0){
playerOrderUp=true;
}
if(rectytop!=0){
playerOrderUp=false;
}
如果(playerOrderUp==true){
rectytop=rectytop+0;
rectybottom=rectytop+100;
重新油漆();
}
如果(playerOrderUp==false){
rectytop=rectytop-5;
rectybottom=rectytop+100;
重新油漆();
}
}
如果(s==true){
if(rectytop==585){
playerOrderDown=true;
}
if(rectytop!=585){
playerOrderDown=false;
}
if(playerOrderDown==true){
rectytop=rectytop-0;
rectybottom=rectytop+100;
重新油漆();
}
if(playerOrderDown==false){
rectytop=rectytop+5;
rectybottom=rectytop+100;
重新油漆();
}
}
如果(向上==真){
if(rectytop2==0){
playerOrderUp=true;
}
if(rectytop2!=0){
playerOrderUp=false;
}
如果(playerOrderUp==true){
rectytop2=rectytop2+0;
rectybottom2=rectytop2+100;
重新油漆();
}
如果(playerOrderUp==false){
rectytop2=rectytop2-5;
rectybottom2=rectytop2+100;
重新油漆();
}
}
如果(向下==真){
if(rectytop2==585){
playerOrderDown=true;
}
if(rectytop2!=585){
playerOrderDown=false;
}
if(playerOrderDown==true){
rectytop2=rectytop2-0;
rectybottom2=rectytop2+100;
重新油漆();
}
if(playerOrderDown==false){
rectytop2=rectytop2+5;
rectybottom2=rectytop2+100;
重新油漆();
}
}
}
});
公开作废开始(){
timer.start();
}
公共静态void main(字符串[]args)引发InterruptedException{
//开窗
JFrame f=新JFrame(“乒乓球游戏”);
JPanel p=新的JPanel();
乒乓球游戏=新乒乓球();
Font Font=新字体(“Courier”,Font.BOLD,30);
f、 setVisible(真);
f、 设置大小(502502);/1024724
f、 可设置大小(真);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 addKeyListener(游戏);
f、 添加(游戏);
f、 加(p);
game.start();
//游戏代码
f、 添加(游戏);
while(true){
游戏。重绘();
游戏。移动球();
game.setscore();
睡眠(10);
}
}
公共核心{
如果(x==0){
goalon1=真;
}
如果(x!=0){
goalon1=假;
}
如果(x==getWidth()-30){
goalon2=真;
}
如果(x!=getWidth()-30){
goalon2=假;
}
如果(goalon1==true){
scoreplayer2++;
}
如果(goalon2==true){
scoreplayer1=scoreplayer1+1;
}
}
@凌驾
public void keyTyped(KeyEvent e){
}
@凌驾
按下公共无效键(按键事件e){
//一号玩家
if(e.getKeyCode()==KeyEvent.VK_W){
w=真;
}
如果(例如getKeyCode()==KeyEvent.VK_S){
s=真;
}
//球员二
如果(例如getKeyCode()==KeyEvent.VK_UP){
if (goalon1 == true){
    scoreplayer2 ++;
}
if (goalon2 == true){
    scoreplayer1 = scoreplayer1 + 1;

}