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

📄 main.java

📁 Pong clon with sourcecode.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.util.*;
import java.applet.*;
import java.net.*;

public class Main extends Applet implements Runnable
{
	// Deklaration der Variablen und Objekte

	public int score1; 			// Z鋒lt die Tore des Spielers
	public int score2;			// Z鋒lt die Tore des Computers
	public int maus_y;			// Speichert die Mausposition an Stelle y

	Ball puck;					// Ballobject
	Player bat1;				// Playerobject Tor
	Player bat2;				// Playerobject St黵mer
	Computer bat3;				// Computerobject Tor
	Computer bat4;				// Computerobject St黵mer

	Thread th;

	// F鋘gt den von wheresBall gelieferten Wert auf und zeitg an, wer ein Tor geschossen hat
	public int whosgoal;

	// Titelbild
	private Image titleImg;

	// Variablen f黵 die Doppelpufferung
	private Image dbImage;
	private Graphics dbg;

	// Variablen f黵 die Audiodateien
	AudioClip kicknoise;		// Ball trifft Paddel
	AudioClip goalnoise;		// Tor

	// Variablen f黵 die momentanen Spielzust鋘de (Pause und Run)
	boolean play;
	boolean end;
	boolean title;

	// Initialisierung des Applets
	public void init ()
	{
		// Initialisierung der scores
		score1 = 0;
		score2 = 0;

		// Hintergrundfarbe
		setBackground (Color.black);

		// Objekte initialisieren
		puck = new Ball (8, 250, 175, 0, 0, Color.black, this);
		bat1 = new Player (15, 175);
		bat2 = new Player (375, 175);
		bat3 = new Computer (475, 175);
		bat4 = new Computer (115, 175);

		// Initialisierung der Spielzust鋘de
		play = false;
		end = false;
		title = true;

		// Laden des Titelbildes
		titleImg = getImage(getCodeBase(), "Title.gif");

		// Audiodateien initialisieren
		kicknoise = getAudioClip (getCodeBase(), "hit.au");
		kicknoise.play();
		kicknoise.stop();
		goalnoise = getAudioClip (getCodeBase(), "chime.au");
		goalnoise.play();
		goalnoise.stop();
	}

	// Start - Methode, hier beginnt das Applet zu laufen
	public void start ()
	{
		// Schaffen eines neuen Threads, in dem das Spiel l鋟ft
		th = new Thread (this);
		th.start ();
	}

	public void stop ()
	{
		th.stop();
	}

	// Implementierung der Runmethode
	public void run ()
	{
		// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
		Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

		while (true)
		{
			// Neumalen des Fensters
			repaint();

			// Bewegen des Pucks
			puck.move ();

			// bewegen der Computerpaddel
			bat3.ComputerMove (puck);

			// Testen wo sich der Ball im Moment befindet
			whosgoal = puck.wheresBall ();

			// Wenn jemand ein Tor geschossen hat, Punkte hinzuz鋒len und Ball zur點ksetzen
			if (whosgoal != 0)
			{
				if (whosgoal == 1)
				{
					score1 += 1;
					goalnoise.play();
					puck.pos_x = 250;
					puck.vx = 4;
					puck.vy = -4;

					if (score1 == 10)
					{
						play = false;
						end = true;
						puck.isStoped = true;
						puck.vx = 0;
						puck.vy = 0;
					}
				}
				else if (whosgoal == 2)
				{
					score2 += 1;
					goalnoise.play();
					puck.pos_x = 250;
					puck.vx = 4;
					puck.vy = 4;

					if (score2 == 10)
					{
						play = false;
						end = true;
						puck.isStoped = true;
						puck.vx = 0;
						puck.vy = 0;
					}
				}
			}

			/** Testet nach Collisionen von Ball und Spielerpaddel. Dies ist nur relevant, wenn
			sich der Ball auf die Paddel zubewegt */

			if (puck.vx < 0)
			{
				puck.PCollision (bat1, bat2, kicknoise);
			}
			else if (puck.vx > 0)
			{
				puck.CCollision (bat3, bat4, kicknoise);
			}

			try
			{
				// Stoppen des Threads f黵 10 Millisekunden
				Thread.sleep (10);
			}
			catch (InterruptedException ex)
			{
				break;
			}

			// Zur點ksetzen der ThreadPriority auf Maximalwert
			Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		}
	}

	/** Diese Methode f鋘gt Mausereignisse im Frame auf und Speichert die Y Position des Mauszeigers
	desweiteren bestimmt sie die neue Position der beiden Spielerpaddel und testet, ob sich das Paddel
	im Aus befindet*/

