📄 main.java
字号:
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.util.*;
public class Main extends Applet implements Runnable
{
// Deklaration der Variablen
private int speed; // Threadgeschwindigkeit
private int lives; // Leben des Spielers
private int score; // Punkte des Spielers
private int speed_x; // Geschwindigkeit des Steines in x - Richtung
private int speed_y; // Geschwindigkeit des Steines in y - Richtung
// Spielzust鋘de
private boolean notpaused;
// Audiodateien
AudioClip newlevel; // Erreichen eines neuen Levels
AudioClip destroyStones; // Zerst鰎en einer Pyramide
AudioClip highestScore; // Pyramide mit 4 Steinen vollendet
AudioClip addStone; // Stein hinzuf黦en
AudioClip looseLife; // Leben verlieren
public Thread th;
// Variablen f黵 die Doppelpufferung
private Image dbImage;
private Graphics dbg;
// Stars
Stars stars;
// Deklaration der mittleren Platform
Platform platform_middle;
// Deklaration der linken Platform
Platform platform_left;
// Deklaration der rechten Platform
Platform platform_right;
// Deklaration des Steines
Stone stone;
// Deklaration des Spielers
Player player;
/** Init - Funktion */
public void init ()
{
// Threadspeed
speed = Integer.parseInt(getParameter ("speed"));
speed_x = 3;
speed_y = 1;
// Laden der AudioClips
try
{
newlevel = getAudioClip (getCodeBase(), "audio/newlevel.au");
newlevel.play();
newlevel.stop();
addStone = getAudioClip (getCodeBase(), "audio/addStone.au");
addStone.play();
addStone.stop();
destroyStones = getAudioClip (getCodeBase(), "audio/destroyStones.au");
destroyStones.play();
destroyStones.stop();
highestScore = getAudioClip (getCodeBase(), "audio/highestScore.au");
highestScore.play();
highestScore.stop();
looseLife = getAudioClip (getCodeBase(), "audio/looseLife.au");
looseLife.play();
looseLife.stop();
}
catch (Exception e)
{
System.out.println (e);
}
// Hintergrundfarbe
setBackground (Color.black);
// Initialisierung des Spielers
player = new Player(this, newlevel, looseLife, addStone, highestScore, destroyStones);
// Initialisierung des ersten Steines
stone = new Stone(speed_y);
// Initialisierung der Spielevariablen
notpaused = false;
// Initialisierung der Sterne
stars = new Stars();
// Initialisierung der Platformen
platform_middle = new Platform (240, 350, stone, player);
platform_left = new Platform (40, 320, stone, player);
platform_right = new Platform (440, 320, stone, player);
}
public void start()
{
// Schaffen eines neuen Threads, in dem das Spiel l鋟ft
th = new Thread (this);
th.start ();
}
public void stop()
{
notpaused = false;
th.stop();
}
public void destroy()
{
notpaused = false;
th.stop();
}
public boolean mouseDown (Event e, int x, int y)
{
notpaused = true;
start();
return true;
}
public void run ()
{
// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while (notpaused)
{
stone.moveStone();
if (platform_middle.testForCollision())
{
Collision ();
}
else if (platform_left.testForCollision())
{
Collision ();
}
else if (platform_right.testForCollision())
{
Collision ();
}
repaint();
try
{
// Stoppen des Threads f黵 in speed angegebene Millisekunden
Thread.sleep (speed);
}
catch (InterruptedException ex)
{
break;
}
// Zur點ksetzen der ThreadPriority auf Maximalwert
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
}
}
/** Diese Funktion wird nach einer erfolgten Kollision aufgerufen (testForCollision
einer Platform liefert true) */
public void Collision ()
{
stone = null;
stone = new Stone(speed_y);
platform_middle.stone = stone;
platform_left.stone = stone;
platform_right.stone = stone;
}
/** Diese Funktion dient der Klasse Player, die Geschwindigkeit der Steine zu ver鋘dern */
public void nextLevel ()
{
// Erh鰄en der Fallgeschwindigkeit
if (player.getLevel() % 4 == 0)
{
speed_x ++;
speed_y ++;
}
}
public void paint (Graphics g)
{
if (player.getLives() > 0)
{
stars.paintStars (g);
platform_middle.paintPlatform (g);
platform_left.paintPlatform(g);
platform_right.paintPlatform(g);
stone.paintStone (g);
g.setColor (Color.red);
g.drawString ("Score: " + player.getScore(), 500, 50);
g.drawString ("Lives: " + player.getLives(), 500, 70);
g.drawString ("Level: " + player.getLevel(), 500, 90);
if (!notpaused && player.getScore() == 0)
{
g.drawString ("Click on Applet to start game", 215, 150);
g.drawString ("This Game was programmed by FBI", 198, 170);
g.drawString ("Please visit us at www.javacooperation.gmxhome.de", 160, 190);
}
}
else
{
stars.paintStars(g);
platform_middle.paintPlatform (g);
platform_left.paintPlatform(g);
platform_right.paintPlatform(g);
g.setColor (Color.yellow);
if (player.getScore() != 0)
{
g.drawString ("Your Score is " + player.getScore(), 240, 150);
g.drawString ("Thank you for playing, press Space Bar for new game!", 160, 210);
}
g.drawString ("This Game was programmed by FBI", 198, 170);
g.drawString ("Please visit us at www.javacooperation.gmxhome.de", 160, 190);
notpaused = false;
}
}
public boolean keyDown (Event e, int key)
{
if (key == Event.LEFT)
{
stone.setXValue (-speed_x );
}
else if (key == Event.RIGHT)
{
stone.setXValue (speed_x);
}
else if (key == Event.DOWN)
{
stone.setYValue (speed_y + 3);
}
else if (key == 32) // Spacetaste hat Wert 32
{
if (!notpaused)
{
init();
start();
notpaused = true;
}
}
// Erforderter R點kgabewert, hat keine Bedeutung
return true;
}
public boolean keyUp (Event e, int key)
{
if (key == Event.LEFT)
{
stone.setXValue (0);
}
else if (key == Event.RIGHT)
{
stone.setXValue (0);
}
else if (key == Event.DOWN)
{
stone.setYValue (speed_y);
}
else if (key == 32) // Spacetaste hat Wert 32
{
}
// Erforderter R點kgabewert, hat keine Bedeutung
return true;
}
/** Update - Methode, Realisierung der Doppelpufferung zur Reduzierung
des Bildschirmflackerns */
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鰏chen
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
// Auf gel鰏chten Hintergrund Vordergrund zeichnen
dbg.setColor (getForeground());
paint (dbg);
// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
g.drawImage (dbImage, 0, 0, this);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -