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

📄 main.java

📁 Pong clon with sourcecode.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	{
		// Initialisierung der Variablen
		pos_x = x;				// Startposition des Balles
		pos_y = y;				// Startposition des Balles
		radius = r;				// Radius des Balles
		this.vx = vx;			// Startgeschwindigkeit in X - Richtung
		this.vy = vy;			// Startgeschwindigkeit in Y - Richtung
		ballfarbe = c;			// Ballfarbe
		max_vx = 5;				// Ballgeschwindigkeit in x - Richtung
		max_vy = 5;				// Ballgeschwindigkeit in y - Richtung
		isStoped = true;		// Ball bewegt sich am Anfang nicht

		// Laden des Ballbildes
		ballImg = ((Applet) parent).getImage (((Applet) parent).getCodeBase(), "Ball.gif");

		// Speichern des Frames in mom
		mom = parent;
	}

	/** Move - Methode, berechnet die Bewegung des Balls. Bei jedem Aufruf wird der
	Ball um vx und die vy verschoben.*/

	public void move ()
	{
			// H鋖t die Geschwindigkeit der Balles in richtigem Rahmen
			if (vx > max_vx) vx = max_vx;
			else if (vx < -max_vx) vx = -max_vx;
			else if (vy > max_vy) vy = max_vy;
			else if (vy < -max_vy) vy = -max_vy;
			else if (vx == 0 && !isStoped) vx = 1;

			pos_x += vx;
			pos_y += vy;
	}

	/** Diese Methode testet, wo sich der Ball im Moment befindet. Kommt er den Grenzen
	des Spielfeldes zu nahe, so wird er gebounct. Die Methode testet auch, ob der Ball
	in eines der Tore gegangen ist. Ist dies der Fall, so wird entweder 1 bzw. 2 als
	Wert zur點kgegeben */

	public int wheresBall ()
	{
		if (vy > 0)
		{
			if (pos_y > 330)					// Ball unten im Aus
			{
				vy = -vy;
				return 0;
			}
		}
		else if (vy < 0)
		{
			if (pos_y < 20)						// Ball oben im Aus
			{
				vy = -vy;
				return 0;
			}
		}

		if (vx < 0)
		{
			if (pos_x < 15 && pos_y < 75)		// Ball st鲞t an linke obere Bande
			{
				vx = -vx;
				return 0;
			}
			else if (pos_x < 15 && pos_y > 275)	// Ball st鲞t an linke untere Bande
			{
				vx = -vx;
				return 0;
			}
			else if (pos_x < 15)				// Ansonsten Ball im linken Tor
			{
				vx = -vx;
				return 1;
			}
			else return 0;
		}
		else if (vx > 0)
		{
			if (pos_x > 485 && pos_y < 75) 		// Ball st鲞t an rechte obere Bande
			{
				vx = -vx;
				return 0;
			}
			else if (pos_x > 485 && pos_y > 275)// Ball st鲞t an rechte untere Bande
			{
				vx = -vx;
				return 0;
			}

			else if (pos_x > 485)				// Ansonsten Ball im rechten Tor
			{
				vx = -vx;
				return 2;
			}
			else return 0;
		}
		else return 0;

	}

	/** Diese Methode testet ob es zu einer Collision zwischen Ball und Paddel gekommen ist.
	Ist dies der Fall, so wird die Geschwindigkeit des Balles in X - Richtung umgekehrt.
	Sp鋞er soll die Methode auch in der Lage sein, die Geschwindigkeit des Balles insgesamt
	zu 鋘dern, je nach dem, wie der Ball getroffen wird */

	public void PCollision (Player bat1, Player bat2, AudioClip k)
	{
		// Initialisierung der Ballpositionen
		ball_top = pos_y - radius;
		ball_bottom = pos_y + radius;
		ball_left = pos_x - radius;
		ball_right = pos_x + radius;

		// Initialisierung der momentanen Positionen des Paddels
		player_top = bat1.pos_y;
		player_bottom = bat1.pos_y + bat1.size_y;

		// Ist die Y - Position des Balles zwischen den beiden Paddel - Positionen?
		if ((ball_top >= player_top - 10) && (ball_bottom <= player_bottom + 10))
		{
			// Ist erstes oder zweites Paddel in der N鋒e?
			if (ball_left <= 25 || (ball_left <= 380 && ball_left >= 370))
			{
				// Abspielen der Audiodatei
				k.play();

				// Normales Bouncen
				vx = - vx;

				// Macht die Geschwindigkeit des Balles etwas unberechenbarer
				if (bat1.vy < 0)
				{
					vy --;
				}
				else if (bat1.vy > 0)
				{
					vy += bat1.vy;
				}
			}
		}
	}

	public void CCollision (Computer bat3, Computer bat4, AudioClip k)
	{
		// Initialisierung der Ballpositionen
		ball_top = pos_y - radius;
		ball_bottom = pos_y + radius;
		ball_left = pos_x - radius;
		ball_right = pos_x + radius;

		// Initialisierung der momentanen Positionen des Paddels
		comp_top = bat3.pos_y;
		comp_bottom = bat3.pos_y + bat3.size_y;

		// Ist die Y - Position des Balles zwischen den beiden Paddel - Positionen?
		if ((ball_top >= comp_top - 10) && (ball_bottom <= comp_bottom + 10))
		{
			// Ist erstes oder zweites Paddel in der N鋒e?
			if (ball_right >= 475 || (ball_right <= 125 && ball_right >= 115))
			{
				// Abspielen des AudioClips
				k.play();

				// Normales Bouncen
				vx = - vx;

				// Macht die Geschwindigkeit des Balles etwas unberechenbarer
				if (bat3.vy < 0)
				{
					vy --;
				}
				else if (bat3.vy > 0)
				{
					vy += bat3.vy;
				}
			}
		}
	}

	// Hier kommt noch eine Methode, die die aktuellen Abst鋘de aktualisiert

	/** Diese Methode zeichnet den Ball in das Spielfeld */

	public void DrawBall (Graphics g)
	{
		g.setColor (ballfarbe);
		g.fillOval (pos_x - radius, pos_y - radius, 2 * radius, 2 * radius);
		g.drawImage (ballImg, pos_x - 10, pos_y - 10, mom);
	}

	/** Liefert des X - Wert des Balles zur點k */

	public int posX ()
	{
		return pos_x;
	}

	/** Liefert des Y - Wert des Balles zur點k */

	public int posY ()
	{
		return pos_y;
	}
}

