# Pong Spiel Problem



## Robinson97 (31. Mai 2016)

Hallo Forum,
ich wollte mal ein Pong Spiel programmieren und bin dabei auf ein Problem gestoßen:

Sobald das Spiel startet und der Ball sich fortbewegt und dabei ins "Tor" des zweiten Spielers fliegt, wird der Ball wieder zurück in die mitte Gesetzt (was er auch soll) nur plötzlich beginnt der Timer durchzudrehen (3 Sekunden Countdown vor Start) und führt sich dauerhaft selber wieder auf und außerdem Bugt der Ball in der Mitte weiter rum, ohne sich zu bewegen.

Ziel ist es eigentlich, das zu beginn ein Countdown ausgeführt wird, welcher nach 3 Sekunden das Spiel startet (dies geschieht anhand von boolean variabeln). Dieses Spiel soll solange ausgeführt werden, bis ein Tor gefallen ist. Anschließend wird der Countdown neu gestartet und das Spiel beginnt von neuen...

Quellcode:

Variabeln:

```
static boolean start=false;
  static boolean spielablauf=true;
  static boolean tor=true;
  static boolean ball_up=true;
  static int speed;
  static boolean start_to_move_ball=false;
  static int interval;
  static Timer timer;
```

Main:


```
public static void main(String[] args) {
    new ping("ping");
   
    while(spielablauf) {
      try{
        if(tor){
          start=false;
          System.out.print("Neuer Countdown wird gestartet \n");
          start=countdown();
          tor=false;
        }
       
        if(start){
          System.out.print("\n Start des Gameplays !!!!!!!!");
          start_to_move_ball=true;
          tor = gameplay();
          start=false; 
        }
      }catch(IllegalStateException e) {
        System.err.printf(  "\fEin Problem ist mit dem   Timer aufgetreten !!!%n"+e );
       
      }
    }
  }
```

Countdown:

```
public static boolean countdown(){
    int delay = 1000;
    int period = 1000;
    timer = new Timer();
    interval = 4;
   
    timer.scheduleAtFixedRate(new TimerTask() {
      int number=0;
      public void run() {
        number=setInterval();
       
        if(number==0) {
          countdown.setText("Start");
          start=true;
        } else {
          countdown.setText(""+number);
          //System.out.println(number);
        }
       
       
        /*
        if(interval==1)
        {
        System.out.println("Time out");
        //gameplay();
        }  */
       
      }
    }, delay, period);
    return start;
  }

 public static final int setInterval() {
  if (interval == 1)
  timer.cancel();
  return --interval;
  }
```

Gameplay:


```
public static boolean gameplay(){
    //jede Sekunde bewegt sich der Ball vorwäts
    speed=1;
   
    TimerTask action = new TimerTask() {
     
     
      public void run() {
       
        if(start_to_move_ball){
          y1-=speed;
          x1+=speed;
        }
       
        if(ball_up==false){
          start_is_over();
          y1+=speed;       //y bleibt immer konstant +, da der Ball immer nach unten fliegt
          x1-=(speed*-1);
        }
       
        if(y1<=0){
          ball_up=false;
        } 
        ball.setBounds(x1,y1, 35, 41);
       
        if(ball.getX()>= 560){
          tor=true;
          player_1.point();
          lab_3.setText(player_1.getPoints());
        }
       
        if(ball.getX()<= 0){
          tor=true;
          player_2.point();
          points_p2.setText(player_2.getPoints());
        }
       
       
       
        if(y1 >= 400)
        {
          ball_up=false;
        }
       
        if(tor){
          set_ball_to_start();
        }
       
      }
     
     
    } ;
   
    Timer caretaker = new Timer();
    caretaker.schedule(action, 1000, 15);
    return tor;
  }

public static void start_is_over(){
  start_to_move_ball =false;
  }
 
  public static void set_ball_to_start(){
  ball.setBounds(248,160, 35, 41);
  }
```

PS: Mir ist bewusst, dass das mit dem Aprallen von der Wand so nicht funktionieren kann. Außerdem sind Konsolenausgaben nur zu Testzwecken gedacht...

Vielen Dank für eure HILFE


----------



## Robinson97 (5. Jun 2016)

Robinson97 hat gesagt.:


> *if*(ball.getX()>= 560){


Hab den Fehler selbst gefunden:
Statt >= kommt hier ein == hin...


----------

