Initial sharing of project
This commit is contained in:
127
Spielfiguren.java
Normal file
127
Spielfiguren.java
Normal file
@@ -0,0 +1,127 @@
|
||||
import java.awt.*;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse Spielfiguren.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public abstract class Spielfiguren extends GameObject
|
||||
{
|
||||
protected final Spiel spiel;
|
||||
protected double centerX;
|
||||
protected double centerY;
|
||||
protected final double radius;
|
||||
protected final double Geschwindigkeit;
|
||||
protected Color color;
|
||||
|
||||
protected int bevorzugteRichtungX;
|
||||
protected int bevorzugteRichtungY;
|
||||
protected int bewegteRichtungX;
|
||||
protected int bewegteRichtungY;
|
||||
|
||||
private final double initialX;
|
||||
private final double initialY;
|
||||
|
||||
public Spielfiguren(Spiel spiel, double centerX, double centerY, double radius, double Geschwindigkeit, Color color){
|
||||
this.spiel = spiel;
|
||||
this.centerX = centerX;
|
||||
this.centerY = centerY;
|
||||
this.radius = radius;
|
||||
this.Geschwindigkeit = Geschwindigkeit;
|
||||
this.color = color;
|
||||
|
||||
initialX = centerX;
|
||||
initialY = centerY;
|
||||
}
|
||||
|
||||
public void zuruecksetzen(){
|
||||
centerX = initialX;
|
||||
centerY = initialY;
|
||||
bevorzugteRichtungX= 0;
|
||||
bevorzugteRichtungY = 0;
|
||||
bewegteRichtungX = 0;
|
||||
bewegteRichtungY = 0;
|
||||
}
|
||||
|
||||
public void tickBewegteRichtung(){
|
||||
if(bewegteRichtungX == 0 && bewegteRichtungY == 0){
|
||||
bewegteRichtungX = bevorzugteRichtungX;
|
||||
bewegteRichtungY = bevorzugteRichtungY;
|
||||
}else if(bewegteRichtungX != 0 && bevorzugteRichtungX != 0){
|
||||
bewegteRichtungX = bevorzugteRichtungX;
|
||||
}else if(bewegteRichtungY != 0 && bevorzugteRichtungY != 0){
|
||||
bewegteRichtungY = bevorzugteRichtungY;
|
||||
}
|
||||
}
|
||||
|
||||
public void tickWallCollisions(){
|
||||
Labyrinth labyrinth = spiel.getLabyrinth();
|
||||
|
||||
if(bewegteRichtungX == 1 && !labyrinth.isFrei((int) (centerX + 0.5), (int) centerY)){
|
||||
centerX = (int) centerX + 0.5;
|
||||
bewegteRichtungX = 0;
|
||||
}else if(bewegteRichtungX == -1 && !labyrinth.isFrei((int) (centerX -0.5), (int) centerY)){
|
||||
centerX = (int) centerX + 0.5;
|
||||
bewegteRichtungX = 0;
|
||||
}else if(bewegteRichtungY == 1 && !labyrinth.isFrei((int) centerX, (int) (centerY + 0.5))){
|
||||
centerY = (int) centerY + 0.5;
|
||||
bewegteRichtungY = 0;
|
||||
}else if(bewegteRichtungY == -1 && !labyrinth.isFrei((int) centerX, (int) (centerY - 0.5))){
|
||||
centerY = (int) centerY + 0.5;
|
||||
bewegteRichtungY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void tickTurn(boolean crossedCenterX, boolean crossedCenterY){
|
||||
boolean turnXToY = crossedCenterX && bewegteRichtungX != 0 && bevorzugteRichtungY != 0 && spiel.getLabyrinth().isFrei((int) centerX, (int) (centerY + bevorzugteRichtungY));
|
||||
boolean turnYToX = crossedCenterY && bewegteRichtungY != 0 && bevorzugteRichtungX != 0 && spiel.getLabyrinth().isFrei((int) (centerX + bevorzugteRichtungX), (int) centerY);
|
||||
if(turnXToY){
|
||||
centerX = (int) centerX + 0.5;
|
||||
bewegteRichtungX = 0;
|
||||
bewegteRichtungY = bevorzugteRichtungY;
|
||||
}else if(turnYToX){
|
||||
centerX = (int) centerX + 0.5;
|
||||
bewegteRichtungY = 0;
|
||||
bewegteRichtungX = bevorzugteRichtungX;
|
||||
}
|
||||
}
|
||||
|
||||
public void tick(){
|
||||
tickBewegteRichtung();
|
||||
|
||||
double newX = centerX + bewegteRichtungX * Geschwindigkeit;
|
||||
double newY = centerY + bewegteRichtungY * Geschwindigkeit;
|
||||
|
||||
boolean crossedCenterX = Math.abs((centerX - 0.5)%1.0 - (newX - 0.5) % 1.0)> 0.5;
|
||||
boolean crossedCenterY = Math.abs((centerY - 0.5)%1.0 - (newY - 0.5) % 1.0)> 0.5;
|
||||
|
||||
centerX = newX;
|
||||
centerY = newY;
|
||||
|
||||
|
||||
tickTurn(crossedCenterX, crossedCenterY);
|
||||
tickWallCollisions();
|
||||
}
|
||||
|
||||
public double getCenterX(){
|
||||
return centerX;
|
||||
}
|
||||
|
||||
public double getCenterY(){
|
||||
return centerY;
|
||||
}
|
||||
|
||||
public double getRadius(){
|
||||
return radius;
|
||||
}
|
||||
|
||||
public int getBewegteRichtungX() {
|
||||
return bewegteRichtungX;
|
||||
}
|
||||
|
||||
public int getBewegteRichtungY() {
|
||||
return bewegteRichtungY;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user