Warum tut der Gegner nicht das was er soll?

NHI

Mitglied
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
 
Java:
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);
    }

}
 
Java:
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);
   
   
   
   
   
   
   
    }
}
 
Java:
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();
   
       
       
       
       
       
       
           
       
       
       
       
       
       
       
       
       
       
       
    }
   
   
}
 
Java:
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);
    }

}
 
Java:
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);
       
       
}
}
 
Java:
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

    }

}
 
Java:
package pack1;

public class Main {

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

}
 
Java:
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);
    }

}
 
Java:
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
    }

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

Erstmal ein bisschen formatieren:

Java:
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 🙂

Java:
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.

Java:
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;
        }
    }
}
 

Zurück
Oben