class Player
{
	/** Diese Klasse behandelt alle vom Benutzer verursachten Ereignisse, zeichnet das Paddel,
	testet nach Collisionen mit dem Ball und bewegt das Paddel */

	// Deklaration der Variablen

	public final int pos_x;			// X - Position des Paddels, gilt nur f黵 ein Paddel
	public static int pos_y;		// Y - Position des Paddels, gilt f黵 beide Paddel
	public final int size_x;		// Gr鲞e des Paddels in x - Richtung
	public final int size_y;		// Gr鲞e des Paddels in y - Richtung
	public static int vy;			// Geschwindigkeit in y - Richtung
	private Color paddelcolor;		// Farbe der Paddel

	// Construktor
	public Player (int x, int y)
	{
		pos_x = x;
		Player.pos_y = y;
		size_x = 10;
		size_y = 50;
		paddelcolor = Color.red;
		vy = 0;
	}

	/** Diese Methode bewegt das Paddel */

	public void PaddelMove (int maus_y)
	{
		int new_y_pos;

		new_y_pos = maus_y - (size_y / 2);

		// Berechne Paddelgeschwindigkeit
		if (new_y_pos < Player.pos_y) vy = (Player.pos_y - new_y_pos) / 2;
		else vy = (new_y_pos - Player.pos_y) / 2;

		// neue Position
		Player.pos_y = new_y_pos;
	}

	/** Diese Methode zeichnet das Paddel */
	public void DrawPaddel (Graphics g)
	{
		g.setColor (paddelcolor);
		g.fillRect (pos_x, Player.pos_y, size_x, size_y);
	}
}

class Computer
{
	/** Diese Klasse Implementiert die Bewegungen des Computers und zeichnet auch die
	Computerpaddel */

	// Deklaration der Variablen

	public final int pos_x;			// X - Position des Paddels, gilt nur f黵 ein Paddel
	public static int pos_y;		// Y - Position des Paddels, gilt f黵 beide Paddel
	public final int size_x;		// Gr鲞e des Paddels in x - Richtung
	public final int size_y;		// Gr鲞e des Paddels in y - Richtung
	public int vy;					// Geschwindigkeit in y - Richtung
	public int real_y;				// Speichert die wirkliche Paddelposition (Mitte)
	private Color paddelcolor;		// Farbe der Paddel


	// Construktor
	public Computer (int x, int y)
	{
		pos_x = x;
		pos_y = y;
		size_x = 10;
		size_y = 50;
		paddelcolor = Color.blue;
		vy = 3;
	}

	/** Diese Methode bewegt das Paddel */

	public void ComputerMove (Ball b)
	{
		real_y = pos_y + (size_y / 2);

		// Wenn sich Ball von Paddel wegbewegt, werden die Paddel in die Mitte zur點kbewegt
		if (b.vx < 0)
		{
			// Paddel oberhalb der Mitte
			if (real_y < 175)
			{
				pos_y += vy;
			}
			// Paddel unterhalb der Mitte
			else if (real_y > 175)
			{
				pos_y -= vy;
			}
		}
		else if (b.vx > 0)
		{
			// Solange Paddel nicht auf H鰄e des Balles ist wird es bewegt
			if ( real_y != b.pos_y)
			{
				// Ball oberhalb von Paddel
				if (b.pos_y < real_y)
				{
					pos_y -= vy;
				}
				// Ball unterhalb von Paddel
				else if (b.pos_y > real_y)
				{
					pos_y += vy;
				}
			}
		}
	}

	/** Diese Methode zeichnet das Paddel */
	public void DrawPaddel (Graphics g)
	{
		g.setColor (paddelcolor);
		g.fillRect (pos_x, pos_y, size_x, size_y);
	}
}

⌨️ 快捷键说明

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