⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 Babylon, some kind of tetris with sourcecode.
💻 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 + -