Bitte um Erklärung

Status
Nicht offen für weitere Antworten.

Gott

Mitglied
Hallo

Ich bin totaller anfänger in sachen java.

Könnte mir jemand folgenes programm schritt für schritt erklären?

Wäre supa nett!!!
Java:
 * Pong in 260 zeilen.
  *
  * @version 1.0 vom 02.01.2006
  * @Mirko Heinold [url=http://www.winice.de]WINiCE Dev.[/url]
  */

public class Pong extends JApplet implements KeyListener, Runnable{
  // Anfang Variablen
  private JPanel jpaCenter = new JPanel();
  private final int BALKEN_BREITE = 5;
  private final int BALKEN_HOEHE = 40;
  private final int BALL_DURCHMESSER = 10;
  private boolean[] taste = new boolean[256];
  private Point[] balken = new Point[2];
  private int[] lebenSpieler = new int[2];
  private String[] nameSpieler = new String[2];
  private Point ball;
  private Graphics spielfeld;
  private int xBewegung, yBewegung;
  private JPanel jpaNorth = new JPanel();
  private JLabel jlbLinks = new JLabel();
  private JLabel jlbMitte = new JLabel();
  private JLabel jlbRechts = new JLabel();
  private boolean spiel = false, pause;
  private int ballKontakteInFolge, geschwindigkeit;
  // Ende Variablen

  public void init() {
    System.out.println("Init");
    Container cp = getContentPane();
    cp.setLayout(new BorderLayout());

    // Anfang Komponenten
    cp.add(jpaCenter, BorderLayout.CENTER);
    cp.add(jpaNorth, BorderLayout.NORTH);
    jpaNorth.add(jlbLinks, BorderLayout.NORTH);
    jlbMitte.setHorizontalAlignment(SwingConstants.CENTER);
    jpaNorth.add(jlbMitte, BorderLayout.NORTH);
    jlbRechts.setText("Bitte clicken sie zum starten hier !   ");
    jlbRechts.setHorizontalAlignment(SwingConstants.RIGHT);
    jpaNorth.add(jlbRechts, BorderLayout.NORTH);
    // Ende Komponenten
    
    addKeyListener(this);
    addMouseListener(new MouseAdapter(){
      public void mouseClicked(MouseEvent e){
        if(jlbRechts.getText().equals("Bitte clicken sie zum starten hier !   "))
          go();
      }
    });
  }
  private void go(){
    System.out.println("Go");
    // setzen der startpositionen der Balken und des balls
    int balkenYPosition = jpaCenter.getHeight() / 2;
    balkenYPosition = balkenYPosition - (BALKEN_HOEHE / 2);
    balken[0] = new Point(1, balkenYPosition);
    balken[1] = new Point((jpaCenter.getWidth() - BALKEN_BREITE - 2), balkenYPosition);
    ball = new Point(100, 100);

    for(int i = 0; i < balken.length; i++){  // Setzen Spielernamen und
      lebenSpieler[i] = 15;                  // deren leben
      nameSpieler[i] = "Spieler" + i;
    }
    showLabel();
    
    spielfeld = jpaCenter.getGraphics();  // definieren des Spielfeld
    paint(); // malen des Spielfeldes
    
    ballKontakteInFolge = 0;
    geschwindigkeit = 5;
    xBewegung = yBewegung = 1;
    pause = false;
    if(!spiel){ // wenn kein Spiel läuft
      spiel = true;
      new Thread(this).start(); // starten des balls
    }
  }
  // Anfang Ereignisprozeduren
  public void keyTyped(KeyEvent e){
    if(e.getKeyChar() == 'n'){
      go();
    }else if(e.getKeyChar() == 'p'){
      if(pause){
        pause = false;
        paint();
      }
      else pause = true;

    }else if(e.getKeyChar() == 'i'){
      pause = true;
      showInfo();
    }
  }
  public void keyPressed(KeyEvent e){
    if(taste[e.getKeyCode()]) return; //wenn das drücken der taste bereits registriert ist dann breche ab
    taste[e.getKeyCode()] = true;
    if(e.getKeyChar() == 'w'){
      moveBalken(e.getKeyCode(), 0, true);
    }else if(e.getKeyChar() == 's'){
      moveBalken(e.getKeyCode(), 0, false);
    }else if(e.getKeyCode() == 38){
      moveBalken(e.getKeyCode(), 1, true);
    }else if(e.getKeyCode() == 40){
      moveBalken(e.getKeyCode(), 1, false);
    }
  }
  public void keyReleased(KeyEvent e){
    taste[e.getKeyCode()] = false;
  }
  public void run(){
    // Bewegen des balls
    System.out.println("Run");
    while(spiel){
      if(ball.y == 1 || (ball.y + BALL_DURCHMESSER) == (jpaCenter.getHeight() - 2)) // Treffen auf oberen oder unteren Rand
        yBewegung *= -1;
      clearBall();
      if(ball.x == 1){
        lebenSpieler[0]--;
        ballKontakteInFolge = 0;
        showLabel();
        if(lebenSpieler[0] == 0){
          showInfo("Herzlichen Glückwunsch " + nameSpieler[1] + " Sie haben gewonnen!!!\n" + nameSpieler[0] + " hatte keien chance und hat verloren! LOSER!!!\n");
          spiel = false;
          return;
        }else{
           int x = (jpaCenter.getWidth() / 2) - (BALL_DURCHMESSER / 2);
           int y = (jpaCenter.getHeight() / 2) - (BALL_DURCHMESSER / 2);
           ball.move(x, y);
        }
      }else if(ball.x == (jpaCenter.getWidth() - 2 - BALL_DURCHMESSER)){
        lebenSpieler[1]--;
        ballKontakteInFolge = 0;
        showLabel();
        if(lebenSpieler[1] == 0){
          showInfo("Herzlichen Glückwunsch " + nameSpieler[0] + " Sie haben gewonnen!!!\n" + nameSpieler[1] + " hatte keien chance und hat verloren! LOSER!!!\n");
          spiel = false;
          return;
        }else{
          int x = (jpaCenter.getWidth() / 2) - (BALL_DURCHMESSER / 2);
          int y = (jpaCenter.getHeight() / 2) - (BALL_DURCHMESSER / 2);
          ball.move(x, y);
        }
      }else if((ball.x == (balken[0].x + BALKEN_BREITE)) && ((ball.y + BALL_DURCHMESSER) >= balken[0].y)&& (ball.y <= (balken[0].y + BALKEN_HOEHE))){
        xBewegung *= -1;    // balken 0
        ballKontakteInFolge++;
        drawBalken(0);
      }else if(((ball.x + BALL_DURCHMESSER) == balken[1].x) && ((ball.y + BALL_DURCHMESSER) >= balken[1].y)&& (ball.y <= (balken[1].y + BALKEN_HOEHE))) {
        xBewegung *= -1;  // balken 1
        ballKontakteInFolge++;
        drawBalken(1);
      }
      ball.x += xBewegung;
      ball.y += yBewegung;
      drawBall();
      if(ballKontakteInFolge == 10 && geschwindigkeit > 1){
        ballKontakteInFolge = 0;
        geschwindigkeit--;
      }
      delay(geschwindigkeit);
      while(pause);
    }
  }
  // Ende Ereignisprozeduren
  private void showLabel(){
    jlbLinks.setText(" " + nameSpieler[0] + ": " + lebenSpieler[0]);
    jlbMitte.setText(" Neues Spiel [n]  Pause [p]  Info [i] ");
    jlbRechts.setText(" " + nameSpieler[1] + ": " + lebenSpieler[1]);
  }
  private void showInfo(){
    showInfo("");
  }
  private void showInfo(final String text){
    new Frame("Info"){
      private Button buOK = new Button();
      private TextArea taAusgabe = new TextArea();
      private Panel paSouth = new Panel();
      {
        setSize(400, 400);
        setLocation(10, 10);
        setLayout(new BorderLayout());
        addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent evt) {setVisible(false); setFocus();}
        });
        add("Center", taAusgabe);
        add("South", paSouth);
        buOK.setLabel("    OK    ");
        buOK.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
            setVisible(false);
            setFocus();
          }
        });
        paSouth.add(buOK);
        setVisible(true);
        taAusgabe.append(text);
        taAusgabe.append("\nBEDIENUG\nTasten " + nameSpieler[0] + ": Hoch(w) Runter(s)\n");
        taAusgabe.append("Tasten " + nameSpieler[1] + ": Hoch(Pfeiltaste hoch) Runter(Pfeiltaste runter)\n");
        taAusgabe.append("Letze Ballgeschwindigkeit (1 = MAX): " + geschwindigkeit);
        taAusgabe.append("\n@ Mirko Heinold(mirkoheinold@gmx.net) http://www.WINiCE.de\n");
        taAusgabe.append("Version 1.0  vom 02.01.2006\n");
        taAusgabe.append("\nACHTUNG\nNach beenden des Fensters bitte [p] zum weiterspielen\nb.z.w. [n] für ein neues Spiel drücken!!!\n");
      }
    };
  }
  private void paint(){
    System.out.println("Paint");
    spielfeld.clearRect(0, 0, jpaCenter.getWidth(), jpaCenter.getHeight()); // Löschen alter objecte auf den Spielfeld
    spielfeld.drawRect(0, 0, (jpaCenter.getWidth() - 1), (jpaCenter.getHeight() - 1)); // Malen eines randes
    for(int i = 0; i < balken.length; i++){  // Setzen der Balken und bälle
      drawBalken(i);
    }
    drawBall();
  }
  private void setFocus(){
    this.requestFocus();
    this.repaint();
  }
  private void drawBalken(int i){
    spielfeld.drawRect(balken[i].x, balken[i].y, BALKEN_BREITE, BALKEN_HOEHE);
  }
  private void drawBall(){
    spielfeld.drawOval(ball.x, ball.y, BALL_DURCHMESSER, BALL_DURCHMESSER);
  }
  private void clearBalken(int i){
    spielfeld.clearRect(balken[i].x, balken[i].y, (BALKEN_BREITE + 1), (BALKEN_HOEHE + 1));
  }
  private void clearBall(){
    spielfeld.clearRect(ball.x, ball.y, (BALL_DURCHMESSER + 1), (BALL_DURCHMESSER + 1));
  }
  private static void delay(long millis){
    try{Thread.sleep(millis);}catch(InterruptedException e){ }
  }
  private void moveBalken(final int zeichen, final int balkenNummer, final boolean hoch){ // Parameter: gedrucktes zeichen
    new Thread(){         // auf dessen loslassen gewartet wird / zu bewegener Button / richtung in die er zu bewegen ist
      public void run(){
         while(taste[zeichen]){
           while(pause); // Solange das spiel pausiert ist aktion herauszögern
           if((balken[balkenNummer].y + BALKEN_HOEHE)  == (jpaCenter.getHeight() - 2) && !hoch)
             break; // wenn der unter Rand erreicht ist
           if(balken[balkenNummer].y == 1 && hoch)
             break;
           clearBalken(balkenNummer);
           if(hoch) balken[balkenNummer].y --;
           else balken[balkenNummer].y ++;
           drawBalken(balkenNummer);
           delay(2); // bewegungsgeschwindigkeit
         }
      }
    }.start();
  }
}

Danke im Voraus

GOTT:toll::toll:
 
Zuletzt bearbeitet von einem Moderator:
ich würde gerne wissen was JPanel bedeutet und auch das private am anfang des programms lässt mich stutzen. ich bitte um erklärung

danke:toll:
 
hi

zu JPanel

zu private
* Elemente des Typs privat sind lediglich in der Klasse selbst sichtbar. Für abgeleitete Klassen und für Aufrufer von Objekten der Klasse (Instanzen) bleiben private- Variablen und -Methoden verdeckt.
* privat-Elemente sollten immer dann verwendet werden, wenn implementierungsabhängige Details zu verstecken sind, die auch in abgeleiteten Klassen nicht sichtbar sein sollen.

nebenbei:
Galileo Computing :: Java ist auch eine Insel
java api

die api enthält beschreibungen über die wichtigsten klassen und die javainsel ist ein sehr gutes online buch zu java solltest du dir vllt mal angucken

p.s. das wollte ich schon immer ma posten xD :
Google ist dein Freund -
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben