T
Telrion
Gast
Hey Leute,
ich bin gerade im 2 Semester für Bioinformatik und habe in Java die Aufgabe ein Rogue Like Game zu schreiben. Dazu muss ich bis zum Juli einen Meilenstein einreichen der besagt, dass ein randomgenerierter Dungeon vorhanden sein muss. Desweiteren muss dieser Dungeon als Baum programmiert sein.
Ich weiß, dass es wahrscheinlich nicht der schönste Code ist, aber da ich erst seit Anfang des Semesters in Java programmiere bin ich recht zufrieden.
Nun zu meinem Problem, ich habe den Debugger in Netbeans schon durchlaufen lassen und laut diesem wird mein Dungeon wunderbar geteilt, allerdings zeichnet mir das Programm nur eine einzige Wand.
Ich hoffe irgendjemand mit mehr Erfahrung kann mir behilflich sein, dass meine Wände gezogen werden. Allerdings bitte keine großen Vorschläge außerhalb des Wandproblems, soll ja Eigenarbeit bleiben
Falls noch Informationen benötigt werden, bin dieses Wochenende bei RaR, würde dann ab Dienstag Antworten.
Danke schonmal im vorraus
Telrion
ich bin gerade im 2 Semester für Bioinformatik und habe in Java die Aufgabe ein Rogue Like Game zu schreiben. Dazu muss ich bis zum Juli einen Meilenstein einreichen der besagt, dass ein randomgenerierter Dungeon vorhanden sein muss. Desweiteren muss dieser Dungeon als Baum programmiert sein.
Ich weiß, dass es wahrscheinlich nicht der schönste Code ist, aber da ich erst seit Anfang des Semesters in Java programmiere bin ich recht zufrieden.
Nun zu meinem Problem, ich habe den Debugger in Netbeans schon durchlaufen lassen und laut diesem wird mein Dungeon wunderbar geteilt, allerdings zeichnet mir das Programm nur eine einzige Wand.
Ich hoffe irgendjemand mit mehr Erfahrung kann mir behilflich sein, dass meine Wände gezogen werden. Allerdings bitte keine großen Vorschläge außerhalb des Wandproblems, soll ja Eigenarbeit bleiben
Java:
public class DungeonFactory {
//y = Hoehe; x = Breite
private char[][] rootRoom;
private int x;
private int y;
private Node root;
public DungeonFactory(int x, int y) {
this.x = x;
this.y = y;
this.rootRoom = new char[y][x];
}
//generiert den "Anfangsfraum"
public char[][] generate() {
for (int i = 0; i < this.y; i++) {
for (int j = 0; j < this.x; j++) {
if (i == 0 || i == this.y - 1 || j == 0 || j == this.x - 1) {
this.rootRoom[i][j] = '\u2588';
} else {
this.rootRoom[i][j] = ' ';
}
}
}
//setze die Wurzel
root = new Node(rootRoom, 0, 0);
return rootRoom;
}
public class Node {
private char[][] room;
private int x;
private int y;
private Node child1;
private Node child2;
private Leaf leaf;
private int homogen;
private int splitHori;
private int splitVerti;
private int space;
// y und x sind die Eckpunkte um die Einzeraume spaeter wieder
// zusammen zu setzen
public Node(char[][] room, int x, int y) {
this.x = x;
this.y = y;
this.room = room;
// rufe im Knoten die Splitfunktion bis zur Abbruchbedingung auf
split(this);
}
public final void split(Node node) {
space = room.length * room[0].length;
//space = Abbruchbedingung
if (space >= 50) {
leaf = null;
if ((room.length / room[0].length) > 1) {
splitHori();
//Definiere für jede Splitmoeglichkeit die Groessen der Raeume 1 und 2
char[][] room1 = new char[splitHori][room[0].length];
char[][] room2 = new char[room.length - splitHori][room[0].length];
// zeichne die Raeume 1 und 2
for (int i = 0; i < splitHori; i++) {
for (int j = 0; j < room1[0].length; j++) {
room1[i][j] = room[i][j];
}
}
for (int i = splitHori; i < room2.length; i++) {
for (int j = 0; j < room2[0].length; j++) {
room2[i][j] = room[i][j];
}
}
// weise die Raume den Kindern zu
child1 = new Node(room1, node.getY(), node.getX());
child2 = new Node(room2, node.getY() + splitHori, node.getX());
} else if ((room[0].length / room.length) > 1) {
splitVerti();
char[][] room1 = new char[room.length][splitVerti];
char[][] room2 = new char[room.length][room[0].length - splitVerti];
for (int i = 0; i < room1.length; i++) {
for (int j = 0; j < splitVerti; j++) {
room1[i][j] = room[i][j];
}
}
for (int i = 0; i < room2.length; i++) {
for (int j = splitVerti; j < room2[0].length; j++) {
room2[i][j] = room[i][j];
}
}
child1 = new Node(room1, node.getY(), node.getX());
child2 = new Node(room2, node.getY(), node.getX() + splitVerti);
} else {
//Ausgleich zwischen Horizontalem und Vertikalem Split
homogen = (int) (Math.random() * 2 + 1);
if (homogen == 1) {
splitHori();
char[][] room1 = new char[splitHori][room[0].length];
char[][] room2 = new char[room.length - splitHori][room[0].length];
for (int i = 0; i < splitHori; i++) {
for (int j = 0; j < room1[0].length; j++) {
room1[i][j] = room[i][j];
}
}
for (int i = splitHori; i < room2.length; i++) {
for (int j = 0; j < room2[0].length; j++) {
room2[i][j] = room[i][j];
}
}
child1 = new Node(room1, node.getY(), node.getX());
child2 = new Node(room2, node.getY() + splitHori, node.getX());
} else {
splitVerti();
char[][] room1 = new char[room.length][splitVerti];
char[][] room2 = new char[room.length][room[0].length - splitVerti];
for (int i = 0; i < room1.length; i++) {
for (int j = 0; j < splitVerti; j++) {
room1[i][j] = room[i][j];
}
}
for (int i = 0; i < room2.length; i++) {
for (int j = splitVerti; j < room2[0].length; j++) {
room2[i][j] = room[i][j];
}
}
child1 = new Node(room1, node.getY(), node.getX());
child2 = new Node(room2, node.getY(), node.getX() + splitVerti);
}
}
} else {
leaf = new Leaf(room, this.x, this.y);
}
}
//Methode fuer den Vertikalen und den Horizontalen Split
public char[][] splitHori() {
int balance = (int) (room.length * 0.2);
splitHori = (int) (Math.random() * (room.length - 2 * balance) + balance);
for (int j = 0; j < room.length; j++) {
for (int i = 0; i < room[0].length; i++) {
this.room[splitHori][i] = '\u2588';
}
}
return room;
}
public char[][] splitVerti() {
int balance = (int) (room[0].length * 0.2);
splitVerti = (int) (Math.random() * (room[0].length - 2 * balance) + balance);
for (int j = 0; j < room.length; j++) {
for (int i = 0; i < room[0].length; i++) {
this.room[j][splitVerti] = '\u2588';
}
}
return room;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
class Leaf {
private char[][] room;
private int x;
private int y;
public Leaf(char[][] room, int x, int y) {
this.room = room;
this.y = y;
this.x = x;
}
}
}
Falls noch Informationen benötigt werden, bin dieses Wochenende bei RaR, würde dann ab Dienstag Antworten.
Danke schonmal im vorraus
Telrion