	public boolean mouseMove (Event e, int x, int y)
	{
		maus_y = y;

		// Testen, ob das Paddel im Aus ist, wenn nicht, Paddel bewegen
		if (maus_y > 25 & maus_y < 325)
		{
			bat1.PaddelMove (maus_y);
			bat2.PaddelMove (maus_y);
		}

		return true;
	}

	public boolean mouseDown (Event e, int x, int y)
	{
		if (!play)
		{
			play = true;
			end = false;
			title = false;
			puck.vx = 4;
			puck.vy = 4;
			score1 = 0;
			score2 = 0;
			puck.isStoped = false;
		}

		return true;
	}

	/** Paint - Methode */
	public void paint (Graphics g)
	{
		// Spielfeld malen
		g.setColor (Color.cyan);
		g.fillRect (0, 0, 500, 8);		// Obere Linie
		g.fillRect (0, 342, 500, 8);	// Untere Linie
		g.fillRect (0, 0, 8, 75);		// Linke obere Seitenlinie
		g.fillRect (0, 275, 8, 75);		// Linke untere Seitenlinie
		g.fillRect (492, 0, 8, 75);		// Rechte obere Seitenlinie
		g.fillRect (492, 275, 8, 75);	// Rechte untere Seitenlinie

		// Ball malen
		puck.DrawBall (g);

		// Paddel 1 malen
		bat1.DrawPaddel (g);

		// Paddel 2 malen
		bat2.DrawPaddel (g);

		// Paddel 3 malen
		bat3.DrawPaddel (g);

		// Paddel 4 malen
		bat4.DrawPaddel (g);

		// Farbe f黵 strings
		g.setColor (Color.yellow);

		// Spielertore zeichnen
		g.drawString ("Player:  " + score2, 50, 370);

		// Computertore zeichnen
		g.drawString ("Computer:  " + score1, 400, 370);

		if (title)
		{
			g.drawImage (titleImg, 150, 70, this);

			g.drawString ("This game was programmed by FBI", 155, 200);
			g.drawString ("Please visit us at www.javacooperation.gmxhome.de", 125, 220);
			g.drawString ("Click on Applet to start game!", 175, 240);
		}
		else if (end)
		{
			g.drawImage (titleImg, 150, 70, this);

			g.drawString ("This game was programmed by FBI", 155, 200);
			g.drawString ("Please visit us at www.javacooperation.gmxhome.de", 125, 220);
			if (score1 == 10)
			{
				g.drawString ("Computer won the game!!", 180, 240);
			}
			else if (score2 == 10)
			{
				g.drawString ("Player won the game!!", 180, 240);
			}

			g.drawString ("Click on Applet to restart game!", 170, 260);
		}

	}

	/** 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);
	}
}

class Ball
{
	/** Diese Klasse enth鋖t alle Funktionen, die f黵 die Bewegung, Konstruktion, Positionsbestimmung,
	Graphik und Abschiesen des Ball - Objektes von Bedeutung sind. */

	// Deklaration der Variablen
	public int pos_x;			// X - Position des Balles
	public int pos_y;			// Y - Position des Balles
	public int vx;				// X - Geschwindigkeit des Balles
	public int vy;				// Y - Geschwindigkeit des Balles
	public int radius;			// Radius des Balles
	public boolean isStoped;	// Zeigt an, ob der Ball gestoped ist

	private int ball_top;		// Obergrenze des Balles
	private int ball_bottom;	// Untergrenze des Balles
	private int ball_left;		// Linke Grenze des Balles
	private int ball_right;		// Rechte Grenze des Balles
	private int player_top;		// Oberkante des Paddels
	private int player_bottom;	// Unterkante des Paddels
	private int player_right;	// rechte Kante des Paddels
	private int comp_top;		// Oberkante des Computerpaddels
	private int comp_bottom;	// Unterkante des Computerpaddels
	private int comp_left;		// Rechte Seite des Computerpaddels

	private final int max_vx;	// Variable f黵 die maximale Ballgeschwindigkeit in x - Richtung
	private final int max_vy;	// Variable f黵 die maximale Ballgeschwindigkeit in y - Richtung

	public Color ballfarbe;		// Frage des Balles

	Image ballImg;				// Bild des Balles

	Component mom;				// Wird ben鰐igt um Ball mit Bild zu 黚erlagern

	/** Construktor */

	public Ball (int r, int x, int y, int vx, int vy, Color c, Component parent)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -