# Warum tut der Gegner nicht das was er soll?



## NHI (4. Jul 2018)

Hi, bin immer noch bei Pong und bin eigentlich fast fertig nur dass der Gegner sich nach dem er sich nach unten bewegt hat nicht wieder nach oben bewegt, wär nett wennihr mir mal wieder helfen könntet


----------



## NHI (4. Jul 2018)

```
package pack1;

import java.util.Timer;
import java.util.TimerTask;

public class BallKollision {
Timer kollision;
    public BallKollision() {
        kollision = new Timer();
        kollision.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                if (Var.bally +50 >= Var.screenHöhe) {
                   
                    Var.ballriy = -1;
                   
                }
               
                if (Var.bally <= 0)  {
                   
                    Var.ballriy = 1;
                }
                if (Var.ballx+20 >= Var.screenBreite) {
                   
                    Var.ballx = Var.screenBreite/2-10;
                    Var.bally =Var.screenHöhe/2-10;
                   
                    Var.ballrix = -1;
                    Var.playerpoints += 1;
                }
               
                if (Var.ballx <= 0)  {
                   
                    Var.ballx = Var.screenBreite/2-10;
                    Var.bally =Var.screenHöhe/2-10;
                   
                    Var.ballrix = 1;
                    Var.gegnerpoints += 1;
                   
                }
               
                if ((Var.ballx < Var.x+25) && (Var.ballx > Var.x)&&(Var.bally -20 <= Var.y+150) && (Var.bally>Var.y))  {
                   
                    Var.ballrix = 1;
                }
               
               
               
if ((Var.ballx < Var.gegnerx) && (Var.ballx > Var.gegnerx-25)&&(Var.bally -20 <= Var.gegnery+150) && (Var.bally>Var.gegnery))  {
                   
                    Var.ballrix = -1;
                }
               
               
               
            }
           
           
           
           
        }, 0, 3);
    }

}
```


----------



## NHI (4. Jul 2018)

```
package pack1;

import java.util.Timer;
import java.util.TimerTask;

public class BallMovement {
Timer move;
    public BallMovement() {
    move = new Timer();
    move.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
         Var.ballx += Var.ballrix;
         Var.bally += Var.ballriy;
           
        }
       
       
       
       
       
       
       
    }, 0, 3);
   
   
   
   
   
   
   
    }
}
```


----------



## NHI (4. Jul 2018)

```
package pack1;

import java.awt.*;

import javax.swing.JLabel;

public class Draw extends JLabel {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    protected void paintComponent (Graphics g) {
       
        super.paintComponent( g);
       
        Graphics2D g2D = (Graphics2D) g;
        g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
       
        g.setColor(Color.black);
        g.fillRect(0, 0, Var.screenBreite, Var.screenHöhe);                    // hier taucht das problem auf, dass das fenster beim abspielen des programms nicht schwarz ist
          
        g.setColor(Color.white);
       
        for (int i = 0; i <= 30; i++)  {
            g.fillRect(Var.screenBreite/2-5, i*20, 10, 10);
           
        }
       
     g.fillRect(Var.x, Var.y, 25, 150);
     g.fillRect(Var.gegnerx, Var.gegnery, 25, 150);   
     g.drawString("Meine Punkte"+Var.playerpoints, Var.screenBreite/2-95, 75);
     g.drawString("deine Punkte"+Var.gegnerpoints, Var.screenBreite/2+95, 75);
     g.fillRect(Var.ballx, Var.bally, 20, 20);
    
    
        repaint();
   
       
       
       
       
       
       
           
       
       
       
       
       
       
       
       
       
       
       
    }
   
   
}
```


----------



## NHI (4. Jul 2018)

```
package pack1;

import java.util.Timer;
import java.util.TimerTask;

public class GegnerMovement {
Timer move;
    public GegnerMovement() {
        move = new Timer();
        move.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
               
                  {
                   
                    if (Var.ballx >= Var.screenBreite/2-10)  {
                       
                        if (Var.bally == Var.gegnery)  {
                           
                           
                        }
                       
                        else if (Var.bally > Var.gegnery+75)  {
                           
                            if (Var.gegnery <= Var.screenHöhe-200) {
                               
                               
                                Var.gegnery += 2;
                            }else if (Var.gegnery < Var.gegnery+75)  {
                               
                                if (Var.gegnery >= 20)  {
                                    Var.gegnery -= 2;
                                   
                                   
                                }
                            }
                        }
                       
                    }
                   
                   
                }
               
               
               
               
           
           
           
            }
        }, 0, 3);
    }

}
```


----------



## NHI (4. Jul 2018)

```
package pack1;

import javax.swing.*;

public class GUI {

    public GUI() {
        // TODO Auto-generated constructor stub
        Var.jf1 = new JFrame();
        Var.jf1.setSize(Var.screenBreite, Var.screenHöhe);
        Var.jf1.setTitle("Pong");
        Var.jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Var.jf1.setLayout(null);
        Var.jf1.setResizable(false);
        Var.jf1.setVisible(true);
        Var.jf1.setLocationRelativeTo(null);
        Var.jf1.addKeyListener(new KeyHandler());
        Var.jf1.requestFocus();
        Var.jf1.getContentPane().setBackground(java.awt.Color.BLACK);
       
        Draw lbldraw = new Draw();
        lbldraw.setBounds( 0,0, Var.screenBreite, Var.screenHöhe );
        lbldraw.setVisible(true);
        Var.jf1.add(lbldraw);
       
       
}
}
```


----------



## NHI (4. Jul 2018)

```
package pack1;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class KeyHandler implements KeyListener {

    @Override
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        if (e.getKeyCode() == KeyEvent.VK_W) {
            Var.moveup = true;
        }

        else if (e.getKeyCode() == KeyEvent.VK_S) {

            Var.movedown = true;

        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
        if (e.getKeyCode() == KeyEvent.VK_W) {
            Var.moveup = false;
        }

        else if (e.getKeyCode() == KeyEvent.VK_S) {

            Var.movedown = false;

        }

    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }

}
```


----------



## NHI (4. Jul 2018)

```
package pack1;

public class Main {

    public static void main(String[] args) {
       
        new GUI();
        new Var();
        new Movement();
        new GegnerMovement();
        new BallMovement();
        new BallKollision();
    }

}
```


----------



## NHI (4. Jul 2018)

```
package pack1;

import java.util.Timer;
import java.util.TimerTask;

public class Movement {
Timer move;
    public Movement() {
        move = new Timer();
        move.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
               
                if (Var.moveup == true )  {
                   
                    if (Var.y >= 20) {
                       
                        Var.y -= 2;
                    }
                   
           
                }
                else if (Var.movedown == true )  {
                   
                    if (Var.y <= 400)  {
                       
                        Var.y += 2;
                    }
                   
                   
                }
                   
                   
                   
                   
                   
                   
            }
           
           
           
           
           
           
           
        }, 0, 3);
    }

}
```


----------



## NHI (4. Jul 2018)

```
package pack1;

import javax.swing.*;

public class Var {
     static JFrame jf1;
     static int screenBreite = 800, screenHöhe = 600;
     static int x = 20, y = 185;
     static int gegnerx = 755, gegnery = 185;
     static int ballx = 200, bally = 200;
     static boolean moveup = false, movedown = false ;
     static int playerpoints = 0, gegnerpoints = 0;
     static int ballrix = 1;
     static int ballriy = -1;
    public Var() {
        // TODO Auto-generated constructor stub
    }

}
```


----------



## mihe7 (4. Jul 2018)

Auf den ersten Blick erscheint mir der Code von GegnerMovement äußerst suspekt.

Erstmal ein bisschen formatieren:


```
if (Var.ballx >= Var.screenBreite/2-10)  {                     
    if (Var.bally == Var.gegnery)  {
    }
    else if (Var.bally > Var.gegnery+75)  {
        if (Var.gegnery <= Var.screenHöhe-200) {
            Var.gegnery += 2;
        } else if (Var.gegnery < Var.gegnery+75)  {
            if (Var.gegnery >= 20)  {
                Var.gegnery -= 2;
            }
        }
    }
}
```

1. Du reagierst nur, wenn bally > gegnery+75 gilt. Ich denke mal, dass hier eine Klammer falsch ist.
2. gegnery < gegnery + 75 gilt immer 


```
if (Var.ballx >= Var.screenBreite/2-10)  {                      
    if (Var.bally == Var.gegnery)  {
    } else if (Var.bally > Var.gegnery+75)  {
        if (Var.gegnery <= Var.screenHöhe-200) {
            Var.gegnery += 2;
        }
    } else if (Var.bally < Var.gegnery+75)  {
        if (Var.gegnery >= 20)  {
            Var.gegnery -= 2;
        }
    }
}
```

bzw.


```
if (Var.ballx >= Var.screenBreite/2-10)  {                       
    if (Var.bally == Var.gegnery)  {
    } else if (Var.bally > Var.gegnery+75)  {
        if (Var.gegnery <= Var.screenHöhe-200) {
            Var.gegnery += 2;
        }
    } else {
        if (Var.gegnery >= 20)  {
            Var.gegnery -= 2;
        }
    }
}
```


----------



## Xyz1 (4. Jul 2018)

Was soll das hier für eine Show werden wenn man fragen darf?


----------



## mihe7 (5. Jul 2018)

@DerWissende Das ist die Fortführung von https://www.java-forum.org/thema/warum-ist-das-fenster-nicht-schwarz.181935/


----------



## NHI (9. Jul 2018)

Danke für die hilfreiche Antwort ich werde es mal so probieren


----------

