Langweilige Ballbewegung

Diskutiere Langweilige Ballbewegung im Spiele- und Multimedia-Programmierung Forum; Guten Abend! Ich habe hier ein BrickBreaker Spiel. Mein Problem ist, das der Ball (fast) immer zur gleichen Stelle zurückkehrt, und man so...

  1. Lucaaa
    Lucaaa Mitglied
    Guten Abend!

    Ich habe hier ein BrickBreaker Spiel. Mein Problem ist, das der Ball (fast) immer zur gleichen Stelle zurückkehrt, und man so eigentlich nicht spielen braucht da der Balll ja alles allein macht. Meine Frage nun: Wie kriege ich mehr Abwechslung in die Ballbewegung?

    Vielen Dank schonmal!

    Hier der Code:
    Code (Java):

    package com.ludevstudio.brickbreaker;
    import java.awt.Color;import java.awt.Font;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.Rectangle;
    import java.awt.Shape;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.image.ImageObserver;
    import java.text.AttributedCharacterIterator;
    import java.util.Random;
    import java.util.Timer;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import org.w3c.dom.css.Rect;
    public class GamePlay extends JPanel implements KeyListener, ActionListener{
     private static final long serialVersionUID = 1L;
     Boolean play = false;
     private int score = 0;
     private int totalBricks = 21;
     
     private javax.swing.Timer timer;
     private int delay = 8;
     
     private int playerX = 350;
     private int ballPosX = 390;
     private int ballPosY = 710;
     private int ballXdir = -3;
     private int ballYdir = -3;
     
     private MapGenerator mapGenerator;
     
     public GamePlay() {
      mapGenerator = new MapGenerator(15, 10);
     
      setVisible(true);
      setLayout(null);
      setFocusable(true);
      addKeyListener(this);
     
      timer = new javax.swing.Timer(delay, this);
      timer.start();
     
     
     
     
     }
     
     public JPanel getPanel() {
      return this;
     }
     
     public void paint (Graphics g) {
      // Background
      g.setColor(Color.BLACK);
      g.fillRect(0, 0, this.getWidth(), this.getHeight());
     
      // Map
      mapGenerator.draw((Graphics2D)g);
     
      // Border
      g.setColor(Color.BLUE);
      g.fillRect(0, 0, this.getWidth(), 10);
      g.fillRect(0, 0, 10, this.getHeight());
      g.fillRect(this.getWidth()-10, 0, 10, this.getHeight());
     
      //Ball
      g.setColor(Color.YELLOW);
      g.fillOval(ballPosX, ballPosY, 20, 20);
     
      // Paddle
      g.setColor(Color.GREEN);
      g.fillRect(playerX, 730, 100, 10);
     
      g.dispose();
     }

     @Override
     public void actionPerformed(ActionEvent arg0) {
     
     
      timer.start();
     
      if(play) {
       ballPosX += ballXdir;
       ballPosY += ballYdir;
       
       if(new Rectangle(ballPosX, ballPosY, 20, 20).intersects(new Rectangle(playerX, 730, 100, 10))) {
        ballYdir = -ballYdir;
       
       }
       if(new Rectangle(ballPosX, ballPosY, 20, 20).intersects(new Rectangle(playerX, 730, 100, 10))) {
        int hit = (playerX+100)-ballPosX+10;
         if(hit<20) {
          ballXdir = 4;
         } else if(hit<40) {
          ballXdir = 2;
         } else if(hit<40) {
          ballXdir = 0;
         } else if(hit<60) {
          ballXdir = -2;
         } else if(hit<80) {
          ballXdir = -4;
         }
       }
       
       }
       
       
      for (int i = 0; i<mapGenerator.map.length; i++) {
        for (int j = 0; j<mapGenerator.map[0].length; j++) {
        Rectangle brickRect = new Rectangle(j*mapGenerator.brickWidth+60, i*mapGenerator.brickHeight+60, mapGenerator.brickWidth, mapGenerator.brickHeight);
        Rectangle ballRect = new Rectangle(ballPosX-2, ballPosY-2, 22, 22);
         if(ballRect.intersects(brickRect)) {
          if(mapGenerator.map[i][j]!=0) {
           ballXdir = -ballXdir;
           ballYdir = -ballYdir;
           }
         
         
          mapGenerator.map[i][j] = 0;
         
         }
       }
      }
     
     
       
       
       if(ballPosX<10) {
         ballXdir = -ballXdir;
        }
        if(ballPosY<10) {
         ballYdir = -ballYdir;
        }
        if(ballPosX>this.getWidth()-30) {
         ballXdir = - ballXdir;
        }
       
        if(ballPosY>this.getHeight()) {
         ballYdir = - ballYdir;
        }
       
        repaint();
      }
     
     
     
     
     

     @Override
     public void keyPressed(KeyEvent e) {  
      if(e.getKeyCode() == KeyEvent.VK_LEFT) {
        moveLeft();
      } else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
       moveRight();
     
      }
     }

     @Override
     public void keyReleased(KeyEvent arg0) {
      // TODO Auto-generated method stub
     
     }

     @Override
     public void keyTyped(KeyEvent arg0) {
      // TODO Auto-generated method stub
     
     }
     
     public void moveRight() {
      if(playerX>this.getWidth()-30-100) {
       playerX = this.getWidth()-30-100;
       } else {
        playerX += 40;
        play = true;
       }
     }
     
     public void moveLeft() {
      if(playerX<30) {
       playerX = 30;
       } else {
        playerX -= 40;
        play = true;
       }
     }
     
     
     
     
     
    }
     
     
  2. Vielleicht helfen dir diese Grundlagen hier weiter: (hier klicken)
  3. Blender3D
    Blender3D Aktives Mitglied
    Ich habe Dir eine guten Tipp gegeben. Überlege Dir zuerst die Klasse Ball und nicht das ganze Spiel.
    Und wie kann ich den Ball bewegen. Tipp: Baue dir eine Klasse Vektor2D, die die Bewegung realisiert.
     
  4. Lucaaa
    Lucaaa Mitglied
    Ich bewege den Ball, indem ich die X- und Y-Richtung ändre. Wie realisiere ich das mit der Klasse Ball am besten? Sodass er auf die anderen Elemente reagiert? Dann Wäre es ja vielleicht auch besser, eine Klasse für jedes Level, eine für den Schläger, und eine die alles zusammenführt zu machen?
     
  5. Hast du dir unsere Java-Grundlagen hier schon gesichert? *Klick*
Die Seite wird geladen...

Langweilige Ballbewegung - Ähnliche Themen

Ballbewegung
Ballbewegung im Forum Spiele- und Multimedia-Programmierung
Thema: Langweilige Ballbewegung