diff --git a/assets/Map.txt b/assets/Map.txt index f9a47bf..ec3ca9d 100644 --- a/assets/Map.txt +++ b/assets/Map.txt @@ -1,17 +1,17 @@ ################################### # # -# ############ ###### ########### # +# ##### ###### ###### ###### #### # # ###### # -# ############ ###### ########### # -# ############ ########### # -# ## ### # -# ############ 0123 ########### # -# ########## ###### ######### # +# ##### ###### ###### ###### #### # +# ##### ###### ###### #### # +# ##,### # +# ##### ###### ,0123, ###### #### # +# ### ###### ###### ###### ## # # # # P # # # -# ############ # ## # ########### # +# ##### ###### # ## # ###### #### # # # ## # # -# ############ ## ########### # -# ############# ############ # -# ############# #### ############ # +# ### ######## ## ######## ## # +# ##### ####### ####### #### # +# ##### ####### #### ####### #### # # # ################################### \ No newline at end of file diff --git a/assets/point.png b/assets/point.png new file mode 100644 index 0000000..14a50dc Binary files /dev/null and b/assets/point.png differ diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..0e08c32 --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1 @@ +/Point.class diff --git a/bin/Game.class b/bin/Game.class index b3c47f2..2c5cf7e 100644 Binary files a/bin/Game.class and b/bin/Game.class differ diff --git a/bin/Ghost.class b/bin/Ghost.class index a0531e2..9c699c4 100644 Binary files a/bin/Ghost.class and b/bin/Ghost.class differ diff --git a/bin/Map.class b/bin/Map.class index 791a861..a6770a9 100644 Binary files a/bin/Map.class and b/bin/Map.class differ diff --git a/bin/Player.class b/bin/Player.class index ccedcbf..cc24057 100644 Binary files a/bin/Player.class and b/bin/Player.class differ diff --git a/src/Game.java b/src/Game.java index 8b1b633..bc43def 100644 --- a/src/Game.java +++ b/src/Game.java @@ -5,7 +5,7 @@ import java.util.*; import javax.swing.JFrame; import javax.swing.JPanel; -import java.lang.Math; +import java.lang.Math; // In dieser Klasse findet der größte Teil des Spiels statt: // Rendern von Map, Geistern, Pac-Man etc. @@ -93,7 +93,15 @@ public class Game { } } } + for (int i = 0; i < 35; i++) { // für jeden Brick // points + for (int j = 0; j < 35; j++) { // für jeden Brick + if (Map.points[j][i] != null) { // Damit kein Fehler auftritt wegen nicht vorhandenen Bricks + panel.add(Map.points[j][i]); // Der jeweilige Brick wird zum panel hinzugefügt + Map.points[j][i].setBounds(Map.points[j][i].xPos, Map.points[j][i].yPos, 20, 20); // Rendern des + } + } + } frame.setVisible(true); lastT = System.nanoTime(); // delta time @@ -108,44 +116,50 @@ public class Game { player.setLocation(player.getPos('x', dt), player.getPos('y', dt)); // Aktualiesieren der Positionen der Geister: - //for (int i = 0; i < ghosts.length; i++) { - // ghosts[i].setLocation(ghosts[i].getPos('x', dt), ghosts[i].getPos('y', dt)); - //} + // for (int i = 0; i < ghosts.length; i++) { + // ghosts[i].setLocation(ghosts[i].getPos('x', dt), ghosts[i].getPos('y', dt)); + // } for (int i = 0; i < ghosts.length; i++) { - + ghost_possible[i][0] = false; ghost_possible[i][1] = false; ghost_possible[i][2] = false; ghost_possible[i][3] = false; - - if ((Map.bricks[conv(ghosts[i].yPos)][conv(ghosts[i].xPos) + 1] == null && Map.bricks[conv(ghosts[i].yPos + 19)][conv(ghosts[i].xPos) + 1] == null) || (ghosts[i].xPos + 10) % 20 != 0 ){ + + if ((Map.bricks[conv(ghosts[i].yPos)][conv(ghosts[i].xPos) + 1] == null + && Map.bricks[conv(ghosts[i].yPos + 19)][conv(ghosts[i].xPos) + 1] == null) + || (ghosts[i].xPos + 10) % 20 != 0) { ghost_possible[i][0] = true; } - if ((Map.bricks[conv(ghosts[i].yPos)][conv(ghosts[i].xPos) - 1] == null && Map.bricks[conv(ghosts[i].yPos + 19)][conv(ghosts[i].xPos) - 1] == null) || (ghosts[i].xPos + 10) % 20 != 0 ){ + if ((Map.bricks[conv(ghosts[i].yPos)][conv(ghosts[i].xPos) - 1] == null + && Map.bricks[conv(ghosts[i].yPos + 19)][conv(ghosts[i].xPos) - 1] == null) + || (ghosts[i].xPos + 10) % 20 != 0) { ghost_possible[i][1] = true; } - if ((Map.bricks[conv(ghosts[i].yPos) - 1][conv(ghosts[i].xPos)] == null && Map.bricks[conv(ghosts[i].yPos) - 1][conv(ghosts[i].xPos + 19)] == null) || (ghosts[i].yPos + 10) % 20 != 0 ){ + if ((Map.bricks[conv(ghosts[i].yPos) - 1][conv(ghosts[i].xPos)] == null + && Map.bricks[conv(ghosts[i].yPos) - 1][conv(ghosts[i].xPos + 19)] == null) + || (ghosts[i].yPos + 10) % 20 != 0) { ghost_possible[i][2] = true; } - if ((Map.bricks[conv(ghosts[i].yPos) + 1][conv(ghosts[i].xPos)] == null && Map.bricks[conv(ghosts[i].yPos) + 1][conv(ghosts[i].xPos + 19)] == null) || (ghosts[i].yPos + 10) % 20 != 0 ){ + if ((Map.bricks[conv(ghosts[i].yPos) + 1][conv(ghosts[i].xPos)] == null + && Map.bricks[conv(ghosts[i].yPos) + 1][conv(ghosts[i].xPos + 19)] == null) + || (ghosts[i].yPos + 10) % 20 != 0) { ghost_possible[i][3] = true; } - - System.out.println(HCost[0] + " " + HCost[1] + " " + HCost[2] + " " + HCost[3]); - - - - + + // System.out.println(HCost[0] + " " + HCost[1] + " " + HCost[2] + " " + + // HCost[3]); + HCost[0] = ghosts[i].getHCost(player, 1, 0); HCost[1] = ghosts[i].getHCost(player, -1, 0); HCost[2] = ghosts[i].getHCost(player, 0, -1); HCost[3] = ghosts[i].getHCost(player, 0, 1); // int minn = 10000; - + if (ghosts[i].up == true) { HCost[3] = 10000; } @@ -158,8 +172,7 @@ public class Game { if (ghosts[i].right == true) { HCost[1] = 10000; } - - + for (int j = 0; j < 4; j++) { if (ghost_possible[i][j] == false) { HCost[j] = 10500; @@ -171,9 +184,9 @@ public class Game { minn = HCost[j]; } } - - //System.out.println(minn); - + + // System.out.println(minn); + // for (int j = 0; j < 4; j++) { if (HCost[j] == minn) { @@ -207,8 +220,7 @@ public class Game { } } } - - + } @@ -242,7 +254,13 @@ public class Game { } } } - + if ((player.getPos('x', 0) - 10) % 20 == 0 && (player.getPos('y', 0) - 10) % 20 == 0 && Map.points[conv(player.getPos('y', 0))][conv(player.getPos('x', 0))] != null) { + Map.points[conv(player.yPos)][conv(player.xPos)].setBounds(0, 0, 0, 0); + + System.out.println("" + conv(player.yPos) + " " + conv(player.xPos)); + } + + player.calcDir(0); // Berechnen wo Pac-Man als nächstes hin soll for (int i = 0; i < ghosts.length; i++) { @@ -275,10 +293,10 @@ public class Game { e.printStackTrace(); } } - private int conv(float a) { //90.0 --> 4 - int b = (int) (a - 10 )/ 20; + + private int conv(float a) { // 90.0 --> 4 + int b = (int) (a - 10) / 20; return b; } - } diff --git a/src/Map.java b/src/Map.java index 4d07946..d7872c8 100644 --- a/src/Map.java +++ b/src/Map.java @@ -7,7 +7,8 @@ import java.io.FileReader; public class Map { public static Brick bricks[][] = new Brick[35][35]; // Zweidimensionales Array für alle Bricks - // Zweidimensionale Arrays siehe + public static Point points[][] = new Point[35][35]; + // Zweidimensionale Arrays siehe // https://de.wikipedia.org/wiki/Feld_(Datentyp)#Mehrdimensional_/_in-sich-mehrdimensional BufferedReader reader; // reader zum Einlesen der Text Datei @@ -51,6 +52,8 @@ public class Map { } else if (line.charAt(j) == '3') { ghosts[3].setPos('x', 10 + 20 * j); ghosts[3].setPos('y', 10 + 20 * i); + } else if (line.charAt(j) == ' ') { + points[i][j] = new Point(10 + 20 * j, 10 + 20 * i); } } catch (Exception e) { diff --git a/src/Player.java b/src/Player.java index 2509589..6395325 100644 --- a/src/Player.java +++ b/src/Player.java @@ -10,8 +10,8 @@ public class Player extends Picture implements KeyListener { // extends Picture private static final long serialVersionUID = -4225811153447791553L; - private float xPos; // Position auf dem Frame in x-Richtung - private float yPos; // Position auf dem Frame in y-Richtung + public float xPos; // Position auf dem Frame in x-Richtung + public float yPos; // Position auf dem Frame in y-Richtung public int lives = 3; diff --git a/src/Point.java b/src/Point.java new file mode 100644 index 0000000..87f0412 --- /dev/null +++ b/src/Point.java @@ -0,0 +1,24 @@ +// Diese Klasse stellt die einzelnen Bicks (Wände) auf der Map dar. + +public class Point extends Picture { // Die übergeordnete Klasse ist Picture + + + + private static final long serialVersionUID = -1204077187616807301L; + + + public int xPos; // Position auf dem Frame in x-Richtung + public int yPos; // Position auf dem Frame in y-Richtung + + public Point(int newXPos, int newYPos) { // Erstellen des Konstruktors mit den Koordinaten, an denen sich der Brick + // beefinden soll. + + super("point"); // Aufrufen der übergeordneten Klasse + + // Setzen der Positionen: + xPos = newXPos; + yPos = newYPos; + + } + +}