📄 main.java
字号:
{
// 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 + -