Du kannst nicht mehr als 25 Themen auswählen
Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
288 Zeilen
10 KiB
Java
288 Zeilen
10 KiB
Java
![]()
vor 9 Jahren
|
/*
|
||
|
* To change this license header, choose License Headers in Project Properties.
|
||
|
* To change this template file, choose Tools | Templates
|
||
|
* and open the template in the editor.
|
||
|
*/
|
||
|
package dungeon;
|
||
|
|
||
|
import java.util.LinkedList;
|
||
|
import java.util.List;
|
||
|
import main.Counter;
|
||
|
import main.Dice;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @author MrMcX
|
||
|
*/
|
||
|
public class Room {
|
||
|
public int number;
|
||
|
public Exit[] exits;
|
||
|
public Dungeon.Type isNatural;
|
||
|
public boolean isRoom, hasMonster, hasTrap, hasMagic, hasSpecial, hasTreasure = false;
|
||
|
public Enemy monster;
|
||
|
public Treasure treasure;
|
||
|
public Trap trap;
|
||
|
public String type, magicPhenomenon, specialPhenomenon = null;
|
||
|
|
||
|
public Room(Exit predecessor, int numberOfExits, boolean room, String type, Counter c){
|
||
|
exits = new Exit[numberOfExits];
|
||
|
exits[0] = predecessor;
|
||
|
this.isRoom = room;
|
||
|
this.type = type;
|
||
|
number = 0;
|
||
|
}
|
||
|
|
||
|
public List<Room> generate(Counter c, Dungeon.Type isNatural){
|
||
|
number = c.Next();
|
||
|
List<Room> list = new LinkedList();
|
||
|
for(int i = 0; i < exits.length; i++){
|
||
|
if(exits[i] == null){
|
||
|
Exit predecessor = new Exit(this);
|
||
|
Room newRoom = RandomRoom(false, predecessor, c, isNatural);
|
||
|
exits[i] = new Exit(newRoom, predecessor.type);
|
||
|
list.add(newRoom);
|
||
|
}
|
||
|
}
|
||
|
SetContents(isNatural);
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
private void SetContents(Dungeon.Type isNatural){
|
||
|
if(isRoom){
|
||
|
switch(Dice.Roll(6, 2)){
|
||
|
case 2:
|
||
|
case 3: return;
|
||
|
case 4:
|
||
|
hasMonster = true;
|
||
|
monster = new Enemy(isNatural);
|
||
|
return;
|
||
|
case 5:
|
||
|
hasTrap = true;
|
||
|
trap = new Trap();
|
||
|
case 6:
|
||
|
hasTreasure = true;
|
||
|
treasure = new Treasure();
|
||
|
return;
|
||
|
case 7:
|
||
|
hasMagic = true;
|
||
|
// TODO: generate magic here
|
||
|
return;
|
||
|
case 8:
|
||
|
hasSpecial = true;
|
||
|
// TODO: generate special here
|
||
|
return;
|
||
|
case 9:
|
||
|
hasMonster = true;
|
||
|
hasTrap = true;
|
||
|
monster = new Enemy(isNatural);
|
||
|
trap = new Trap();
|
||
|
return;
|
||
|
case 10:
|
||
|
hasMonster = true;
|
||
|
hasTreasure = true;
|
||
|
monster = new Enemy(isNatural);
|
||
|
treasure = new Treasure();
|
||
|
return;
|
||
|
case 11:
|
||
|
hasMonster = true;
|
||
|
hasMagic = true;
|
||
|
monster = new Enemy(isNatural);
|
||
|
// TODO: generate magic here
|
||
|
return;
|
||
|
case 12:
|
||
|
hasTrap = true;
|
||
|
hasTreasure = true;
|
||
|
trap = new Trap();
|
||
|
treasure = new Treasure();
|
||
|
return;
|
||
|
}
|
||
|
} else {
|
||
|
switch(Dice.Roll(6, 1)){
|
||
|
case 1:
|
||
|
case 2:
|
||
|
case 3: return;
|
||
|
case 4:
|
||
|
hasMonster = true;
|
||
|
monster = new Enemy(isNatural);
|
||
|
return;
|
||
|
case 5:
|
||
|
hasTrap = true;
|
||
|
trap = new Trap();
|
||
|
return;
|
||
|
case 6:
|
||
|
hasTreasure = true;
|
||
|
treasure = new Treasure();
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
this.isNatural = isNatural;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String toString(){
|
||
|
if(!isRoom){
|
||
|
return "Gang " + number;
|
||
|
} else if(isNatural == Dungeon.Type.NATURAL){
|
||
|
return "Höhle " + number;
|
||
|
} else {
|
||
|
return "Raum " + number;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public String toLongString(){
|
||
|
String out = "";
|
||
|
if(isRoom){
|
||
|
out += "Raum ";
|
||
|
} else {
|
||
|
out += "Gang ";
|
||
|
}
|
||
|
out += "Nummer " + number + ": " + type + "\n" +
|
||
|
"Ausgänge:\n";
|
||
|
for(Exit x : exits){
|
||
|
out += x.toLongString();
|
||
|
}
|
||
|
if(hasMonster){
|
||
|
out += "Gegner:\n- " + monster.toString() + "\n";
|
||
|
}
|
||
|
if(hasTrap){
|
||
|
out += "Fallen:\n- " + trap + "\n";
|
||
|
}
|
||
|
if(hasMagic){
|
||
|
out += "Magische Phänomene:\n- " + magicPhenomenon + "\n";
|
||
|
}
|
||
|
if(hasSpecial){
|
||
|
out += "Besondere Phänomene:\n- " + specialPhenomenon + "\n";
|
||
|
}
|
||
|
if(hasTreasure){
|
||
|
out += "Fundsache:\n- " + treasure + "\n";
|
||
|
}
|
||
|
return out;
|
||
|
}
|
||
|
|
||
|
public String toShortString(){
|
||
|
if(isRoom){
|
||
|
return "Raum Nummer " + number;
|
||
|
} else {
|
||
|
return "Gang Nummer " + number;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public static Room RoomBigExits(Exit predecessor, Counter c, Dungeon.Type isNatural){
|
||
|
int rand = Dice.Roll(3, 1);
|
||
|
if(isNatural == Dungeon.Type.NATURAL){
|
||
|
return new Room(predecessor, rand + 1, true, "große Höhle mit " + rand + " Ausgängen", c);
|
||
|
} else {
|
||
|
return new Room(predecessor, rand + 1, true, "großer Raum mit " + rand + " Ausgängen", c);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Room RoomSmallExits(Exit predecessor, Counter c, Dungeon.Type isNatural){
|
||
|
int rand = Dice.Roll(3, 1);
|
||
|
if(isNatural == Dungeon.Type.NATURAL){
|
||
|
return new Room(predecessor, rand + 1, true, "kleine Höhle mit " + rand + " Ausgängen", c);
|
||
|
} else {
|
||
|
return new Room(predecessor, rand + 1, true, "kleiner Raum mit " + rand + " Ausgängen", c);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Room RoomBigNoExits(Exit predecessor, Counter c, Dungeon.Type isNatural){
|
||
|
if(isNatural == Dungeon.Type.NATURAL){
|
||
|
return new Room(predecessor, 1, true, "große Höhle ohne Ausgang", c);
|
||
|
} else {
|
||
|
return new Room(predecessor, 1, true, "großer Raum ohne Ausgang", c);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Room RoomBigExitsStair(Exit predecessor, Counter c, Dungeon.Type isNatural){
|
||
|
int rand = Dice.Roll(2, 1);
|
||
|
if(isNatural == Dungeon.Type.NATURAL){
|
||
|
return new Room(predecessor, rand + 2, true, "große Höhle mit " + rand + " Ausgängen und einer Treppe", c);
|
||
|
} else {
|
||
|
return new Room(predecessor, rand + 2, true, "großer Raum mit " + rand + " Ausgängen und einer Treppe", c);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Room RoomSmallNoExits(Exit predecessor, Counter c, Dungeon.Type isNatural){
|
||
|
if(isNatural == Dungeon.Type.NATURAL){
|
||
|
return new Room(predecessor, 1, true, "kleine Höhle ohne Ausgang", c);
|
||
|
} else {
|
||
|
return new Room(predecessor, 1, true, "kleiner Raum ohne Ausgang", c);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Room RoomSmallExitsStair(Exit predecessor, Counter c, Dungeon.Type isNatural){
|
||
|
int rand = Dice.Roll(2, 1);
|
||
|
if(isNatural == Dungeon.Type.NATURAL){
|
||
|
return new Room(predecessor, rand + 2, true, "kleine Höhle mit " + rand + " Ausgängen und einer Treppe", c);
|
||
|
} else {
|
||
|
return new Room(predecessor, rand + 2, true, "kleiner Raum mit " + rand + " Ausgängen und einer Treppe", c);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Room RoomGiant(Exit predecessor, Counter c, Dungeon.Type isNatural){
|
||
|
int rand = Dice.Roll(2, 1);
|
||
|
if(isNatural == Dungeon.Type.NATURAL){
|
||
|
return new Room(predecessor, rand + 1, true, "gigantische Höhle mit " + rand + " Ausgängen", c);
|
||
|
} else {
|
||
|
return new Room(predecessor, rand + 1, true, "gigantischer Raum mit " + rand + " Ausgängen", c);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static Room CorridorStraight(Exit predecessor, Counter c){
|
||
|
return new Room(predecessor, 2, false, "gerader Gang", c);
|
||
|
}
|
||
|
|
||
|
public static Room CorridorRight(Exit predecessor, Counter c){
|
||
|
return new Room(predecessor, 2, false, "rechts abbiegender Gang", c);
|
||
|
}
|
||
|
|
||
|
public static Room CorridorLeft(Exit predecessor, Counter c){
|
||
|
return new Room(predecessor, 2, false, "links abbiegender Gang", c);
|
||
|
}
|
||
|
|
||
|
public static Room CrossingT(Exit predecessor, Counter c){
|
||
|
return new Room(predecessor, 3, false, "T-Kreuzung mit Abzweigungen nach links und rechts", c);
|
||
|
}
|
||
|
|
||
|
public static Room Crossing(Exit predecessor, Counter c){
|
||
|
return new Room(predecessor, 4, false, "Kreuzung, die in alle Richtungen weitergeht", c);
|
||
|
}
|
||
|
|
||
|
public static Room DeadEnd(Exit predecessor, Counter c){
|
||
|
return new Room(predecessor, 1, false, "Sackgasse", c);
|
||
|
}
|
||
|
|
||
|
public static Room RandomRoom(boolean first, Exit predecessor, Counter c, Dungeon.Type isNatural){
|
||
|
int number;
|
||
|
if(first){
|
||
|
number = Dice.Roll(6, 1);
|
||
|
} else {
|
||
|
number = Dice.Roll(20, 1);
|
||
|
}
|
||
|
switch(number){
|
||
|
case 1:
|
||
|
case 2:
|
||
|
case 3: return RoomBigExits(predecessor, c, isNatural);
|
||
|
case 4:
|
||
|
case 5:
|
||
|
case 6: return RoomSmallExits(predecessor, c, isNatural);
|
||
|
case 7: return RoomBigNoExits(predecessor, c, isNatural);
|
||
|
case 8:
|
||
|
case 9: return RoomBigExitsStair(predecessor, c, isNatural);
|
||
|
case 10: return RoomSmallNoExits(predecessor, c, isNatural);
|
||
|
case 11:
|
||
|
case 12: return RoomSmallExitsStair(predecessor, c, isNatural);
|
||
|
case 13:
|
||
|
case 14: return RoomGiant(predecessor, c, isNatural);
|
||
|
case 15: return CorridorStraight(predecessor, c);
|
||
|
case 16: return CorridorRight(predecessor, c);
|
||
|
case 17: return CorridorLeft(predecessor, c);
|
||
|
case 18: return CrossingT(predecessor, c);
|
||
|
case 19: return Crossing(predecessor, c);
|
||
|
case 20: return DeadEnd(predecessor, c);
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
}
|