From d0f4c848c6d68c6852880adbd12f4e6e69c73a08 Mon Sep 17 00:00:00 2001 From: Oshgnacknak Date: Wed, 30 Jun 2021 18:43:52 +0200 Subject: [PATCH] Add README.md --- README.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ gruphi.png | Bin 0 -> 40479 bytes 2 files changed, 56 insertions(+) create mode 100644 README.md create mode 100644 gruphi.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..edd45c6 --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# Gruphi - Die Graph GUI + +![](gruphi.png) + +Um diese GUI nutzen zu müssen, +muss man die H1, +sprich die Klasse `h07.graph.DirectedGraphImpl`, +implementiert haben +und eine Entsprechende Fabrik in der `Gruphi.main()` angeben. +Die Einfachste Fabrik sieht in etwa so aus: + +```java +public class EmptyGraphFactory implements DirectedGraphFactory { + + @Override + public DirectedGraph createDirectedGraph() { + return new DirectedGraphImpl<>(); + } +} +``` + + +# Streuerung + +- `C`: +Graphen leeren + +- `G`: +Graphen leeren und raster erzeugen + +- Linke Maustaste: +Knoten erstellen + +- Rechte Maustaste: +Knoten auswählen + +- Escape, `Q`: +Beenden + +## Wenn Knoten ausgewählt (rot) + +- WASD, Pfeiltasten, Vimkeys: +Knoten bewegen + +- Linke Maustaste: +Verbingen erstellen bzw. löschen, +wenn anderer Knoten geklickt. +Sonst Knoten teleportieren + +- Rechte Maustaste: +Knoten unauswählen, +bwz. neuen Knoten auswählen + +- `M`: +Labyrinth mit Knoten +erstellen als Startknoten generieren \ No newline at end of file diff --git a/gruphi.png b/gruphi.png new file mode 100644 index 0000000000000000000000000000000000000000..344a2eba34ee9576eb4a3b7f2682c9f58c29f8d8 GIT binary patch literal 40479 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