1
0
Fork 0

Magic implemented, layout changed, packages renamed

master
MrMcX vor 8 Jahren
Ursprung 6eea01482c
Commit f18b10c21e

@ -83,7 +83,7 @@ jnlp.signed=false
jnlp.signing= jnlp.signing=
jnlp.signing.alias= jnlp.signing.alias=
jnlp.signing.keystore= jnlp.signing.keystore=
main.class=main.DungeonGeneratorUI main.class=eu.smoser.dungeongenerator.main.DungeonGeneratorUI
# Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found. # Optional override of default Application-Library-Allowable-Codebase attribute identifying the locations where your signed RIA is expected to be found.
manifest.custom.application.library.allowable.codebase= manifest.custom.application.library.allowable.codebase=
# Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts. # Optional override of default Caller-Allowable-Codebase attribute identifying the domains from which JavaScript code can make calls to your RIA without security prompts.

@ -21,17 +21,10 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package dungeon; package eu.smoser.dungeongenerator.dungeon;
import java.util.ArrayList; import java.util.*;
import java.util.Dictionary; import eu.smoser.dungeongenerator.util.*;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import util.Counter;
import util.Dice;
import org.jgraph.graph.DefaultEdge; import org.jgraph.graph.DefaultEdge;
import org.jgrapht.UndirectedGraph; import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.SimpleGraph; import org.jgrapht.graph.SimpleGraph;

@ -21,9 +21,9 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package dungeon; package eu.smoser.dungeongenerator.dungeon;
import util.Dice; import eu.smoser.dungeongenerator.util.Dice;
/** /**
* *

@ -21,14 +21,11 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package dungeon; package eu.smoser.dungeongenerator.dungeon;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import util.Counter;
import util.Dice;
import eu.smoser.dungeongenerator.dungeon.objects.*;
import eu.smoser.dungeongenerator.util.*;
import java.util.*;
/** /**
* *
* @author MrMcX * @author MrMcX
@ -45,70 +42,12 @@ public class Room {
*/ */
public Exit[] exits; public Exit[] exits;
/**
* The room generation type
*/
public Dungeon.Type type;
/**
* Whether it is a room or a corridor
*/
public boolean isRoom,
/**
* Whether it has monsters,
*/
hasMonster,
/**
* traps,
*/
hasTrap,
/**
* magic,
*/
hasMagic,
/**
* specials,
*/
hasSpecial,
/**
* or treasures
*/
hasTreasure = false;
/**
* The enemy in this room
*/
public Enemy monster;
/**
* The treasure in this room
*/
public Treasure treasure;
/**
* The trap in this room
*/
public Trap trap;
/** private Dungeon.Type type;
* Room description private final boolean isRoom;
*/ private boolean hasMonster, hasTrap, hasMagic, hasSpecial, hasTreasure = false;
public String desc, private ADungeonObject treasure, magic, enemy, trap, special;
private String desc = null;
/**
* magic description
*/
magicPhenomenon,
/**
* special description
*/
specialPhenomenon = null;
/** /**
* Constructs a room with a given predecessor, number of exits, description and counter * Constructs a room with a given predecessor, number of exits, description and counter
@ -155,7 +94,7 @@ public class Room {
case 3: return; case 3: return;
case 4: case 4:
hasMonster = true; hasMonster = true;
monster = new Enemy(type); enemy = new Enemy(type);
return; return;
case 5: case 5:
hasTrap = true; hasTrap = true;
@ -166,29 +105,29 @@ public class Room {
return; return;
case 7: case 7:
hasMagic = true; hasMagic = true;
// TODO: generate magic here magic = new Magic(type);
return; return;
case 8: case 8:
hasSpecial = true; hasSpecial = true;
// TODO: generate special here special = new Special(type);
return; return;
case 9: case 9:
hasMonster = true; hasMonster = true;
hasTrap = true; hasTrap = true;
monster = new Enemy(type); enemy = new Enemy(type);
trap = new Trap(); trap = new Trap();
return; return;
case 10: case 10:
hasMonster = true; hasMonster = true;
hasTreasure = true; hasTreasure = true;
monster = new Enemy(type); enemy = new Enemy(type);
treasure = new Treasure(); treasure = new Treasure();
return; return;
case 11: case 11:
hasMonster = true; hasMonster = true;
hasMagic = true; hasMagic = true;
monster = new Enemy(type); enemy = new Enemy(type);
// TODO: generate magic here magic = new Magic(type);
return; return;
case 12: case 12:
hasTrap = true; hasTrap = true;
@ -204,7 +143,7 @@ public class Room {
case 3: return; case 3: return;
case 4: case 4:
hasMonster = true; hasMonster = true;
monster = new Enemy(type); enemy = new Enemy(type);
return; return;
case 5: case 5:
hasTrap = true; hasTrap = true;
@ -247,16 +186,16 @@ public class Room {
out += x.toLongString(); out += x.toLongString();
} }
if(hasMonster){ if(hasMonster){
out += "Gegner:\n- " + monster.toString() + "\n"; out += "Gegner:\n- " + enemy + "\n";
} }
if(hasTrap){ if(hasTrap){
out += "Fallen:\n- " + trap + "\n"; out += "Fallen:\n- " + trap + "\n";
} }
if(hasMagic){ if(hasMagic){
out += "Magische Phänomene:\n- " + magicPhenomenon + "\n"; out += "Magische Phänomene:\n- " + magic + "\n";
} }
if(hasSpecial){ if(hasSpecial){
out += "Besondere Phänomene:\n- " + specialPhenomenon + "\n"; out += "Besondere Phänomene:\n- " + special + "\n";
} }
if(hasTreasure){ if(hasTreasure){
out += "Fundsache:\n- " + treasure + "\n"; out += "Fundsache:\n- " + treasure + "\n";

@ -21,12 +21,21 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package dungeon; package eu.smoser.dungeongenerator.dungeon.objects;
/** /**
* *
* @author MrMcX * @author MrMcX
*/ */
public class Magic { public abstract class ADungeonObject {
/**
* The description of the object
*/
protected String descString;
@Override
public String toString(){
return descString;
}
} }

