Ping Pong Score Zähler,aber wie?

Agalloch

Neues Mitglied
Ich habe für meinen ersten Programmierbeleg in der Uni ein kleines Pingpong programmiert. Mit Kollisonsabfrage,Pause funktion usw (nochnicht ganz ausgereift).
Habe schwierigkeiten mit Java und habe mich da mit hängen und würgen durchgekämpft,doch hätte ich gern einen Zähler für den Score,aber weiß nicht so recht wie ich den realisieren soll :-(

Hier mal mein Code zum reinschauen:
Klasse pingpong
Java:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.logging.Level;
import javax.swing.*;
import java.util.logging.Logger;



public class pingpong extends JFrame implements Runnable,KeyListener{

    private Ball ball= new Ball (100,150,this);
    private Player player= new Player(25,180,25,125,Color.RED) ;
    private AutoPlayer autoPlayer = new AutoPlayer(740,180,25,125,Color.blue);
    private boolean up,down;
    private boolean pause;
    
        public pingpong(String title){
        super(title);
        this.setFocusable(true);
        this.addKeyListener(this);
        
    }
    
    @Override
    public void paint(Graphics gr){
        super.paint(gr);
        //Malen
        
        
        
        
        
        //Ball
        ball.paint(gr);
        
        //Spieler
        player.paint(gr);
        
        //Automatischer Spieler
        autoPlayer.paint(gr);
        
        //Pause
        if (pause){
            gr.setColor(Color.black);
            gr.setFont(new Font("Helvetica",100,100));  
            gr.drawString("PAUSE", 225, 225);
        }
    }
    @Override
    public void run(){
     while(true) {
         if (!pause){
         //Ball
         ball.moveBall();
         
         if (up) {
             player.moveUp();
         }else if (down) {
             player.moveDown();
         }
         player.checkCollisionWithBall(ball);
         //AutoPlayer
         autoPlayer.moveAutoPlayer(ball);
         autoPlayer.checkCollisionWithBall(ball);
         }
         
         
          repaint();
        
         try{
         Thread.sleep(30);
          }  catch (InterruptedException ex) {
              Logger.getLogger(pingpong.class.getName()).log(Level.SEVERE,null,ex);
          }
          }
     
    }
    
    
    public static void main(String[] args) {
        
        pingpong ping=new pingpong ("Ping Pong");
        new Thread(ping).start();
        ping.setSize (800,450);
        ping.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        ping.setVisible(true);
        
    }

    @Override
    public void keyTyped(KeyEvent ke) {
       
    }

    @Override
    public void keyPressed(KeyEvent ke) {
       if (ke.getKeyCode()== 87) {
           up= true;
           down= false;
       } else if (ke.getKeyCode()==83) {
           up= false;
           down=true;
       }
   if (ke.getKeyCode()==32) {
        pause=(!pause);
        
        
    }
    }

    @Override
    public void keyReleased(KeyEvent ke) {
        up=false;
        down=false;
        
        
    }
    
}
Klasse Ball
Java:
import java.awt.*;



public class Ball {
    
    private int x, y;
    private int velocityX,velocityY;
    private int size=50;
    
    public Ball(int x,int y, Component comp) {
        this.x=x;
        this.y=y;
        //this.comp=comp;
        this.velocityX = 10;
        this.velocityY = 10;
    }
   public int getX(){
      return x;
   } 
   public int getY(){
       return y;
   }
   public int getVelocityX(){
       return velocityX;
   }
   public int getVelocityY(){
       return velocityY;
   }
   
   public void moveBall() {
     
       
       if (x + 100 > 800) {
           velocityX= -10;
        } else if (x < 0){
       velocityX = 5;
   }
      if (y + 100 > 500) {
           velocityY= -10;
        } else if (y < 0){
       velocityY = 5;
       
       
       }
       
       x +=velocityX;
       y +=velocityY;
       
   }
   
   public void collideWithPlayer(boolean collision){
       if (collision) {
           velocityX=velocityX *-1;
       }else if (!collision){
       }
       
   }
   
   public void paint(Graphics gr){
       gr.setColor(Color.GREEN);
       gr.fillOval(x,y,size,size);
       
   }
}
Klasse Player
Java:
import java.awt.*;


public class Player {
    
    private int x,y,width,height;
    private Color color;
    
    public Player(int x, int y, int width, int height,Color color){
       this.x=x;
       this.y=y;
       this.width=width;
       this.height=height;
       this.color=color;
    }
    public void moveUp(){
    y-=5;
    }
    public void moveDown(){
    y+=5;    
    }
    public void checkCollisionWithBall(Ball ball){
        Rectangle ballRect = new Rectangle(ball.getX(),ball.getY(),100,100);
        Rectangle playerRect=new Rectangle(this.x,this.y,this.width,this.height);
        if (playerRect.intersects(ballRect)){
           ball.collideWithPlayer(true);
        }
                
    
}
    
    public void paint(Graphics gr){
        gr.setColor(color);
        gr.fillRect(x,y,width,height);
        
    }
}
Klasse Autoplayer
Java:
import java.awt.*;


public class AutoPlayer {
    
    private int x,y,width,height;
    private Color color;
    
    public AutoPlayer(int x, int y, int width, int height,Color color){
       this.x=x;
       this.y=y;
       this.width=width;
       this.height=height;
       this.color=color;
    }
    public void moveUp(){
    y-=5;
    }
    public void moveDown(){
    y+=5;    
    }
    
    public void checkCollisionWithBall(Ball ball){
        Rectangle ballRect = new Rectangle(ball.getX(),ball.getY(),16,16);
        Rectangle playerRect=new Rectangle(this.x,this.y,this.width,this.height);
        if (playerRect.intersects(ballRect)){
           ball.collideWithPlayer(true);
        }
                
    
}
    
    public void moveAutoPlayer(Ball ball){
        int midPlayer =this.y +this.height/2;
        if (ball.getVelocityX()> 0) {
            
            if (midPlayer !=ball.getY()){
                if (ball.getY() < midPlayer) {
                    moveUp();
                }else if (ball.getY()> midPlayer) {
                    moveDown();
                }
            }
        } else if (ball.getVelocityX() < 0) {  
            if (midPlayer !=500) {
                if (midPlayer > 500) {
                    moveUp();
                }
            }
        } 
        
    
    }
    
    public void paint(Graphics gr){
        gr.setColor(color);
        gr.fillRect(x,y,width,height);
        
    }

    
    }

Hoffe ihr könnt mir helfen :)
 
