Initial sharing of project
This commit is contained in:
21
Block.java
Normal file
21
Block.java
Normal file
@@ -0,0 +1,21 @@
|
||||
import java.awt.*;
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse Wand.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public class Block extends Spielobjekt
|
||||
{
|
||||
|
||||
public Block(int x, int y){
|
||||
super(x,y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g, int SpielobjektGröße){
|
||||
g.setColor(Color.BLUE);
|
||||
g.fillRect(x*SpielobjektGröße,y*SpielobjektGröße,SpielobjektGröße,SpielobjektGröße);
|
||||
|
||||
}
|
||||
}
|
||||
31
Display.java
Normal file
31
Display.java
Normal file
@@ -0,0 +1,31 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
||||
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse Display.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public class Display extends JPanel
|
||||
{
|
||||
private final Spiel spiel;
|
||||
public Display(Spiel spiel){
|
||||
super();
|
||||
this.spiel = spiel;
|
||||
spiel.add(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paint(Graphics g){
|
||||
Graphics2D g2 = (Graphics2D) g;
|
||||
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC);
|
||||
g2.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
|
||||
|
||||
spiel.render(g2);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
12
GameObject.java
Normal file
12
GameObject.java
Normal file
@@ -0,0 +1,12 @@
|
||||
import java.awt.*;
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse GameObject.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public abstract class GameObject
|
||||
{
|
||||
public abstract void render(Graphics2D g,int SpielobjektGröße);
|
||||
}
|
||||
|
||||
96
GeistGegner.java
Normal file
96
GeistGegner.java
Normal file
@@ -0,0 +1,96 @@
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.event.KeyListener;
|
||||
import java.awt.event.KeyEvent;
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse PacMan.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public class GeistGegner extends Spielfiguren implements KeyListener
|
||||
{
|
||||
protected PacMan pacman;
|
||||
|
||||
GeistGegner(Spiel spiel, double centerX, double centerY, double radius, double Geschwindigkeit){
|
||||
super(spiel, centerX, centerY, radius, Geschwindigkeit, Color.RED);
|
||||
}
|
||||
|
||||
public void tickSpielerkollision() {
|
||||
int x = (int) centerX;
|
||||
int y = (int) centerY;
|
||||
|
||||
double dx = pacman.getCenterX() - centerX;
|
||||
double dy = pacman.getCenterY() - centerY;
|
||||
double r = pacman.getRadius() + radius;
|
||||
|
||||
if (dx * dx + dy * dy < r * r) {
|
||||
spiel.lose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void tickPunktKollision(){
|
||||
int x = (int) centerX;
|
||||
int y = (int) centerY;
|
||||
if(spiel.getLabyrinth().getSpielobjekt(x,y) instanceof Punkt punkt){
|
||||
double dx = punkt.getCenterX() - centerX;
|
||||
double dy = punkt.getCenterY() - centerY;
|
||||
double r = punkt.getRadius() + radius;
|
||||
|
||||
if (dx * dy + dy * dx < r * r){
|
||||
spiel.getLabyrinth().setSpielobjekt(x, y, new Nichts(x, y));
|
||||
if (spiel.getLabyrinth().PunkteZaehler() == 0) {
|
||||
spiel.win();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(KeyEvent e){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
int keyCode = e.getKeyCode();
|
||||
|
||||
if (keyCode == KeyEvent.VK_T) {
|
||||
bevorzugteRichtungX = 0;
|
||||
bevorzugteRichtungY = -1;
|
||||
}else if (keyCode == KeyEvent.VK_F) {
|
||||
bevorzugteRichtungX = -1;
|
||||
bevorzugteRichtungY = 0;
|
||||
}else if (keyCode == KeyEvent.VK_G) {
|
||||
bevorzugteRichtungX = 0;
|
||||
bevorzugteRichtungY = 1;
|
||||
}else if (keyCode == KeyEvent.VK_H) {
|
||||
bevorzugteRichtungX = 1;
|
||||
bevorzugteRichtungY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(){
|
||||
super.tick();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g, int SpielobjektGröße){
|
||||
double centerXOnScreen = centerX * SpielobjektGröße;
|
||||
double centerYOnScreen = centerY* SpielobjektGröße;
|
||||
double radiusOnScreen = radius * SpielobjektGröße;
|
||||
double diameterOnScreen = radiusOnScreen * 2.0;
|
||||
|
||||
g.setColor(color);
|
||||
g.fill(new Rectangle2D.Double(centerXOnScreen - radiusOnScreen, centerYOnScreen - radiusOnScreen, diameterOnScreen, diameterOnScreen));
|
||||
}
|
||||
}
|
||||
97
GeistGegner2.java
Normal file
97
GeistGegner2.java
Normal file
@@ -0,0 +1,97 @@
|
||||
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.event.KeyListener;
|
||||
import java.awt.event.KeyEvent;
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse PacMan.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public class GeistGegner2 extends Spielfiguren implements KeyListener
|
||||
{
|
||||
protected PacMan pacman;
|
||||
|
||||
GeistGegner2(Spiel spiel, double centerX, double centerY, double radius, double Geschwindigkeit){
|
||||
super(spiel, centerX, centerY, radius, Geschwindigkeit, Color.BLUE);
|
||||
}
|
||||
|
||||
public void tickSpielerkollision() {
|
||||
int x = (int) centerX;
|
||||
int y = (int) centerY;
|
||||
|
||||
double dx = pacman.getCenterX() - centerX;
|
||||
double dy = pacman.getCenterY() - centerY;
|
||||
double r = pacman.getRadius() + radius;
|
||||
|
||||
if (dx * dx + dy * dy < r * r) {
|
||||
spiel.lose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void tickPunktKollision(){
|
||||
int x = (int) centerX;
|
||||
int y = (int) centerY;
|
||||
if(spiel.getLabyrinth().getSpielobjekt(x,y) instanceof Punkt punkt){
|
||||
double dx = punkt.getCenterX() - centerX;
|
||||
double dy = punkt.getCenterY() - centerY;
|
||||
double r = punkt.getRadius() + radius;
|
||||
|
||||
if (dx * dy + dy * dx < r * r){
|
||||
spiel.getLabyrinth().setSpielobjekt(x, y, new Nichts(x, y));
|
||||
if (spiel.getLabyrinth().PunkteZaehler() == 0) {
|
||||
spiel.win();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(KeyEvent e){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
int keyCode = e.getKeyCode();
|
||||
|
||||
if (keyCode == KeyEvent.VK_UP) {
|
||||
bevorzugteRichtungX = 0;
|
||||
bevorzugteRichtungY = -1;
|
||||
}else if (keyCode == KeyEvent.VK_LEFT) {
|
||||
bevorzugteRichtungX = -1;
|
||||
bevorzugteRichtungY = 0;
|
||||
}else if (keyCode == KeyEvent.VK_DOWN) {
|
||||
bevorzugteRichtungX = 0;
|
||||
bevorzugteRichtungY = 1;
|
||||
}else if (keyCode == KeyEvent.VK_RIGHT) {
|
||||
bevorzugteRichtungX = 1;
|
||||
bevorzugteRichtungY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(){
|
||||
super.tick();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g, int SpielobjektGröße){
|
||||
double centerXOnScreen = centerX * SpielobjektGröße;
|
||||
double centerYOnScreen = centerY* SpielobjektGröße;
|
||||
double radiusOnScreen = radius * SpielobjektGröße;
|
||||
double diameterOnScreen = radiusOnScreen * 2.0;
|
||||
|
||||
g.setColor(color);
|
||||
g.fill(new Rectangle2D.Double(centerXOnScreen - radiusOnScreen, centerYOnScreen - radiusOnScreen, diameterOnScreen, diameterOnScreen));
|
||||
}
|
||||
}
|
||||
112
Labyrinth.java
Normal file
112
Labyrinth.java
Normal file
@@ -0,0 +1,112 @@
|
||||
import java.awt.*;
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse Labyrinth.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public class Labyrinth extends GameObject
|
||||
{
|
||||
|
||||
private static final int[][] MAP = {
|
||||
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
|
||||
{1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1},
|
||||
{1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1},
|
||||
{1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, 0, 2, 2, 2, 0, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1},
|
||||
{1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1},
|
||||
{1, 2, 2, 2, 1, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 2, 2, 1},
|
||||
{1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1},
|
||||
{1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 1},
|
||||
{1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1},
|
||||
{1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1},
|
||||
{1, 2, 1, 2, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 1, 2, 1, 2, 1},
|
||||
{1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1},
|
||||
{1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1},
|
||||
{1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1},
|
||||
{1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 2, 2, 2, 1, 2, 1},
|
||||
{1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1},
|
||||
{1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1},
|
||||
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
|
||||
};
|
||||
|
||||
private final int SpielobjektGröße;
|
||||
Spielobjekt[][]Spielobjekte;
|
||||
|
||||
Labyrinth(int SpielobjektGröße){
|
||||
this.SpielobjektGröße = SpielobjektGröße;
|
||||
Spielobjekte = new Spielobjekt[MAP.length][MAP[0].length];
|
||||
zuruecksetzen();
|
||||
|
||||
}
|
||||
|
||||
public void zuruecksetzen(){
|
||||
for(int y = 0; y < getHöhe(); y++){
|
||||
for(int x = 0; x < getBreite(); x++){
|
||||
int SpielobjektID = MAP[y][x];
|
||||
|
||||
if(SpielobjektID == 0){
|
||||
Spielobjekte[y][x] = new Nichts(x,y);
|
||||
}else if(SpielobjektID == 1){
|
||||
Spielobjekte[y][x] = new Block(x,y);
|
||||
}else if(SpielobjektID == 2){
|
||||
Spielobjekte[y][x] = new Punkt(x,y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void render(Graphics2D g, int SpielobjektGröße){
|
||||
for(Spielobjekt[] row: Spielobjekte){
|
||||
for(Spielobjekt spielobjekt: row){
|
||||
spielobjekt.render(g, SpielobjektGröße);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int PunkteZaehler(){
|
||||
int sum = 0;
|
||||
|
||||
for (Spielobjekt[] reihe : Spielobjekte){
|
||||
for (Spielobjekt spielobjekt : reihe){
|
||||
if (spielobjekt instanceof Punkt){
|
||||
sum++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
public boolean isFrei(int x, int y){
|
||||
if(x < 0){
|
||||
return false;
|
||||
}else if(y < 0){
|
||||
return false;
|
||||
}else if(x >= getBreite()){
|
||||
return false;
|
||||
}else if(y >= getHöhe()){
|
||||
return false;
|
||||
}
|
||||
return !(Spielobjekte[y][x] instanceof Block);
|
||||
}
|
||||
|
||||
public int getBreite(){
|
||||
return Spielobjekte[0].length;
|
||||
}
|
||||
|
||||
public int getHöhe(){
|
||||
return Spielobjekte.length;
|
||||
}
|
||||
|
||||
public int getSpielobjektGröße(){
|
||||
return SpielobjektGröße;
|
||||
}
|
||||
|
||||
public Spielobjekt getSpielobjekt(int x, int y){
|
||||
return Spielobjekte[y][x];
|
||||
}
|
||||
|
||||
public void setSpielobjekt(int x, int y, Spielobjekt spielobjekt){
|
||||
Spielobjekte[y][x] = spielobjekt;
|
||||
}
|
||||
}
|
||||
18
Nichts.java
Normal file
18
Nichts.java
Normal file
@@ -0,0 +1,18 @@
|
||||
import java.awt.*;
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse Nichts.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public class Nichts extends Spielobjekt
|
||||
{
|
||||
Nichts(int x, int y){
|
||||
super(x,y);
|
||||
}
|
||||
|
||||
public void render(Graphics2D g, int SpielobjektGröße){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
83
PacMan.java
Normal file
83
PacMan.java
Normal file
@@ -0,0 +1,83 @@
|
||||
import java.awt.*;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
import java.awt.event.KeyListener;
|
||||
import java.awt.event.KeyEvent;
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse PacMan.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public class PacMan extends Spielfiguren implements KeyListener
|
||||
{
|
||||
PacMan(Spiel spiel, double centerX, double centerY, double radius, double Geschwindigkeit){
|
||||
super(spiel, centerX, centerY, radius, Geschwindigkeit, Color.YELLOW);
|
||||
}
|
||||
|
||||
private void tickPunktKollision(){
|
||||
int x = (int) centerX;
|
||||
int y = (int) centerY;
|
||||
if(spiel.getLabyrinth().getSpielobjekt(x,y) instanceof Punkt punkt){
|
||||
double dx = punkt.getCenterX() - centerX;
|
||||
double dy = punkt.getCenterY() - centerY;
|
||||
double r = punkt.getRadius() + radius;
|
||||
|
||||
if (dx * dy + dy * dx < r * r){
|
||||
spiel.getLabyrinth().setSpielobjekt(x, y, new Nichts(x, y));
|
||||
if (spiel.getLabyrinth().PunkteZaehler() == 0) {
|
||||
spiel.win();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void tick(){
|
||||
super.tick();
|
||||
tickPunktKollision();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g, int SpielobjektGröße){
|
||||
double centerXOnScreen = centerX * SpielobjektGröße;
|
||||
double centerYOnScreen = centerY* SpielobjektGröße;
|
||||
double radiusOnScreen = radius * SpielobjektGröße;
|
||||
double diameterOnScreen = radiusOnScreen * 2.0;
|
||||
|
||||
g.setColor(color);
|
||||
g.fill(new Ellipse2D.Double(centerXOnScreen - radiusOnScreen, centerYOnScreen - radiusOnScreen, diameterOnScreen, diameterOnScreen));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(KeyEvent e){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
int keyCode = e.getKeyCode();
|
||||
|
||||
if (keyCode == KeyEvent.VK_W) {
|
||||
bevorzugteRichtungX = 0;
|
||||
bevorzugteRichtungY = -1;
|
||||
}else if (keyCode == KeyEvent.VK_A) {
|
||||
bevorzugteRichtungX = -1;
|
||||
bevorzugteRichtungY = 0;
|
||||
}else if (keyCode == KeyEvent.VK_S) {
|
||||
bevorzugteRichtungX = 0;
|
||||
bevorzugteRichtungY = 1;
|
||||
}else if (keyCode == KeyEvent.VK_D) {
|
||||
bevorzugteRichtungX = 1;
|
||||
bevorzugteRichtungY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent e){
|
||||
|
||||
}
|
||||
}
|
||||
44
Punkt.java
Normal file
44
Punkt.java
Normal file
@@ -0,0 +1,44 @@
|
||||
import java.awt.*;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse Punkt.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public class Punkt extends Spielobjekt
|
||||
{
|
||||
double radius;
|
||||
|
||||
Punkt(int x, int y, double radius){
|
||||
super(x,y);
|
||||
this.radius = radius;
|
||||
}
|
||||
|
||||
public Punkt(int x, int y){
|
||||
this(x,y, 0.125);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(Graphics2D g, int SpielobjektGröße){
|
||||
double centerXOnScreen = getCenterX() * SpielobjektGröße;
|
||||
double centerYOnScreen = getCenterY()* SpielobjektGröße;
|
||||
double radiusOnScreen = radius * SpielobjektGröße;
|
||||
double diameterOnScreen = radiusOnScreen * 2.0;
|
||||
|
||||
g.setColor(Color.YELLOW);
|
||||
g.fill(new Ellipse2D.Double(centerXOnScreen - radiusOnScreen, centerYOnScreen - radiusOnScreen, diameterOnScreen, diameterOnScreen));
|
||||
}
|
||||
|
||||
public double getCenterX(){
|
||||
return x + 0.5;
|
||||
}
|
||||
|
||||
public double getCenterY(){
|
||||
return y + 0.5;
|
||||
}
|
||||
|
||||
public double getRadius(){
|
||||
return radius;
|
||||
}
|
||||
}
|
||||
24
README.TXT
Normal file
24
README.TXT
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
PROJEKTBEZEICHNUNG: Grafikdokument
|
||||
|
||||
PROJEKTZWECK:
|
||||
Ein erstes Einstiegsprojekt in die Entwicklungsumgebung BlueJ.
|
||||
Dient zur Wiederholung der Begriffe Klasse, Objekt, Attribut, Methode, etc.
|
||||
aus dem Informatikunterricht der Unterstufe.
|
||||
|
||||
Man kann verschiedene Figuren erzeugen, die mit ihrem zugehörigen Grafiksymbol
|
||||
in einem Grafikfenster eingezeichnet werden.
|
||||
|
||||
Diese Figuren können, durch den Aufruf von Methoden interaktiv verändert werden.
|
||||
Nach jedem Methodenaufruf wird das Grafiksymbol und damit die ganze Zeichnung
|
||||
automatisch angepasst.
|
||||
|
||||
WIE IST DAS PROJEKT ZU STARTEN:
|
||||
Erzeugen neuer Figur-Objekte über das Kontextmenü.
|
||||
|
||||
VERSION:
|
||||
1.0
|
||||
|
||||
AUTOR(EN):
|
||||
U.Freiberger
|
||||
|
||||
102
Spiel.java
Normal file
102
Spiel.java
Normal file
@@ -0,0 +1,102 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse Spiel.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public class Spiel extends JFrame
|
||||
{
|
||||
private final Display display;
|
||||
private final Labyrinth labyrinth;
|
||||
private final PacMan pacman;
|
||||
private final GeistGegner geistgegner;
|
||||
private final GeistGegner2 geistgegner2;
|
||||
|
||||
private boolean won;
|
||||
|
||||
|
||||
|
||||
|
||||
Spiel(){
|
||||
super("Game");
|
||||
|
||||
display = new Display(this);
|
||||
labyrinth = new Labyrinth(40);
|
||||
pacman = new PacMan(this, 13.5, 10.5, 0.375, 0.07);
|
||||
addKeyListener(pacman);
|
||||
|
||||
geistgegner = new GeistGegner(this,12.5, 8.5, 0.375, 0.06);
|
||||
addKeyListener(geistgegner);
|
||||
|
||||
geistgegner2 = new GeistGegner2(this,14.5, 8.5, 0.375, 0.06);
|
||||
addKeyListener(geistgegner2);
|
||||
|
||||
|
||||
setSize(1096, 759);
|
||||
setResizable(false);
|
||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||
setLocationRelativeTo(null);
|
||||
setVisible(true);
|
||||
|
||||
startSpielLoop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void startSpielLoop(){
|
||||
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(()-> {tick();display.repaint();}, 0L, 1000L / 60L, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
private void zuruecksetzen(){
|
||||
won = false;
|
||||
labyrinth.zuruecksetzen();
|
||||
pacman.zuruecksetzen();
|
||||
geistgegner.zuruecksetzen();
|
||||
geistgegner2.zuruecksetzen();
|
||||
}
|
||||
|
||||
public void win() {
|
||||
won = true;
|
||||
}
|
||||
|
||||
public void lose(){
|
||||
JOptionPane.showMessageDialog(null, "Game Over!");
|
||||
zuruecksetzen();
|
||||
}
|
||||
|
||||
private void tick(){
|
||||
if (won) {
|
||||
JOptionPane.showMessageDialog(null, "Du hast gewonnen!");
|
||||
zuruecksetzen();
|
||||
}
|
||||
pacman.tick();
|
||||
geistgegner.tick();
|
||||
geistgegner2.tick();
|
||||
}
|
||||
|
||||
public void render(Graphics2D g2){
|
||||
g2.setColor(Color.BLACK);
|
||||
g2.fillRect(0,0,getWidth(), getHeight());
|
||||
|
||||
labyrinth.render(g2, labyrinth.getSpielobjektGröße());
|
||||
pacman.render(g2, labyrinth.getSpielobjektGröße());
|
||||
|
||||
geistgegner.render(g2, labyrinth.getSpielobjektGröße());
|
||||
geistgegner2.render(g2, labyrinth.getSpielobjektGröße());
|
||||
|
||||
}
|
||||
|
||||
public Labyrinth getLabyrinth(){
|
||||
return labyrinth;
|
||||
}
|
||||
|
||||
public GeistGegner getGegner() {
|
||||
return geistgegner;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
17
Spielobjekt.java
Normal file
17
Spielobjekt.java
Normal file
@@ -0,0 +1,17 @@
|
||||
|
||||
/**
|
||||
* Beschreiben Sie hier die Klasse Spielobjekte.
|
||||
*
|
||||
* @author (Ihr Name)
|
||||
* @version (eine Versionsnummer oder ein Datum)
|
||||
*/
|
||||
public abstract class Spielobjekt extends GameObject
|
||||
{
|
||||
protected final int x;
|
||||
protected final int y;
|
||||
|
||||
public Spielobjekt(int x, int y){
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
}
|
||||
178
bluej.pkg
Normal file
178
bluej.pkg
Normal file
@@ -0,0 +1,178 @@
|
||||
#BlueJ package file
|
||||
dependency1.from=PacMan
|
||||
dependency1.to=Spiel
|
||||
dependency1.type=UsesDependency
|
||||
dependency10.from=GeistGegner
|
||||
dependency10.to=Punkt
|
||||
dependency10.type=UsesDependency
|
||||
dependency11.from=GeistGegner
|
||||
dependency11.to=Nichts
|
||||
dependency11.type=UsesDependency
|
||||
dependency12.from=Labyrinth
|
||||
dependency12.to=Spielobjekt
|
||||
dependency12.type=UsesDependency
|
||||
dependency13.from=Labyrinth
|
||||
dependency13.to=Nichts
|
||||
dependency13.type=UsesDependency
|
||||
dependency14.from=Labyrinth
|
||||
dependency14.to=Block
|
||||
dependency14.type=UsesDependency
|
||||
dependency15.from=Labyrinth
|
||||
dependency15.to=Punkt
|
||||
dependency15.type=UsesDependency
|
||||
dependency16.from=Spiel
|
||||
dependency16.to=Display
|
||||
dependency16.type=UsesDependency
|
||||
dependency17.from=Spiel
|
||||
dependency17.to=Labyrinth
|
||||
dependency17.type=UsesDependency
|
||||
dependency18.from=Spiel
|
||||
dependency18.to=PacMan
|
||||
dependency18.type=UsesDependency
|
||||
dependency19.from=Spiel
|
||||
dependency19.to=GeistGegner
|
||||
dependency19.type=UsesDependency
|
||||
dependency2.from=PacMan
|
||||
dependency2.to=Punkt
|
||||
dependency2.type=UsesDependency
|
||||
dependency20.from=Spiel
|
||||
dependency20.to=GeistGegner2
|
||||
dependency20.type=UsesDependency
|
||||
dependency21.from=Spielfiguren
|
||||
dependency21.to=Spiel
|
||||
dependency21.type=UsesDependency
|
||||
dependency22.from=Spielfiguren
|
||||
dependency22.to=Labyrinth
|
||||
dependency22.type=UsesDependency
|
||||
dependency23.from=Display
|
||||
dependency23.to=Spiel
|
||||
dependency23.type=UsesDependency
|
||||
dependency3.from=PacMan
|
||||
dependency3.to=Nichts
|
||||
dependency3.type=UsesDependency
|
||||
dependency4.from=GeistGegner2
|
||||
dependency4.to=PacMan
|
||||
dependency4.type=UsesDependency
|
||||
dependency5.from=GeistGegner2
|
||||
dependency5.to=Spiel
|
||||
dependency5.type=UsesDependency
|
||||
dependency6.from=GeistGegner2
|
||||
dependency6.to=Punkt
|
||||
dependency6.type=UsesDependency
|
||||
dependency7.from=GeistGegner2
|
||||
dependency7.to=Nichts
|
||||
dependency7.type=UsesDependency
|
||||
dependency8.from=GeistGegner
|
||||
dependency8.to=PacMan
|
||||
dependency8.type=UsesDependency
|
||||
dependency9.from=GeistGegner
|
||||
dependency9.to=Spiel
|
||||
dependency9.type=UsesDependency
|
||||
editor.fx.0.height=0
|
||||
editor.fx.0.width=0
|
||||
editor.fx.0.x=0
|
||||
editor.fx.0.y=0
|
||||
objectbench.height=82
|
||||
objectbench.width=1256
|
||||
package.divider.horizontal=0.6
|
||||
package.divider.vertical=0.8469852104664392
|
||||
package.editor.height=488
|
||||
package.editor.width=1132
|
||||
package.editor.x=0
|
||||
package.editor.y=0
|
||||
package.frame.height=685
|
||||
package.frame.width=1294
|
||||
package.numDependencies=23
|
||||
package.numTargets=12
|
||||
package.showExtends=true
|
||||
package.showUses=true
|
||||
project.charset=windows-1252
|
||||
readme.height=60
|
||||
readme.name=@README
|
||||
readme.width=48
|
||||
readme.x=10
|
||||
readme.y=10
|
||||
target1.height=70
|
||||
target1.name=PacMan
|
||||
target1.showInterface=false
|
||||
target1.type=ClassTarget
|
||||
target1.width=120
|
||||
target1.x=780
|
||||
target1.y=270
|
||||
target10.height=70
|
||||
target10.name=Block
|
||||
target10.showInterface=false
|
||||
target10.type=ClassTarget
|
||||
target10.width=120
|
||||
target10.x=480
|
||||
target10.y=390
|
||||
target11.height=70
|
||||
target11.name=Spielobjekt
|
||||
target11.showInterface=false
|
||||
target11.type=AbstractTarget
|
||||
target11.width=120
|
||||
target11.x=320
|
||||
target11.y=210
|
||||
target12.height=70
|
||||
target12.name=Display
|
||||
target12.showInterface=false
|
||||
target12.type=ClassTarget
|
||||
target12.width=120
|
||||
target12.x=10
|
||||
target12.y=150
|
||||
target2.height=70
|
||||
target2.name=GeistGegner2
|
||||
target2.showInterface=false
|
||||
target2.type=ClassTarget
|
||||
target2.width=120
|
||||
target2.x=930
|
||||
target2.y=90
|
||||
target3.height=70
|
||||
target3.name=GeistGegner
|
||||
target3.showInterface=false
|
||||
target3.type=ClassTarget
|
||||
target3.width=120
|
||||
target3.x=770
|
||||
target3.y=90
|
||||
target4.height=70
|
||||
target4.name=Labyrinth
|
||||
target4.showInterface=false
|
||||
target4.type=ClassTarget
|
||||
target4.width=120
|
||||
target4.x=530
|
||||
target4.y=110
|
||||
target5.height=70
|
||||
target5.name=Punkt
|
||||
target5.showInterface=false
|
||||
target5.type=ClassTarget
|
||||
target5.width=120
|
||||
target5.x=160
|
||||
target5.y=390
|
||||
target6.height=70
|
||||
target6.name=Nichts
|
||||
target6.showInterface=false
|
||||
target6.type=ClassTarget
|
||||
target6.width=120
|
||||
target6.x=320
|
||||
target6.y=350
|
||||
target7.height=70
|
||||
target7.name=Spiel
|
||||
target7.showInterface=false
|
||||
target7.type=ClassTarget
|
||||
target7.width=120
|
||||
target7.x=100
|
||||
target7.y=40
|
||||
target8.height=70
|
||||
target8.name=GameObject
|
||||
target8.showInterface=false
|
||||
target8.type=AbstractTarget
|
||||
target8.width=120
|
||||
target8.x=320
|
||||
target8.y=110
|
||||
target9.height=70
|
||||
target9.name=Spielfiguren
|
||||
target9.showInterface=false
|
||||
target9.type=AbstractTarget
|
||||
target9.width=120
|
||||
target9.x=560
|
||||
target9.y=240
|
||||
178
package.bluej
Normal file
178
package.bluej
Normal file
@@ -0,0 +1,178 @@
|
||||
#BlueJ package file
|
||||
dependency1.from=PacMan
|
||||
dependency1.to=Spiel
|
||||
dependency1.type=UsesDependency
|
||||
dependency10.from=GeistGegner
|
||||
dependency10.to=Punkt
|
||||
dependency10.type=UsesDependency
|
||||
dependency11.from=GeistGegner
|
||||
dependency11.to=Nichts
|
||||
dependency11.type=UsesDependency
|
||||
dependency12.from=Labyrinth
|
||||
dependency12.to=Spielobjekt
|
||||
dependency12.type=UsesDependency
|
||||
dependency13.from=Labyrinth
|
||||
dependency13.to=Nichts
|
||||
dependency13.type=UsesDependency
|
||||
dependency14.from=Labyrinth
|
||||
dependency14.to=Block
|
||||
dependency14.type=UsesDependency
|
||||
dependency15.from=Labyrinth
|
||||
dependency15.to=Punkt
|
||||
dependency15.type=UsesDependency
|
||||
dependency16.from=Spiel
|
||||
dependency16.to=Display
|
||||
dependency16.type=UsesDependency
|
||||
dependency17.from=Spiel
|
||||
dependency17.to=Labyrinth
|
||||
dependency17.type=UsesDependency
|
||||
dependency18.from=Spiel
|
||||
dependency18.to=PacMan
|
||||
dependency18.type=UsesDependency
|
||||
dependency19.from=Spiel
|
||||
dependency19.to=GeistGegner
|
||||
dependency19.type=UsesDependency
|
||||
dependency2.from=PacMan
|
||||
dependency2.to=Punkt
|
||||
dependency2.type=UsesDependency
|
||||
dependency20.from=Spiel
|
||||
dependency20.to=GeistGegner2
|
||||
dependency20.type=UsesDependency
|
||||
dependency21.from=Spielfiguren
|
||||
dependency21.to=Spiel
|
||||
dependency21.type=UsesDependency
|
||||
dependency22.from=Spielfiguren
|
||||
dependency22.to=Labyrinth
|
||||
dependency22.type=UsesDependency
|
||||
dependency23.from=Display
|
||||
dependency23.to=Spiel
|
||||
dependency23.type=UsesDependency
|
||||
dependency3.from=PacMan
|
||||
dependency3.to=Nichts
|
||||
dependency3.type=UsesDependency
|
||||
dependency4.from=GeistGegner2
|
||||
dependency4.to=PacMan
|
||||
dependency4.type=UsesDependency
|
||||
dependency5.from=GeistGegner2
|
||||
dependency5.to=Spiel
|
||||
dependency5.type=UsesDependency
|
||||
dependency6.from=GeistGegner2
|
||||
dependency6.to=Punkt
|
||||
dependency6.type=UsesDependency
|
||||
dependency7.from=GeistGegner2
|
||||
dependency7.to=Nichts
|
||||
dependency7.type=UsesDependency
|
||||
dependency8.from=GeistGegner
|
||||
dependency8.to=PacMan
|
||||
dependency8.type=UsesDependency
|
||||
dependency9.from=GeistGegner
|
||||
dependency9.to=Spiel
|
||||
dependency9.type=UsesDependency
|
||||
editor.fx.0.height=0
|
||||
editor.fx.0.width=0
|
||||
editor.fx.0.x=0
|
||||
editor.fx.0.y=0
|
||||
objectbench.height=82
|
||||
objectbench.width=1256
|
||||
package.divider.horizontal=0.6
|
||||
package.divider.vertical=0.8469852104664392
|
||||
package.editor.height=488
|
||||
package.editor.width=1132
|
||||
package.editor.x=0
|
||||
package.editor.y=0
|
||||
package.frame.height=685
|
||||
package.frame.width=1294
|
||||
package.numDependencies=23
|
||||
package.numTargets=12
|
||||
package.showExtends=true
|
||||
package.showUses=true
|
||||
project.charset=windows-1252
|
||||
readme.height=60
|
||||
readme.name=@README
|
||||
readme.width=48
|
||||
readme.x=10
|
||||
readme.y=10
|
||||
target1.height=70
|
||||
target1.name=PacMan
|
||||
target1.showInterface=false
|
||||
target1.type=ClassTarget
|
||||
target1.width=120
|
||||
target1.x=780
|
||||
target1.y=270
|
||||
target10.height=70
|
||||
target10.name=Block
|
||||
target10.showInterface=false
|
||||
target10.type=ClassTarget
|
||||
target10.width=120
|
||||
target10.x=480
|
||||
target10.y=390
|
||||
target11.height=70
|
||||
target11.name=Spielobjekt
|
||||
target11.showInterface=false
|
||||
target11.type=AbstractTarget
|
||||
target11.width=120
|
||||
target11.x=320
|
||||
target11.y=210
|
||||
target12.height=70
|
||||
target12.name=Display
|
||||
target12.showInterface=false
|
||||
target12.type=ClassTarget
|
||||
target12.width=120
|
||||
target12.x=10
|
||||
target12.y=150
|
||||
target2.height=70
|
||||
target2.name=GeistGegner2
|
||||
target2.showInterface=false
|
||||
target2.type=ClassTarget
|
||||
target2.width=120
|
||||
target2.x=930
|
||||
target2.y=90
|
||||
target3.height=70
|
||||
target3.name=GeistGegner
|
||||
target3.showInterface=false
|
||||
target3.type=ClassTarget
|
||||
target3.width=120
|
||||
target3.x=770
|
||||
target3.y=90
|
||||
target4.height=70
|
||||
target4.name=Labyrinth
|
||||
target4.showInterface=false
|
||||
target4.type=ClassTarget
|
||||
target4.width=120
|
||||
target4.x=530
|
||||
target4.y=110
|
||||
target5.height=70
|
||||
target5.name=Punkt
|
||||
target5.showInterface=false
|
||||
target5.type=ClassTarget
|
||||
target5.width=120
|
||||
target5.x=160
|
||||
target5.y=390
|
||||
target6.height=70
|
||||
target6.name=Nichts
|
||||
target6.showInterface=false
|
||||
target6.type=ClassTarget
|
||||
target6.width=120
|
||||
target6.x=320
|
||||
target6.y=350
|
||||
target7.height=70
|
||||
target7.name=Spiel
|
||||
target7.showInterface=false
|
||||
target7.type=ClassTarget
|
||||
target7.width=120
|
||||
target7.x=100
|
||||
target7.y=40
|
||||
target8.height=70
|
||||
target8.name=GameObject
|
||||
target8.showInterface=false
|
||||
target8.type=AbstractTarget
|
||||
target8.width=120
|
||||
target8.x=320
|
||||
target8.y=110
|
||||
target9.height=70
|
||||
target9.name=Spielfiguren
|
||||
target9.showInterface=false
|
||||
target9.type=AbstractTarget
|
||||
target9.width=120
|
||||
target9.x=560
|
||||
target9.y=240
|
||||
Reference in New Issue
Block a user