@ -21,68 +21,68 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package dungeon; package eu.smoser.dungeongenerator.dungeon.objects;
import util.Dice; import eu.smoser.dungeongenerator.dungeon.Dungeon;
import eu.smoser.dungeongenerator.dungeon.objects.ADungeonObject;
import eu.smoser.dungeongenerator.util.Dice;
/** /**
* Stores information about enemies * Stores information about enemies
* @author MrMcX * @author MrMcX
*/ */
public class Enemy{ public class Enemy extends ADungeonObject{
private String enemy;
/** /**
* Constructs a new random enemy in a given type of room * Constructs a new random enemy in a given type of room
* @param type type of environment * @param type type of environment
*/ */
public Enemy(Dungeon.Type type){ public Enemy(Dungeon.Type type){
enemy = ""; descString = "";
if(Dungeon.Natural(type)){ if(Dungeon.Natural(type)){
switch(Dice.Roll(20, 1)){ switch(Dice.Roll(20, 1)){
case 1: case 1:
enemy = "Höhlendrache"; descString = "Höhlendrache";
break; break;
case 2: case 2:
case 3: case 3:
case 4: case 4:
case 5: case 5:
enemy = "verirrter Goblin"; descString = "verirrter Goblin";
break; break;
case 6: case 6:
case 7: case 7:
enemy = "Gruftassel"; descString = "Gruftassel";
break; break;
case 8: case 8:
enemy = "Glutling"; descString = "Glutling";
break; break;
case 9: case 9:
case 10: case 10:
enemy = "Höhlenspinne"; descString = "Höhlenspinne";
break; break;
case 11: case 11:
enemy = Dice.Roll(20, 5) + " Fledermäuse"; descString = Dice.Roll(20, 5) + " Fledermäuse";
break; break;
case 12: case 12:
enemy = "Höhlenoger"; descString = "Höhlenoger";
break; break;
case 13: case 13:
case 14: case 14:
case 15: case 15:
case 16: case 16:
enemy = Dice.Roll(6, 1)*Dice.Roll(20, 1) + " Ratten"; descString = Dice.Roll(6, 1)*Dice.Roll(20, 1) + " Ratten";
break; break;
case 17: case 17:
enemy = "Riesenamöbe"; descString = "Riesenamöbe";
break; break;
case 18: case 18:
enemy = Dice.Roll(6, 1) + " Skelette"; descString = Dice.Roll(6, 1) + " Skelette";
break; break;
case 19: case 19:
enemy = "Geistererscheinung eines hier verstorbenen Abenteurers"; descString = "Geistererscheinung eines hier verstorbenen Abenteurers";
break; break;
case 20: case 20:
enemy = Dice.Roll(6, 1) + " Wühlschrate"; descString = Dice.Roll(6, 1) + " Wühlschrate";
break; break;
} }
} else { } else {
@ -90,51 +90,46 @@ public class Enemy{
case 1: case 1:
case 2: case 2:
case 3: case 3:
enemy = Dice.Roll(6, 1) + " Einwohner des Systems"; descString = Dice.Roll(6, 1) + " Einwohner des Systems";
break; break;
case 4: case 4:
enemy = Dice.Roll(6, 1) + " Gruftasseln"; descString = Dice.Roll(6, 1) + " Gruftasseln";
break; break;
case 5: case 5:
case 6: case 6:
enemy = "Riesenamöbe"; descString = "Riesenamöbe";
break; break;
case 7: case 7:
enemy = "Höhlenhaustiere"; descString = "Höhlenhaustiere";
break; break;
case 8: case 8:
case 9: case 9:
enemy = Dice.Roll(6, 1) + " Gefangene"; descString = Dice.Roll(6, 1) + " Gefangene";
break; break;
case 10: case 10:
enemy = "Mumie"; descString = "Mumie";
break; break;
case 11: case 11:
case 12: case 12:
case 13: case 13:
enemy = Dice.Roll(6, 2) + " Einwohner des Systems"; descString = Dice.Roll(6, 2) + " Einwohner des Systems";
break; break;
case 14: case 14:
case 15: case 15:
case 16: case 16:
enemy = Dice.Roll(6,1) + " Ratten"; descString = Dice.Roll(6,1) + " Ratten";
break; break;
case 17: case 17:
case 18: case 18:
enemy = Dice.Roll(6, 1) + " Skelette"; descString = Dice.Roll(6, 1) + " Skelette";
break; break;
case 19: case 19:
enemy = "Endgegner der Anlage"; descString = "Endgegner der Anlage";
break; break;
case 20: case 20:
enemy = Dice.Roll(6, 1) + " gut ausgebildete Wachen der Einwohner"; descString = Dice.Roll(6, 1) + " gut ausgebildete Wachen der Einwohner";
break; break;
} }
} }
} }
@Override
public String toString(){
return enemy;
}
} }