Zuletzt bearbeitet:

Anfänger2011

Bekanntes Mitglied
Erstell ne neue Klasse Score mit einer paint-methode.
Bei deiner Abfrage ob der Ball mit der Wand kollidiert setzt du einfach ein int um 1 hoch.
In score erstellst du dann einen neuen Score.
Fragst die Werte aus Ball ab und gibst das Ergebnis zum Beispiel mit der Paintmethode oder in der Konsole, etc... aus. :)
 

Gucky

Top Contributor
Du könntest auch mit Events arbeiten.
Jedes Mal, wenn der Ball die Wand berührt, wird ein WandBerührtEvent ausgelöst. Dieses hat nur das Attribut boolean links und dementsprechend wird ein int hochgezählt.

Die Konsole öffnet sich nicht, wenn schon ein AWT/Swing Fenster offen ist (bei JavaFX weiß ich das nicht), weshalb es besser ist, du gibst die Punktezahl auf dem Frame aus.
 

Anfänger2011

Bekanntes Mitglied
Ja stimmt so ist es noch ein Stückchen kürzer.
Wenn du die Ausgabe im Frame machen willst könntest du dir dann bilder von den ziffern 0 bis 9 runterladen und diese dann dementsprechend anzeigen lassen. Das sieht dann optisch für den Benutzer noch etwas besser aus. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Ping Pong Methode mit Rekursion Java Basics - Anfänger-Themen 1
D Könnt ihr mir helfen beim Programmieren eines Ping Pong Spieles? Java Basics - Anfänger-Themen 9
M Ping Pong - Tastaturanschläge sofort auswerten Java Basics - Anfänger-Themen 4
S Ping Pong Spiel Java Basics - Anfänger-Themen 2
F java Ip ping + Dateiausgabe error ! Java Basics - Anfänger-Themen 3
G Verfügbare Clients prüfen ohne ping Java Basics - Anfänger-Themen 12
S UDP und TCP Ping Java Basics - Anfänger-Themen 10
G XP Ping Java Basics - Anfänger-Themen 3
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
D wie kann man in Pong mit eclipse den schläger bewegen Java Basics - Anfänger-Themen 1
Hallolu PONG Parent-Child connection Java Basics - Anfänger-Themen 3
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
M Pong Paddel nicht sichtbar Java Basics - Anfänger-Themen 2
S Brauche hilfe bei Pong (JFrame) Java Basics - Anfänger-Themen 2
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
E Pong hilfe Java Basics - Anfänger-Themen 4
I Netzwerkfähiges Pong Spiel Java Basics - Anfänger-Themen 35
C Pong Game Java Basics - Anfänger-Themen 2
S Pong Java Basics - Anfänger-Themen 4
W Wie kann man folgenden Code abändern, dass er den Score mit Zahl anzeigt? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben