Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;
import java.util.TimerTask;
public class PongMain {
Timer tw = new Timer();
Timer ts = new Timer();
Timer tup = new Timer();
Timer tdown = new Timer();
Timer repaint = new Timer();
public JFrame frmTheGameOf;
public Integer wtiming = 0;
public PongPanel panel = new PongPanel();
Integer Ballrichtung = 0;
Timer ball = new Timer();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
PongMain window = new PongMain();
window.frmTheGameOf.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public PongMain() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmTheGameOf = new JFrame();
frmTheGameOf.setTitle("The Game of Fucking PONG");
frmTheGameOf.setResizable(false);
frmTheGameOf.setBounds(100, 100, 806, 429);
frmTheGameOf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmTheGameOf.getContentPane().setLayout(null);
frmTheGameOf.setFocusable(true);
panel.setBounds(0, 0, 800, 400);
frmTheGameOf.getContentPane().add(panel);
KeyListener l = new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyChar() == 'w') {
tw.cancel();
tw = new Timer();
}
if (e.getKeyChar() == 's') {
ts.cancel();
ts = new Timer();
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
tup.cancel();
tup = new Timer();
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
tdown.cancel();
tdown = new Timer();
}
}
@Override
// Keyevents für die Panel
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == 'w') {
tw.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.Schlägerlup();
};
}, 0, 5);
}
if (e.getKeyChar() == 's') {
ts.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.Schlägerldown();
};
}, 0, 5);
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
tup.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.Schlägerrup();
};
}, 0, 5);
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
tdown.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.Schlägerrdown();
};
}, 0, 5);
}
}
};
frmTheGameOf.addKeyListener(l);
// Timer für den repaint des Feldes
repaint.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.repaint();
win();
};
}, 0, 10);
// Timer für die Ballbewegung
ball.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (panel.Bally >= panel.Schly && panel.Bally <= (panel.Schly + 50) && panel.Ballx < 30 || panel.Bally+20 >= panel.Schly && panel.Bally+20 <= (panel.Schly + 50) && panel.Ballx < 30) {
Ballrichtung = 1;
panel.Pingpongcounter++;
}
if (panel.Bally >= panel.Schry && panel.Bally <= (panel.Schry + 50) && panel.Ballx > 750 ||panel.Bally+20 >= panel.Schry && panel.Bally+20 <= (panel.Schry + 50) && panel.Ballx > 750) {
Ballrichtung = 0;
panel.Pingpongcounter++;
}
if (Ballrichtung == 0)
panel.ballleft();
if (Ballrichtung == 1)
panel.ballright();
};
}, 0, 1);
}
// Methode um das Spielfeld zu reseten
private void win() {
if (panel.P1Punktestand == 9) {
JOptionPane.showMessageDialog(frmTheGameOf, "Spieler 1 gewinnt");
panel.P1Punktestand = 0;
panel.P2Punktestand = 0;
panel.Schly = 170;
panel.Schry = 170;
panel.Ballx = 390;
panel.Bally = 170;
panel.Pingpongcounter = 0;
}
if (panel.P2Punktestand == 9) {
JOptionPane.showMessageDialog(frmTheGameOf, "Spieler 2 gewinnt");
panel.P1Punktestand = 0;
panel.P2Punktestand = 0;
panel.Schly = 170;
panel.Schry = 170;
panel.Ballx = 390;
panel.Bally = 170;
panel.Pingpongcounter = 0;
}
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
public class PongPanel extends JPanel {
private Graphics2D g2;
Integer P1Punktestand = 0, P2Punktestand = 0;
Integer Schly = 170, Schry = 170;
Integer wtiming = 0;
Integer Ballx = 390;
Integer Bally = 170;
Integer Pingpongcounter = 0;
/**
* Generated serialVersionUID
*/
private static final long serialVersionUID = -9192687157944784869L;
// Erstellt das Jpanel zum zeichnen
public PongPanel() {
JPanel panel = new JPanel();
panel.setBounds(0, 0, 800, 400);
panel.setFocusable(true);
panel.setBackground(Color.cyan);
}
// paint-Methode zum zeichnen der Komponenten
protected void paintComponent(Graphics g) {
g2 = (Graphics2D) g;
neuzeichl();
neuzeichr();
neuzeichball();
ballcheckout();
PaintOUT();
paintSchlägerR();
paintSchlägerL();
countpong();
paintBall();
midLine();
PaintPunktStand();
}
// Methode um den Counter zu zeichnen
private void countpong() {
g2.setPaintMode();
g2.setColor(Color.blue);
g2.drawString("Pong`s: " + Pingpongcounter, 375, 395);
}
// Methode um den rechten Schläger zu zeichnen
private void paintSchlägerR() {
g2.setPaintMode();
g2.setColor(Color.BLACK);
g2.fillRect(770, Schry, 15, 50);
}
// Methode um den Ball zu zeichnen
private void paintBall() {
g2.setPaintMode();
g2.setColor(Color.BLACK);
g2.fillOval(Ballx, Bally, 20, 20);
}
// Methode um den linken Schläger zu zeichnen
private void paintSchlägerL() {
g2.setPaintMode();
g2.setColor(Color.BLACK);
g2.fillRect(15, Schly, 15, 50);
}
// Methode um das Outfield zu zeichnen
private void PaintOUT() {
g2.setPaintMode();
g2.setColor(Color.GRAY);
g2.fillRect(0, 0, 15, 400);
g2.fillRect(785, 0, 15, 400);
g2.setColor(Color.lightGray);
g2.fillRect(15, 0, 15, 400);
g2.fillRect(770, 0, 15, 400);
}
// Methode um die Mittellinie zu zeichnen
private void midLine() {
g2.setPaintMode();
g2.setColor(Color.ORANGE);
g2.drawLine(400, 0, 400, 400);
}
// Methode um den Punktestand zu zeichnen
private void PaintPunktStand() {
g2.setPaintMode();
g2.setColor(Color.red);
g2.drawString(P1Punktestand + ":" + P2Punktestand, 392, 20);
}
// Methode um den linken Schläger zu neutralisieren
public void neuzeichl() {
g2.setPaintMode();
g2.setColor(this.getBackground());
g2.fillRect(15, 0, 15, 400);
}
// Methode um den rechten Schläger zu neutralisieren
public void neuzeichr() {
g2.setPaintMode();
g2.setColor(this.getBackground());
g2.fillRect(770, 0, 15, 400);
}
// Methode um den Ball zu neutralisieren
public void neuzeichball() {
g2.setPaintMode();
g2.setColor(this.getBackground());
g2.fillRect(30, 0, 740, 400);
}
// Methode um den linken Schläger nach oben zu verschieben
public void Schlägerlup() {
if (Schly > 0) {
Schly--;
Schly--;
Schly--;
Schly--;
Schly--;
}
}
// Methode um den linken Schläger nach unten zu verschieben
public void Schlägerldown() {
if (Schly < 350) {
Schly++;
Schly++;
Schly++;
Schly++;
Schly++;
}
}
// Methode um den rechten Schläger nach unten zu verschieben
public void Schlägerrdown() {
if (Schry < 350) {
Schry++;
Schry++;
Schry++;
Schry++;
Schry++;
}
}
// Methode um den rechten Schläger nach oben zu verschieben
public void Schlägerrup() {
if (Schry > 0) {
Schry--;
Schry--;
Schry--;
Schry--;
Schry--;
}
}
// Methode um den Ball nach links zu verschieben
public void ballleft() {
Ballx--;
}
// Methode um den Ball nach rechts zu verschieben
public void ballright() {
Ballx++;
}
// Methode um zu checken ob ein Punkt fällt
public void ballcheckout() {
if ((Ballx < 29) || (Ballx > 771)) {
if (Ballx > 400) {
Pingpongcounter = 0;
P1Punktestand++;
}
if (Ballx < 400) {
Pingpongcounter = 0;
P2Punktestand++;
}
Ballx = 390;
Bally = 170;
}
}
}
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;
import java.util.TimerTask;
public class PongMain {
Timer tw = new Timer();
Timer ts = new Timer();
Timer tup = new Timer();
Timer tdown = new Timer();
Timer repaint = new Timer();
public JFrame frmTheGameOf;
public Integer wtiming = 0;
public PongPanel panel = new PongPanel();
Integer Ballrichtung = 0;
Timer ball = new Timer();
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
PongMain window = new PongMain();
window.frmTheGameOf.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public PongMain() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmTheGameOf = new JFrame();
frmTheGameOf.setTitle("The Game of Fucking PONG");
frmTheGameOf.setResizable(false);
frmTheGameOf.setBounds(100, 100, 806, 429);
frmTheGameOf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmTheGameOf.getContentPane().setLayout(null);
frmTheGameOf.setFocusable(true);
panel.setBounds(0, 0, 800, 400);
frmTheGameOf.getContentPane().add(panel);
KeyListener l = new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyChar() == 'w') {
tw.cancel();
tw = new Timer();
}
if (e.getKeyChar() == 's') {
ts.cancel();
ts = new Timer();
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
tup.cancel();
tup = new Timer();
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
tdown.cancel();
tdown = new Timer();
}
}
@Override
// Keyevents für die Panel
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == 'w') {
tw.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.Schlägerlup();
};
}, 0, 5);
}
if (e.getKeyChar() == 's') {
ts.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.Schlägerldown();
};
}, 0, 5);
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
tup.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.Schlägerrup();
};
}, 0, 5);
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
tdown.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.Schlägerrdown();
};
}, 0, 5);
}
}
};
frmTheGameOf.addKeyListener(l);
// Timer für den repaint des Feldes
repaint.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
panel.repaint();
win();
};
}, 0, 10);
// Timer für die Ballbewegung
ball.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (panel.Bally >= panel.Schly && panel.Bally <= (panel.Schly + 50) && panel.Ballx < 30 || panel.Bally+20 >= panel.Schly && panel.Bally+20 <= (panel.Schly + 50) && panel.Ballx < 30) {
Ballrichtung = 1;
panel.Pingpongcounter++;
}
if (panel.Bally >= panel.Schry && panel.Bally <= (panel.Schry + 50) && panel.Ballx > 750 ||panel.Bally+20 >= panel.Schry && panel.Bally+20 <= (panel.Schry + 50) && panel.Ballx > 750) {
Ballrichtung = 0;
panel.Pingpongcounter++;
}
if (Ballrichtung == 0)
panel.ballright();
if (Ballrichtung == 1)
panel.ballright();
};
}, 0, 1);
}
// Methode um das Spielfeld zu reseten
private void win() {
if (panel.P1Punktestand == 9) {
JOptionPane.showMessageDialog(frmTheGameOf, "Spieler 1 gewinnt");
panel.P1Punktestand = 0;
panel.P2Punktestand = 0;
panel.Schly = 170;
panel.Schry = 170;
panel.Ballx = 390;
panel.Bally = 170;
panel.Pingpongcounter = 0;
}
if (panel.P2Punktestand == 9) {
JOptionPane.showMessageDialog(frmTheGameOf, "Spieler 2 gewinnt");
panel.P1Punktestand = 0;
panel.P2Punktestand = 0;
panel.Schly = 170;
panel.Schry = 170;
panel.Ballx = 390;
panel.Bally = 170;
panel.Pingpongcounter = 0;
}
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
public class PongPanel extends JPanel {
private Graphics2D g2;
Integer P1Punktestand = 0, P2Punktestand = 0;
Integer Schly = 170, Schry = 170;
Integer wtiming = 0;
Integer Ballx = 390;
Integer Bally = 170;
Integer Pingpongcounter = 0;
Integer Ballwinkel = 30;
/**
* Generated serialVersionUID
*/
private static final long serialVersionUID = -9192687157944784869L;
// Erstellt das Jpanel zum zeichnen
public PongPanel() {
JPanel panel = new JPanel();
panel.setBounds(0, 0, 800, 400);
panel.setFocusable(true);
panel.setBackground(Color.cyan);
}
// paint-Methode zum zeichnen der Komponenten
protected void paintComponent(Graphics g) {
g2 = (Graphics2D) g;
neuzeichl();
neuzeichr();
neuzeichball();
ballcheckout();
PaintOUT();
paintSchlägerR();
paintSchlägerL();
countpong();
paintBall();
midLine();
PaintPunktStand();
}
// Methode um den Counter zu zeichnen
private void countpong() {
g2.setPaintMode();
g2.setColor(Color.blue);
g2.drawString("Pong`s: " + Pingpongcounter, 375, 395);
}
// Methode um den rechten Schläger zu zeichnen
private void paintSchlägerR() {
g2.setPaintMode();
g2.setColor(Color.BLACK);
g2.fillRect(770, Schry, 15, 50);
}
// Methode um den Ball zu zeichnen
private void paintBall() {
g2.setPaintMode();
g2.setColor(Color.BLACK);
g2.fillOval(Ballx, Bally, 20, 20);
}
// Methode um den linken Schläger zu zeichnen
private void paintSchlägerL() {
g2.setPaintMode();
g2.setColor(Color.BLACK);
g2.fillRect(15, Schly, 15, 50);
}
// Methode um das Outfield zu zeichnen
private void PaintOUT() {
g2.setPaintMode();
g2.setColor(Color.GRAY);
g2.fillRect(0, 0, 15, 400);
g2.fillRect(785, 0, 15, 400);
g2.setColor(Color.lightGray);
g2.fillRect(15, 0, 15, 400);
g2.fillRect(770, 0, 15, 400);
}
// Methode um die Mittellinie zu zeichnen
private void midLine() {
g2.setPaintMode();
g2.setColor(Color.ORANGE);
g2.drawLine(400, 0, 400, 400);
}
// Methode um den Punktestand zu zeichnen
private void PaintPunktStand() {
g2.setPaintMode();
g2.setColor(Color.red);
g2.drawString(P1Punktestand + ":" + P2Punktestand, 392, 20);
}
// Methode um den linken Schläger zu neutralisieren
public void neuzeichl() {
g2.setPaintMode();
g2.setColor(this.getBackground());
g2.fillRect(15, 0, 15, 400);
}
// Methode um den rechten Schläger zu neutralisieren
public void neuzeichr() {
g2.setPaintMode();
g2.setColor(this.getBackground());
g2.fillRect(770, 0, 15, 400);
}
// Methode um den Ball zu neutralisieren
public void neuzeichball() {
g2.setPaintMode();
g2.setColor(this.getBackground());
g2.fillRect(30, 0, 740, 400);
}
// Methode um den linken Schläger nach oben zu verschieben
public void Schlägerlup() {
if (Schly > 0) {
Schly--;
Schly--;
Schly--;
Schly--;
Schly--;
}
}
// Methode um den linken Schläger nach unten zu verschieben
public void Schlägerldown() {
if (Schly < 350) {
Schly++;
Schly++;
Schly++;
Schly++;
Schly++;
}
}
// Methode um den rechten Schläger nach unten zu verschieben
public void Schlägerrdown() {
if (Schry < 350) {
Schry++;
Schry++;
Schry++;
Schry++;
Schry++;
}
}
// Methode um den rechten Schläger nach oben zu verschieben
public void Schlägerrup() {
if (Schry > 0) {
Schry--;
Schry--;
Schry--;
Schry--;
Schry--;
}
}
// Methode um den Ball nach links zu verschieben
public void ballleft() {
Ballx--;
}
// Methode um den Ball nach rechts zu verschieben
public void ballright() {
Ballx++;
}
// Methode um zu checken ob ein Punkt fällt
public void ballcheckout() {
if ((Ballx < 29) || (Ballx > 771)) {
if (Ballx > 400) {
Pingpongcounter = 0;
P1Punktestand++;
}
if (Ballx < 400) {
Pingpongcounter = 0;
P2Punktestand++;
}
Ballx = 390;
Bally = 170;
}
}
}