import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends Applet implements Runnable{
//Variable für die Spielgeschwindigkeit
private int speed = 10;
private int hit;
//Instanzvariablen für die Doppelpufferung
private Image dbImage;
private Graphics dbg;
//Spiel-Thread
private Thread th;
// Deklaration der Objektreferenzen bzw. Spielfiguren
private Schlaeger Schlaeger1;
private Schlaeger Schlaeger2;
private Ball SpielBall;
private Score Punkte;
//Test
public boolean test = false;
public boolean test1 = false;
//Initialisieren des Applets
public void init(){
//Hintergrundfarbe setzen
setBackground(Color.darkGray);
//Speilobjekte erzeugen
Schlaeger1 = new Schlaeger(10, 100, 7, 70);
Schlaeger2 = new Schlaeger(663, 120, 7, 70);
SpielBall = new Ball(30, 205, 7, 7, 2, 2);
Punkte = new Score(0);
//Damit auf KeyCodes gehört wird
addKeyListener(new Key());
//Damit auf MouseEreignisse gehört wird
addMouseMotionListener(new Mouse());
}
public void start(){
//Schaffen eines neuen Threads, in dem das Spiel läuft
th = new Thread(this);
//Starten des Threads
th.start();
}
public void stop(){
//Thread stoppen
th.stop();
//Thread auf Null setzten
th = null;
}
public void destroy(){}
public void run(){
//Erniedrigen der ThreadPriority
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
//Solange true ist läuft der Thread weiter
while(true){
//Hier werden die jweiligen Methoden aufgerufen
if(test == true){
SpielBall.move();
//Falls der Ball im rechten Aus landet wird dem Computer ein Punkt gutgeschrieben und die BallGeschwindigkeit zurueckgesetzt
if(SpielBall.xPos >= 680){
hit = 0;
speed = 10;
Punkte.score();
SpielBall = new Ball(30, 205, 7, 7, 2, 2);
SpielBall.move();
//Wenn der Computer vier Punkte hat, wird das Spiel gestoppt
if(Punkte.score > 3){
SpielBall.gameOver1();
Schlaeger1 = new Schlaeger(10, 100, 7, 70);
test = false;
}
}
}
steuerung();
hit();
hit1();
speed();
SpielBall.gameOver();
//neuzeichnen des Applets
repaint();
try{
//Stoppen des Threads für in Klammern angegebene Millisekunden
Thread.sleep(speed);
}
catch(InterruptedException e){
//do nothing
}
//Zurücksetzten der ThreadPriority auf Maximalwert
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
public void update(Graphics g){
// Initialisierung des DoubleBuffers
if (dbImage == null){
dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics();
}
// Bildschirm im Hintergrund löschen
dbg.setColor(getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
// Auf gelöschten Hintergrund Vordergrund zeichnen
dbg.setColor (getForeground());
paint (dbg);
// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
g.drawImage (dbImage, 0, 0, this);
}
//Hier wird gezeichnet
public void paint(Graphics g){
//Hier werden die Spielobjekte gezeichnet
Schlaeger1.drawSchlaeger(g);
Schlaeger2.drawSchlaeger(g);
SpielBall.drawBall(g);
g.setFont(new Font("Arial", Font.BOLD, 24));
g.drawString(""+Punkte.score, 185, 30);
g.drawString("0", 470, 30);
g.drawLine(0, 40, 680, 40);
g.drawLine(340, 40, 340, 480);
g.setColor(Color.blue);
if(test == false){
g.setColor(Color.darkGray);
g.fillOval(140, 125, 400, 150);
g.setColor(Color.orange);
g.drawOval(140, 125, 400, 150);
g.drawString("Spielstart: F6 drücken!", 207, 200);
}
}
//Hier wird der linke Schlaeger gesteuert
public void steuerung(){
if(SpielBall.xPos <= (getSize().width/2) && SpielBall.yPos < Schlaeger1.yPos+30){
Schlaeger1.up();
}
else if(SpielBall.yPos >= Schlaeger1.yPos){
Schlaeger1.yPos = SpielBall.yPos-30;
}
if(Schlaeger1.yPos <= 40)Schlaeger1.min();
if(SpielBall.xPos <= (getSize().width/2) && SpielBall.yPos > Schlaeger1.yPos){
Schlaeger1.down();
}
else if(SpielBall.yPos >= Schlaeger1.yPos){
Schlaeger1.yPos = SpielBall.yPos;
}
if(Schlaeger1.yPos >= 410)Schlaeger1.max();
}
//Hier wird geguckt, ob der Ball vom rechten Schlaeger getroffen wurde und nicht ueber die Spielbegrenzung hinaus geht
public void hit(){
if(SpielBall.xPos >= 656 && SpielBall.yPos >= Schlaeger2.yPos-5 && SpielBall.yPos <= Schlaeger2.yPos+70){
SpielBall.yZufall();
SpielBall.xRichtung();
hit++;
}
}
//Hier wird geguckt, ob der Ball vom linken Schlaeger getroffen wurde
public void hit1(){
if(SpielBall.xPos <= 17 && SpielBall.yPos >= Schlaeger1.yPos-5 && SpielBall.yPos <= Schlaeger1.yPos+70){
SpielBall.xRichtung();
}
}
//Hier wird die Spielgeschwindigkeit erhoeht
public void speed(){
if(hit >= 2)speed = 7;
if(hit >= 6)speed = 4;
}
//Hier werden Punkte für den Computer vergeben
public void scoreRight(){
if(SpielBall.xPos >= 675){
Punkte.score();
}
if(Punkte.score > 4)Punkte.score = 0;
}
//Hier eine anonyme Klasse, die auf KeyEreignisse reagiert
class Key extends KeyAdapter{
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
if(key == KeyEvent.VK_F6){
test = true;
hit = 0;
speed = 10;
scoreRight();
Punkte.score = 0;
Schlaeger1 = new Schlaeger(10, 100, 7, 70);
Schlaeger2 = new Schlaeger(663, 120, 7, 70);
SpielBall = new Ball(30, 205, 7, 7, 2, 2);
}
}
}
//Hier eine anonyme Klasse für MouseEreignisse
class Mouse extends MouseMotionAdapter{
public void mouseMoved(MouseEvent e){
int y = e.getY();
Schlaeger2.yPos = y;
if(Schlaeger2.yPos <= 40)Schlaeger2.min();
if(Schlaeger2.yPos >= 410)Schlaeger2.max();
}
}
}