@ -0,0 +1,168 @@
/*
* The MIT License
*
* Copyright 2016 MrMcX.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package eu.smoser.dungeongenerator.dungeon.objects;
import eu.smoser.dungeongenerator.dungeon.Dungeon;
import eu.smoser.dungeongenerator.util.Dice;
/**
* This holds information about a magic phenomenon
* @author MrMcX
*/
public class Magic extends ADungeonObject{
/**
* Constructs a new random magic phenomenon in a given type of room
* @param type type of environment
*/
public Magic(Dungeon.Type type){
descString = "";
if(Dungeon.Natural(type)){
switch(Dice.Roll(20, 1)){
case 1:
descString = "Die magische Dunkelheit in dieser Höhle ist absolut undurchdringlich.";
break;
case 2:
descString = "Im Zentrum der magischen Dunkelheit ist eine 3 Meter tiefe Grube versteckt.";
break;
case 3:
descString = "Ein grünlich glänzendes Wasserbecken befindet sich in einer Nische dieser Höhle. Das Wasser ist trinkbar und gewährt eine sofortige Extraregeneration der Astralkraft.";
break;
case 4:
descString = "Dieser Raum ist komplett unsichtbar. Auch alles, was hineingeht, wird für die Dauer des Aufenthaltes unsichtbar.";
break;
case 5:
descString = "Die Gedanken der diese Höhle betretenden Helden hallen laut durch das Gewölbe.";
break;
case 6:
descString = "Über jedem Helden schweben mehrere Mindergeister, die sie belästigen.";
break;
case 7:
descString = "Die Helden hören Stimmen, die ihnen einflüstern, dass sie alle sterben werden.";
break;
case 8:
descString = "Der Glanz einiger Kristalle an den Wänden wirkt wie Ikanariaschmetterlinge.";
break;
case 9:
descString = "Ein rauschender Fluss kommt direkt aus einer Wand und fließt rasend schnell durch den Raum, um im gegenüberliegenden Fels zu verschwinden. Es handelt sich um eine Illusion.";
break;
case 10:
descString = "Geräusche in dieser Kaverne verhallen nicht – ihre Echos stauen sich langsam zu einem unglaublichen Lärm.";
break;
case 11:
descString = "Einer der Helden wird das Gefühl nicht los, dass jemand hinter ihm steht. Das Gefühl hält noch " + Dice.Roll(6, 1) + " Stunden an.";
break;
case 12:
descString = "Die Illusion eines Höhlendrachen greift ohne zu zögern für 2 KR an.";
break;
case 13:
descString = "Aus kleinen Rissen in der Höhlenwand strömt ein ungiftiges bläuliches Gas und wabert dann träge über den Boden.";
break;
case 14:
descString = "Die Helden verlieren pro Spielrunde in dieser Höhle einen Klugheitspunkt bis zu einer Klugheit von 3. Die Punkte regenerieren sich sofort nach Verlassen der Höhle.";
break;
case 15:
descString = "Eine magische Barriere aus flimmerndem Licht zieht sich quer durch den Raum.";
break;
case 16:
descString = "Kristalle in dieser Höhle bersten, wenn in ihrer Nähe gezaubert wird – und verursachen durch herumfliegende Splitter W6+2 Trefferpunkte.";
break;
case 17:
descString = "In der Höhle fließt ein Wasserfall von unten nach oben.";
break;
case 18:
descString = "Im Raum herrscht keine Schwerkraft.";
break;
case 19:
descString = "Magisch leuchtender Treibsand aus Kristallstaub bedeckt den kompletten Boden. Er ist allerdings nur 60 Zentimeter tief.";
break;
case 20:
descString = "In diesem Raum unterliegt alles einem umgekehrten AXXELERATUS.";
break;
}
} else {
switch(Dice.Roll(20, 1)){
case 1:
descString = Dice.Roll(6, 2) + " Skelette tanzen einen Totentanz und kümmern sich nicht um die Helden.";
break;
case 2:
descString = "Die beiden Augen der Statue im Zentrum des Raumes leuchten glühend rot.";
break;
case 3:
descString = "Ein merkwürdiger Nebel breitet sich schnell aus. Er zerstört jeden Stoff in Sekundenschnelle.";
break;
case 4:
descString = "Direkt bei Betreten des Raumes fühlen sich die Helden merkwürdig entspannt und schlafen innerhalb kürzester Zeit ein. Während ihres Schlafes droht ihnen keine Gefahr, aber sie haben Träume, die ihnen kleine Fingerzeige geben, was sie in der Zukunft erwartet.";
break;
case 5:
descString = "Magiebegabte Helden übergeben sich ganz fürchterlich und bekommen im Raum arge Kopfschmerzen.";
break;
case 6:
descString = "Jeder, der aus der Mineralquelle in der Höhle trinkt, erhält bei der nächsten Regeneration seine vollen Lebenspunkte wieder. Das Wasser wirkt nur direkt aus der Quelle.";
break;
case 7:
descString = "Eine merkwürdige Wasserlache bedeckt den Boden dieses Raumes. Wer mit ihr in Hautkontakt kommt, wird W6 Stunden von Mindergeistern belästigt.";
break;
case 8:
descString = "Direkt hinter der Eingangstür ist Blut auf dem Boden. Kommt ein Held damit in Kontakt, gerät er in einen Blutrausch (WdH 261).";
break;
case 9:
descString = "Gifte haben in diesem Raum keinerlei Wirkung.";
break;
case 10:
descString = "Sämtliche Zauber in diesem Raum sind mit einer Erschwernis von 12 Punkten belegt.";
break;
case 11:
descString = "Ein kleiner glühender Mindergeist fegt mit einem leisen Pfeifen durch den Raum. Jeder, der ihn berührt, muss Schaden durch Hitze hinnehmen.";
break;
case 12:
descString = "Ein schwerer Foliant ist an einem kleinen steinernen Lesepult festgekettet. Der Foliant lässt sich nicht öffnen, egal was man versucht.";
break;
case 13:
descString = "Ein kleiner Drache aus einem bläulichen Edelstein steht auf einen Sockel und beantwortet wahrheitsgemäß nach bestem Wissen und Gewissen zwei Fragen, bevor er zerfällt.";
break;
case 14:
descString = "Sobald alle Helden den Raum betreten haben, verschließt eine karmale Barriere diesen Raum, dessen Decke eine gewaltige Sonne ziert. Erst ein Gebet zu Praios lässt diese Barriere wieder verschwinden.";
break;
case 15:
descString = "In einer Glaskugel kann man immer wieder die gleiche absurde Szenerie aus uralter Zeit betrachten.";
break;
case 16:
descString = "Im Raum dreht sich die Schwerkraft um – unten ist oben, oben ist unten.";
break;
case 17:
descString = "Im Raum spiegelt sich alles Lebende – auch die Helden werden anders-händig und haben damit ihre Waffen an der falschen Körperseite hängen.";
break;
case 18:
descString = "Die Schatten der Helden wenden sich wie bei einem ECLIPTIFACTUS.";
break;
case 19:
descString = "An der Wand befinden sich Dutzende von Augen, die die Helden bei jedem Schritt mit Blicken verfolgen.";
break;
case 20:
descString = "Die Zeit in diesem Raum vergeht zehnmal so schnell wie normal.";
break;
}
}
}
}

@ -0,0 +1,168 @@
/*
* The MIT License
*
* Copyright 2016 MrMcX.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package eu.smoser.dungeongenerator.dungeon.objects;
import eu.smoser.dungeongenerator.dungeon.Dungeon;
import eu.smoser.dungeongenerator.util.Dice;
/**
* This holds information about a special phenomenon
* @author MrMcX
*/
public class Special extends ADungeonObject{
/**
* Constructs a new random special phenomenon in a given type of room
* @param type type of environment
*/
public Special(Dungeon.Type type){
descString = "";
if(Dungeon.Natural(type)){
switch(Dice.Roll(20, 1)){
case 1:
descString = "Die magische Dunkelheit in dieser Höhle ist absolut undurchdringlich.";
break;
case 2:
descString = "Im Zentrum der magischen Dunkelheit ist eine 3 Meter tiefe Grube versteckt.";
break;
case 3:
descString = "Ein grünlich glänzendes Wasserbecken befindet sich in einer Nische dieser Höhle. Das Wasser ist trinkbar und gewährt eine sofortige Extraregeneration der Astralkraft.";
break;
case 4:
descString = "Dieser Raum ist komplett unsichtbar. Auch alles, was hineingeht, wird für die Dauer des Aufenthaltes unsichtbar.";
break;
case 5:
descString = "Die Gedanken der diese Höhle betretenden Helden hallen laut durch das Gewölbe.";
break;
case 6:
descString = "Über jedem Helden schweben mehrere Mindergeister, die sie belästigen.";
break;
case 7:
descString = "Die Helden hören Stimmen, die ihnen einflüstern, dass sie alle sterben werden.";
break;
case 8:
descString = "Der Glanz einiger Kristalle an den Wänden wirkt wie Ikanariaschmetterlinge.";
break;
case 9:
descString = "Ein rauschender Fluss kommt direkt aus einer Wand und fließt rasend schnell durch den Raum, um im gegenüberliegenden Fels zu verschwinden. Es handelt sich um eine Illusion.";
break;
case 10:
descString = "Geräusche in dieser Kaverne verhallen nicht – ihre Echos stauen sich langsam zu einem unglaublichen Lärm.";
break;
case 11:
descString = "Einer der Helden wird das Gefühl nicht los, dass jemand hinter ihm steht. Das Gefühl hält noch " + Dice.Roll(6, 1) + " Stunden an.";
break;
case 12:
descString = "Die Illusion eines Höhlendrachen greift ohne zu zögern für 2 KR an.";
break;
case 13:
descString = "Aus kleinen Rissen in der Höhlenwand strömt ein ungiftiges bläuliches Gas und wabert dann träge über den Boden.";
break;
case 14:
descString = "Die Helden verlieren pro Spielrunde in dieser Höhle einen Klugheitspunkt bis zu einer Klugheit von 3. Die Punkte regenerieren sich sofort nach Verlassen der Höhle.";
break;
case 15:
descString = "Eine magische Barriere aus flimmerndem Licht zieht sich quer durch den Raum.";
break;
case 16:
descString = "Kristalle in dieser Höhle bersten, wenn in ihrer Nähe gezaubert wird – und verursachen durch herumfliegende Splitter W6+2 Trefferpunkte.";
break;
case 17:
descString = "In der Höhle fließt ein Wasserfall von unten nach oben.";
break;
case 18:
descString = "Im Raum herrscht keine Schwerkraft.";
break;
case 19:
descString = "Magisch leuchtender Treibsand aus Kristallstaub bedeckt den kompletten Boden. Er ist allerdings nur 60 Zentimeter tief.";
break;
case 20:
descString = "In diesem Raum unterliegt alles einem umgekehrten AXXELERATUS.";
break;
}
} else {
switch(Dice.Roll(20, 1)){
case 1:
descString = Dice.Roll(6, 2) + " Skelette tanzen einen Totentanz und kümmern sich nicht um die Helden.";
break;
case 2:
descString = "Die beiden Augen der Statue im Zentrum des Raumes leuchten glühend rot.";
break;
case 3:
descString = "Ein merkwürdiger Nebel breitet sich schnell aus. Er zerstört jeden Stoff in Sekundenschnelle.";
break;
case 4:
descString = "Direkt bei Betreten des Raumes fühlen sich die Helden merkwürdig entspannt und schlafen innerhalb kürzester Zeit ein. Während ihres Schlafes droht ihnen keine Gefahr, aber sie haben Träume, die ihnen kleine Fingerzeige geben, was sie in der Zukunft erwartet.";
break;
case 5:
descString = "Magiebegabte Helden übergeben sich ganz fürchterlich und bekommen im Raum arge Kopfschmerzen.";
break;
case 6:
descString = "Jeder, der aus der Mineralquelle in der Höhle trinkt, erhält bei der nächsten Regeneration seine vollen Lebenspunkte wieder. Das Wasser wirkt nur direkt aus der Quelle.";
break;
case 7:
descString = "Eine merkwürdige Wasserlache bedeckt den Boden dieses Raumes. Wer mit ihr in Hautkontakt kommt, wird W6 Stunden von Mindergeistern belästigt.";
break;
case 8:
descString = "Direkt hinter der Eingangstür ist Blut auf dem Boden. Kommt ein Held damit in Kontakt, gerät er in einen Blutrausch (WdH 261).";
break;
case 9:
descString = "Gifte haben in diesem Raum keinerlei Wirkung.";
break;
case 10:
descString = "Sämtliche Zauber in diesem Raum sind mit einer Erschwernis von 12 Punkten belegt.";
break;
case 11:
descString = "Ein kleiner glühender Mindergeist fegt mit einem leisen Pfeifen durch den Raum. Jeder, der ihn berührt, muss Schaden durch Hitze hinnehmen.";
break;
case 12:
descString = "Ein schwerer Foliant ist an einem kleinen steinernen Lesepult festgekettet. Der Foliant lässt sich nicht öffnen, egal was man versucht.";
break;
case 13:
descString = "Ein kleiner Drache aus einem bläulichen Edelstein steht auf einen Sockel und beantwortet wahrheitsgemäß nach bestem Wissen und Gewissen zwei Fragen, bevor er zerfällt.";
break;
case 14:
descString = "Sobald alle Helden den Raum betreten haben, verschließt eine karmale Barriere diesen Raum, dessen Decke eine gewaltige Sonne ziert. Erst ein Gebet zu Praios lässt diese Barriere wieder verschwinden.";
break;
case 15:
descString = "In einer Glaskugel kann man immer wieder die gleiche absurde Szenerie aus uralter Zeit betrachten.";
break;
case 16:
descString = "Im Raum dreht sich die Schwerkraft um – unten ist oben, oben ist unten.";
break;
case 17:
descString = "Im Raum spiegelt sich alles Lebende – auch die Helden werden anders-händig und haben damit ihre Waffen an der falschen Körperseite hängen.";
break;
case 18:
descString = "Die Schatten der Helden wenden sich wie bei einem ECLIPTIFACTUS.";
break;
case 19:
descString = "An der Wand befinden sich Dutzende von Augen, die die Helden bei jedem Schritt mit Blicken verfolgen.";
break;
case 20:
descString = "Die Zeit in diesem Raum vergeht zehnmal so schnell wie normal.";
break;
}
}
}
}

@ -21,70 +21,63 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package dungeon; package eu.smoser.dungeongenerator.dungeon.objects;
import util.Dice; import eu.smoser.dungeongenerator.util.Dice;
/** /**
* Stores information about a trap * Stores information about a trap
* @author MrMcX * @author MrMcX
*/ */
public class Trap { public class Trap extends ADungeonObject{
private String trap;
/** /**
* Constructs a random trap * Constructs a random trap
*/ */
public Trap() { public Trap() {
trap = ""; descString = "";
switch (Dice.Roll(20, 1)) { switch (Dice.Roll(20, 1)) {
case 1: case 1:
case 2: case 2:
case 3: case 3:
trap = "getarnte Fallgrube"; descString = "getarnte Fallgrube";
break; break;
case 4: case 4:
case 5: case 5:
case 6: case 6:
trap = "getarnte Fallgrube (angespitzte Stäbe/Speere oder Eisenspitzen am Boden)"; descString = "getarnte Fallgrube (angespitzte Stäbe/Speere oder Eisenspitzen am Boden)";
break; break;
case 7: case 7:
trap = "Schnur am Boden löst Giftwolke aus."; descString = "Schnur am Boden löst Giftwolke aus.";
break; break;
case 8: case 8:
trap = "Magische Glyphe löst Schadenszauber aus."; descString = "Magische Glyphe löst Schadenszauber aus.";
break; break;
case 9: case 9:
trap = "Schnur am Boden löst Steinfall aus."; descString = "Schnur am Boden löst Steinfall aus.";
break; break;
case 10: case 10:
case 11: case 11:
trap = "Schnur am Boden löst sensenartige Klingen aus."; descString = "Schnur am Boden löst sensenartige Klingen aus.";
break; break;
case 12: case 12:
case 13: case 13:
trap = "Bodenplatte löst schwere Steinkugel aus, die auf die Helden zurollt."; descString = "Bodenplatte löst schwere Steinkugel aus, die auf die Helden zurollt.";
break; break;
case 14: case 14:
case 15: case 15:
trap = "Bodeplatte löst " + Dice.Roll(6, 1) + " Armbrustbolzen aus."; descString = "Bodeplatte löst " + Dice.Roll(6, 1) + " Armbrustbolzen aus.";
break; break;
case 16: case 16:
trap = "Magische Glyphe löst magischen Effekt aus."; descString = "Magische Glyphe löst magischen Effekt aus.";
break; break;
case 17: case 17:
case 18: case 18:
trap = "Ein herab fallendes Netz verstrickt die Helden."; descString = "Ein herab fallendes Netz verstrickt die Helden.";
break; break;
case 19: case 19:
case 20: case 20:
trap = "Die Wände bewegen sich auf die Helden zu und drohen sie zu zerquetschen."; descString = "Die Wände bewegen sich auf die Helden zu und drohen sie zu zerquetschen.";
break; break;
} }
} }
@Override
public String toString() {
return trap;
}
} }

@ -21,97 +21,90 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package dungeon; package eu.smoser.dungeongenerator.dungeon.objects;
import util.Dice; import eu.smoser.dungeongenerator.util.Dice;
/** /**
* Stores information about a treasure * Stores information about a treasure
* @author MrMcX * @author MrMcX
*/ */
public class Treasure { public class Treasure extends ADungeonObject{
private String treasure;
/** /**
* Constructs a random treasure * Constructs a random treasure
*/ */
public Treasure(){ public Treasure(){
treasure = ""; descString = "";
switch(Dice.Roll(20, 1)){ switch(Dice.Roll(20, 1)){
case 1: case 1:
treasure = Dice.Roll(20, 1) + " Kreuzer"; descString = Dice.Roll(20, 1) + " Kreuzer";
break; break;
case 2: case 2:
treasure = Dice.Roll(20, 1) + " Heller"; descString = Dice.Roll(20, 1) + " Heller";
break; break;
case 3: case 3:
treasure = Dice.Roll(20, 1) + " Silbertaler"; descString = Dice.Roll(20, 1) + " Silbertaler";
break; break;
case 4: case 4:
treasure = Dice.Roll(20, 1) + " Dukaten"; descString = Dice.Roll(20, 1) + " Dukaten";
break; break;
case 5: case 5:
case 6: case 6:
case 7: case 7:
treasure = "eine Handvoll Schätze"; // TODO: generate real treasure here descString = "eine Handvoll Schätze"; // TODO: generate real treasure here
break; break;
case 8: case 8:
case 9: case 9:
treasure = "zwei Handvoll Schätze"; // TODO: generate real treasure here descString = "zwei Handvoll Schätze"; // TODO: generate real treasure here
break; break;
case 10: case 10:
treasure = "uralte Waffe/Rüstung"; descString = "uralte Waffe/Rüstung";
break; break;
case 11: case 11:
treasure = "ziemlich neue Waffe/Rüstung"; descString = "ziemlich neue Waffe/Rüstung";
break; break;
case 12: case 12:
treasure = "hervorragende Waffe/Rüstung"; descString = "hervorragende Waffe/Rüstung";
break; break;
case 13: case 13:
treasure = Dice.Roll(6, 1) + " goldene Trinkpokale mit jeweils 5 kleinen Rubinen"; descString = Dice.Roll(6, 1) + " goldene Trinkpokale mit jeweils 5 kleinen Rubinen";
break; break;
case 14: case 14:
treasure = "Skelett mit einer kompletten Höhlenforscherausrüstung (Q7 127)"; descString = "Skelett mit einer kompletten Höhlenforscherausrüstung (Q7 127)";
break; break;
case 15: case 15:
treasure = "ein paar Holz-/Knochenwürfel"; descString = "ein paar Holz-/Knochenwürfel";
break; break;
case 16: case 16:
treasure = "eine zerbrochene Phiole"; descString = "eine zerbrochene Phiole";
break; break;
case 17: case 17:
switch(Dice.Roll(6, 1)){ switch(Dice.Roll(6, 1)){
case 1: case 1:
case 2: case 2:
case 3: case 3:
treasure = "eine Phiole mit einem Heiltrank darin"; descString = "eine Phiole mit einem Heiltrank darin";
break; break;
case 4: case 4:
treasure = "eine Phiole mit einem Astraltrank darin"; descString = "eine Phiole mit einem Astraltrank darin";
break; break;
case 5: case 5:
treasure = "eine Phiole mit einem Eigenschaftselixier darin"; descString = "eine Phiole mit einem Eigenschaftselixier darin";
break; break;
case 6: case 6:
treasure = "eine Phiole mit einem Halbgift darin"; descString = "eine Phiole mit einem Halbgift darin";
break; break;
} }
break; break;
case 18: case 18:
treasure = "Götterstatue/-amulett"; descString = "Götterstatue/-amulett";
break; break;
case 19: case 19:
treasure = "magisches Artefakt, dessen Ladungen alle verbraucht sind"; descString = "magisches Artefakt, dessen Ladungen alle verbraucht sind";
break; break;
case 20: case 20:
treasure = "magisches Artefakt"; descString = "magisches Artefakt";
break; break;
} }
} }
@Override
public String toString(){
return treasure;
}
} }

@ -21,43 +21,25 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package main; package eu.smoser.dungeongenerator.main;
import com.mxgraph.layout.mxCircleLayout;
import com.mxgraph.layout.mxIGraphLayout; import eu.smoser.dungeongenerator.dungeon.Dungeon;
import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.util.logging.*;
import com.mxgraph.layout.*;
import com.mxgraph.util.*;
import com.mxgraph.swing.mxGraphComponent; import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.util.mxCellRenderer; import java.nio.file.*;
import com.mxgraph.util.mxConstants;
import dungeon.Dungeon;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Desktop;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.filechooser.FileNameExtensionFilter;
import org.jgrapht.UndirectedGraph; import org.jgrapht.UndirectedGraph;
import org.jgrapht.ext.GmlExporter; import org.jgrapht.ext.*;
import org.jgrapht.ext.JGraphXAdapter;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.awt.Image;
import java.awt.Label;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
/** /**
* *
@ -339,8 +321,9 @@ public class DungeonGeneratorUI extends javax.swing.JFrame {
mGraphComponent.setEnabled(false); mGraphComponent.setEnabled(false);
Map edgeStyle = graphAdapter.getStylesheet().getDefaultEdgeStyle(); Map edgeStyle = graphAdapter.getStylesheet().getDefaultEdgeStyle();
edgeStyle.put(mxConstants.STYLE_NOLABEL, true); edgeStyle.put(mxConstants.STYLE_NOLABEL, true);
edgeStyle.put(mxConstants.STYLE_ENDARROW, mxConstants.NONE);
mxIGraphLayout layout = new mxCircleLayout(graphAdapter); mxIGraphLayout layout = new mxFastOrganicLayout(graphAdapter);
layout.execute(graphAdapter.getDefaultParent()); layout.execute(graphAdapter.getDefaultParent());
jPanelDraw.add(mGraphComponent); jPanelDraw.add(mGraphComponent);
@ -551,10 +534,8 @@ public class DungeonGeneratorUI extends javax.swing.JFrame {
//</editor-fold> //</editor-fold>
/* Create and display the form */ /* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() { java.awt.EventQueue.invokeLater(() -> {
public void run() { new DungeonGeneratorUI().setVisible(true);
new DungeonGeneratorUI().setVisible(true);
}
}); });
} }

@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package util; package eu.smoser.dungeongenerator.util;
/** /**
* Stores a counter to give rooms unique numbers * Stores a counter to give rooms unique numbers

@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package util; package eu.smoser.dungeongenerator.util;
import java.util.Random; import java.util.Random;
Laden…
Abbrechen
Speichern