Skip to content
Snippets Groups Projects
Commit 7008813d authored by Flori N's avatar Flori N
Browse files
parents 8b38f680 d57df6b7
No related branches found
No related tags found
No related merge requests found
package projekt.enigma;
import projekt.enigma.model.Codierer;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
/**
......@@ -65,7 +65,7 @@ public class App extends Application {
*/
@Override
public void start(Stage stage) throws IOException {
scene = new Scene(loadFXML("gui"));
scene = new Scene(loadFXML("kenngruppe"));
stage.setScene(scene);
stage.setResizable(true);
stage.show();
......
This diff is collapsed.
package projekt.enigma;
import java.io.IOException;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;
import projekt.enigma.model.Codierer;
public class KenngruppeController {
private Codierer cod = new Codierer();
@FXML
private TextField tfKenngruppe;
//TODO: Doku
/**
* Beim drücken der Taste wird überprüft ob die eingegebene Kenngruppe weniger als 9 Zeichen hat und ob die
* eingegebenen Zeichen nur Buchstaben sind.
* Bei einer gültigen Eingabe wird die eingegebene Kenngruppe gespeichert und die Enigma-Anwendung gestartet
* @throws IOException :
*/
@FXML
private void switchToPrimary() throws IOException {
App.setRoot("gui");
private void btnGui() throws IOException {
if (tfKenngruppe.getText().length() <9) {
for (char c : tfKenngruppe.getText().toCharArray()) {
if (c == 'a' || c == 'b' || c == 'c' || c == 'd' || c == 'e' || c == 'f' || c == 'g' || c == 'h' || c == 'i' || c == 'j' || c == 'k' || c == 'l' || c == 'm' || c == 'n' || c == 'o' || c == 'p' || c == 'q' || c == 'r' || c == 's' || c == 't' || c == 'u' || c == 'v' || c == 'w' || c == 'x' || c == 'y' || c == 'z'||c == 'A' || c == 'B' || c == 'C' || c == 'D' || c == 'E' || c == 'F' || c == 'G' || c == 'H' || c == 'I' || c == 'J' || c == 'K' || c == 'L' || c == 'M' || c == 'N' || c == 'O' || c == 'P' || c == 'Q' || c == 'R' || c == 'S' || c == 'T' || c == 'U' || c == 'V' || c == 'W' || c == 'X' || c == 'Y' || c == 'Z') {
cod.setKenngruppe(tfKenngruppe.getText());
//setzt
App.setRoot("gui");
}
}
} else {
tfKenngruppe.setStyle("-fx-background-color:#FF0000");
tfKenngruppe.setText("Fehlerhafte Kenngruppe!");
}
}
}
}
\ No newline at end of file
This diff is collapsed.
......@@ -96,14 +96,18 @@ public class Hardware {
public void dreheWalzen(int richtung) {
if (richtung > 0) {
for (int i = 0; i < richtung; i++) {
if (this.walzen[2].dreheWalze(1) && this.walzen[1].dreheWalze(1)) {
this.walzen[0].dreheWalze(1);
if (this.walzen[2].dreheWalze(1)) {
if(this.walzen[1].dreheWalze(1)) {
this.walzen[0].dreheWalze(1);
}
}
}
} else {
for (int i = 0; i > richtung; richtung++) {
if (this.walzen[2].dreheWalze(-1) && this.walzen[1].dreheWalze(-1)) {
this.walzen[0].dreheWalze(-1);
if (this.walzen[2].dreheWalze(-1)) {
if(this.walzen[1].dreheWalze(-1)) {
this.walzen[0].dreheWalze(-1);
}
}
}
}
......@@ -156,7 +160,6 @@ public class Hardware {
//endregion
//region Getter
/**
* Gibt das Objekt des Steckbretts zurück
*
......
......@@ -16,169 +16,168 @@ package projekt.enigma.model;
*/
public class Walze {
//region Variablen
/**
* Das String Array aller bekannter aktuellen Walzen
*/
private String[] walzen;
/**
* alphabet : String dass die Buchstaben des Alphabets enthaelt
*/
private String alphabet;
/**
* ringstellung : char : zeigt die Einstellung fuer den Umspringpunkt
*/
private char ringstellung;
/**
* walzennr : int : Bestimmt, welche Walze genutzt wird
*/
private int walzenNr;
/**
* Die Anzahl der getätigten Walzen Drehungen
*/
private int turns;
//endregion
//region Konstruktor
/**
* Ueberschriebener Konstruktor, der die Eingangsparameter der Walze mit gibt
*
* @param walzenNr : int : Nummer der gewaehlten Walze
* @param ringstellung : int : Einstellung des Umsprungpunktes
*/
public Walze(int walzenNr, int ringstellung) {
this.walzen = new String[5];
this.walzen[0] = "EKMFLGDQVZNTOWYHXUSPAIBRCJ";
this.walzen[1] = "AJDKSIRUXBLHWTMCQGZNPYFVOE";
this.walzen[2] = "BDFHJLCPRTXVZNYEIWGAKMUSQO";
this.walzen[3] = "ESOVPZJAYQUIRHXLNFTGKDCMWB";
this.walzen[4] = "VZBRGITYUPSDNHLXAWMJQOFECK";
this.alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
this.turns = 0;
this.setWalzenNr(walzenNr);
this.setRingstellung(ringstellung);
}
//endregion
//region Funktionen & Methoden
/**
* Dreht die Walze: Zählt die Umdrehungen (Turns) um eines hoch oder runter, je nach Drehrichtung.
* <p>
* Ueberprueft, ob der Umspringpunkt der Walze nach der Drehung erreicht wurde.
*
* @param richtung : int : 1 dreht die Walze weiter und -1 dreht sie einen Schritt zurück
* @return checkRing : boolean : gibt true zurueck wenn der Umspringpunkt erreicht wurde
* TODO: Doku
*/
public boolean dreheWalze(int richtung) {
boolean checkRing = false;
if (richtung == -1 || richtung == 1) {
if (richtung == 1) {
this.turns++;
} else if (richtung == -1) {
this.turns--;
}
// gleicht die Ringstellung mit der aktuellen Position ab
if (this.getPosition() + richtung == this.ringstellung) {
checkRing = true;
}
}
return checkRing;
}
/**
* Codiert den mitgegebenen Buchstaben anhand der gewaehlten Walze.
*
* @param buchstabe : char : Buchstabe, der verschluesselt werden soll
* @return buchstabe : char : verschluesselter Buchstabe
*/
public char codiere(char buchstabe) {
return this.fetchWalze().charAt((this.alphabet.indexOf(buchstabe) + this.turns) % 26);
}
/**
* Decodiert den mitgegebenen Buchstaben mit Hilfe der (verschobenen) Walze
*
* @param buchstabe : char : Buchstabe, der decodiert werden soll
* @return buchstabe : char : decodierter Buchstabe
*/
public char codiere2(char buchstabe) {
return this.alphabet.charAt((this.fetchWalze().indexOf(buchstabe) - this.turns + 260) % 26);
}
/**
* Holt den korrekten String zu der Walze
*
* @return walze : Character[] : gibt die gewaehlte Walze zurueck
*/
private String fetchWalze() {
return walzen[walzenNr];
}
//endregion
//region Setter
/**
* * TODO: Funktionsname hat sich geändert
* Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen.
* Buchstaben werden automatisch in Grossbuchstaben umgewandelt.
* Ist die Grundeinstellung nicht 'A', wird die Methode dreheWalze() aufgerufen.
*
* @param buchstabe : Character : Einstellung der Walze
*/
public void setPosition(Character buchstabe) {
this.turns = alphabet.indexOf(buchstabe);
}
/**
* Setzt die Walzennummer. Es stehen fuenf Walze zur Auswahl.
*
* @param walzenNr : int : Walzennummer
*/
public void setWalzenNr(int walzenNr) {
if ((walzenNr > 0) && (walzenNr < 6)) {
this.walzenNr = walzenNr - 1;
} else {
System.err.println("Keine gültige Walzennummer");
}
}
/**
* Setzt die Initiale Ringstellung der Walze.
* Es sind nur Zahlen von 1 - 26 zugelassen.
* <p>
* Die Ringstellung wird zum char umgewandelt.
* Im Fehlerfall wird die Ringstellung standardmaessig auf 'Z' gesetzt.
*
* @param ringstellung : int : Punkt an dem die Walze umspringt
*/
public void setRingstellung(int ringstellung) {
if ((ringstellung > 0) && (ringstellung <= 26)) {
this.ringstellung = this.alphabet.charAt(ringstellung - 1);
} else {
this.ringstellung = 'Z';
}
}
//endregion
//region Getter
/**
* Gibt den Character zurueck, der aktuell in der Walze eingestellt ist
*
* @return Character am Index 0 des (verschobenen) Alphabets zurueck
*/
public Character getPosition() {
return this.alphabet.charAt(turns % 26);
}
//endregion
//region Variablen
/**
* Die Anzahl der getätigten Walzen Drehungen
* TODO: Wieder auf private setzen
*/
public int turns;
/**
* Das String Array aller bekannter aktuellen Walzen
*/
private String[] walzen;
/**
* alphabet : String dass die Buchstaben des Alphabets enthaelt
*/
private String alphabet;
/**
* ringstellung : char : zeigt die Einstellung fuer den Umspringpunkt
*/
private char ringstellung;
/**
* walzennr : int : Bestimmt, welche Walze genutzt wird
*/
private int walzenNr;
//endregion
//region Konstruktor
/**
* Ueberschriebener Konstruktor, der die Eingangsparameter der Walze mit gibt
*
* @param walzenNr : int : Nummer der gewaehlten Walze
* @param ringstellung : int : Einstellung des Umsprungpunktes
*/
public Walze(int walzenNr, int ringstellung) {
this.walzen = new String[5];
this.walzen[0] = "EKMFLGDQVZNTOWYHXUSPAIBRCJ";
this.walzen[1] = "AJDKSIRUXBLHWTMCQGZNPYFVOE";
this.walzen[2] = "BDFHJLCPRTXVZNYEIWGAKMUSQO";
this.walzen[3] = "ESOVPZJAYQUIRHXLNFTGKDCMWB";
this.walzen[4] = "VZBRGITYUPSDNHLXAWMJQOFECK";
this.alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
this.turns = 0;
this.setWalzenNr(walzenNr);
this.setRingstellung(ringstellung);
}
//endregion
//region Funktionen & Methoden
/**
* Dreht die Walze: Zählt die Umdrehungen (Turns) um eines hoch oder runter, je nach Drehrichtung.
* <p>
* Ueberprueft, ob der Umspringpunkt der Walze nach der Drehung erreicht wurde.
*
* @param richtung : int : 1 dreht die Walze weiter und -1 dreht sie einen Schritt zurück
* @return checkRing : boolean : gibt true zurueck wenn der Umspringpunkt erreicht wurde
* TODO: Doku
*/
public boolean dreheWalze(int richtung) {
boolean checkRing = false;
int korrektorFaktor = 0;
if (richtung == -1 || richtung == 1) {
if (richtung == 1) {
this.turns++;
} else if (richtung == -1) {
korrektorFaktor = 1;
this.turns--;
}
// gleicht die Ringstellung mit der aktuellen Position ab
if ((this.alphabet.indexOf(this.getPosition()) + korrektorFaktor) % 26 == this.alphabet.indexOf(this.ringstellung)) {
checkRing = true;
}
}
return checkRing;
}
/**
* Codiert den mitgegebenen Buchstaben anhand der gewaehlten Walze.
*
* @param buchstabe : char : Buchstabe, der verschluesselt werden soll
* @return buchstabe : char : verschluesselter Buchstabe
*/
public char codiere(char buchstabe) {
return this.fetchWalze().charAt((this.alphabet.indexOf(buchstabe) + this.turns) % 26);
}
/**
* Decodiert den mitgegebenen Buchstaben mit Hilfe der (verschobenen) Walze
*
* @param buchstabe : char : Buchstabe, der decodiert werden soll
* @return buchstabe : char : decodierter Buchstabe
*/
public char codiere2(char buchstabe) {
return this.alphabet.charAt((this.fetchWalze().indexOf(buchstabe) - this.turns + 260) % 26);
}
/**
* Holt den korrekten String zu der Walze
*
* @return walze : Character[] : gibt die gewaehlte Walze zurueck
*/
private String fetchWalze() {
return walzen[walzenNr];
}
//endregion
//region Setter
/**
* Setzt die Walzennummer. Es stehen fuenf Walze zur Auswahl.
*
* @param walzenNr : int : Walzennummer
*/
public void setWalzenNr(int walzenNr) {
if ((walzenNr > 0) && (walzenNr < 6)) {
this.walzenNr = walzenNr - 1;
} else {
System.err.println("Keine gültige Walzennummer");
}
}
/**
* Setzt die Initiale Ringstellung der Walze.
* Es sind nur Zahlen von 1 - 26 zugelassen.
* <p>
* Die Ringstellung wird zum char umgewandelt.
* Im Fehlerfall wird die Ringstellung standardmaessig auf 'Z' gesetzt.
*
* @param ringstellung : int : Punkt an dem die Walze umspringt
*/
public void setRingstellung(int ringstellung) {
if ((ringstellung > 0) && (ringstellung <= 26)) {
this.ringstellung = this.alphabet.charAt(ringstellung - 1);
} else {
this.ringstellung = 'Z';
}
}
/**
* * TODO: Funktionsname hat sich geändert
* Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen.
* Buchstaben werden automatisch in Grossbuchstaben umgewandelt.
* Ist die Grundeinstellung nicht 'A', wird die Methode dreheWalze() aufgerufen.
*
* @param buchstabe : Character : Einstellung der Walze
*/
public void setPosition(Character buchstabe) {
this.turns = alphabet.indexOf(buchstabe);
}
//endregion
//region Getter
/**
* Gibt den Character zurueck, der aktuell in der Walze eingestellt ist
*
* @return Character am Index 0 des (verschobenen) Alphabets zurueck
*/
public Character getPosition() {
return this.alphabet.charAt(turns % 26);
}
//endregion
}
\ No newline at end of file
......@@ -7,26 +7,14 @@
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.FlowPane?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.shape.Circle?>
<?import javafx.scene.text.Font?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="677.0" prefWidth="962.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.GuiController">
<children>
<AnchorPane layoutX="241.0" layoutY="130.0" prefHeight="111.0" prefWidth="487.0" AnchorPane.leftAnchor="241.0" AnchorPane.rightAnchor="240.0">
<children>
<VBox layoutX="72.0" layoutY="-89.0" prefHeight="210.0" prefWidth="377.0" AnchorPane.bottomAnchor="-10.0" AnchorPane.leftAnchor="72.0" AnchorPane.rightAnchor="37.0" AnchorPane.topAnchor="-89.0">
<children>
<TextField fx:id="tfKlartext" editable="false" prefHeight="80.0" prefWidth="377.0" />
<Label prefHeight="17.0" prefWidth="385.0" />
<TextField fx:id="tfCodiert" editable="false" prefHeight="79.0" prefWidth="377.0" />
<Label prefHeight="17.0" prefWidth="385.0" />
</children>
</VBox>
</children></AnchorPane>
<AnchorPane layoutX="207.0" layoutY="-111.0" prefHeight="111.0" prefWidth="487.0" AnchorPane.leftAnchor="207.0" AnchorPane.rightAnchor="274.0" />
<GridPane layoutX="23.0" layoutY="60.0" prefHeight="158.0" prefWidth="237.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="60.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
......@@ -92,13 +80,6 @@
</MenuButton>
</children>
</GridPane>
<FlowPane layoutX="736.0" layoutY="51.0" prefHeight="173.0" prefWidth="195.0" AnchorPane.rightAnchor="36.0" AnchorPane.topAnchor="51.0">
<children>
<Button fx:id="btnEmpfangen" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="80.0" prefWidth="195.0" text="Funkspruch empfangen" />
<Label prefHeight="17.0" prefWidth="195.0" />
<Button fx:id="btnSenden" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="80.0" prefWidth="195.0" text="An Funker senden" />
</children>
</FlowPane>
<GridPane layoutX="23.0" layoutY="222.0" prefHeight="60.0" prefWidth="270.0" AnchorPane.leftAnchor="23.0" AnchorPane.topAnchor="222.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" maxWidth="206.0" minWidth="10.0" prefWidth="102.0" />
......@@ -193,7 +174,7 @@
<Insets left="10.0" right="10.0" />
</GridPane.margin>
</TextField>
<Button fx:id="btnA" minHeight="35.0" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="A" textFill="#fffdfd" GridPane.columnIndex="2" GridPane.rowIndex="5">
<Button fx:id="btnA" minHeight="35.0" mnemonicParsing="false" onMousePressed="#tasteRunter" onMouseReleased="#tasteRauf" prefHeight="43.0" prefWidth="45.0" style="-fx-background-radius: 100; -fx-background-color: #0d0d0d;" text="A" textFill="#fffdfd" GridPane.columnIndex="2" GridPane.rowIndex="5">
<font>
<Font name="System Bold" size="18.0" />
</font>
......@@ -690,5 +671,34 @@
</Label>
</children>
</GridPane>
<Label layoutX="684.0" layoutY="-164.0" prefHeight="17.0" prefWidth="195.0" />
<GridPane layoutX="297.0" layoutY="64.0" prefHeight="168.0" prefWidth="585.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TextField fx:id="tfKlartext" editable="false" prefHeight="70.0" prefWidth="293.0">
<GridPane.margin>
<Insets />
</GridPane.margin>
</TextField>
<TextField fx:id="tfCodiert" editable="false" prefHeight="70.0" prefWidth="293.0" GridPane.rowIndex="1" />
<Button fx:id="btnSenden" alignment="CENTER" contentDisplay="RIGHT" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="70.0" prefWidth="195.0" text="An Funker senden" textAlignment="CENTER" GridPane.columnIndex="1">
<GridPane.margin>
<Insets left="80.0" />
</GridPane.margin>
</Button>
<Button fx:id="btnEmpfangen" mnemonicParsing="false" onAction="#gedrueckteTaste" prefHeight="70.0" prefWidth="195.0" text="Funkspruch empfangen" GridPane.columnIndex="1" GridPane.rowIndex="1">
<GridPane.margin>
<Insets left="80.0" />
</GridPane.margin>
</Button>
</children>
</GridPane>
</children>
</AnchorPane>
......@@ -2,21 +2,20 @@
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.shape.Circle?>
<?import javafx.scene.layout.VBox?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="411.0" prefWidth="512.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.KenngruppeController">
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="137.0" prefWidth="234.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="projekt.enigma.KenngruppeController">
<children>
<Label layoutX="81.0" layoutY="29.0" text="Bitte Kenngruppe eingeben!" AnchorPane.leftAnchor="81.0" AnchorPane.rightAnchor="70.0" AnchorPane.topAnchor="29.0" />
<HBox layoutX="107.0" layoutY="141.0" prefHeight="26.0" prefWidth="276.0" AnchorPane.leftAnchor="107.0" AnchorPane.rightAnchor="129.0" AnchorPane.topAnchor="141.0">
<VBox layoutX="13.0" layoutY="20.0" prefHeight="107.0" prefWidth="209.0" AnchorPane.bottomAnchor="10.0" AnchorPane.leftAnchor="13.0" AnchorPane.rightAnchor="12.0" AnchorPane.topAnchor="20.0">
<children>
<Button fx:id="secondaryButton" onAction="#switchToPrimary" prefHeight="25.0" prefWidth="142.0" text="Kenngruppe bestätigen!" />
<Label prefHeight="17.0" prefWidth="159.0" text="Label" />
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="150.0" text="Button" />
<Label alignment="CENTER" contentDisplay="CENTER" prefHeight="17.0" prefWidth="208.0" text="Bitte Kenngruppe eingeben!" />
<Label prefHeight="62.0" prefWidth="209.0" />
<TextField fx:id="tfKenngruppe" />
<Label prefHeight="39.0" prefWidth="209.0" />
<Button maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" onAction="#btnGui" prefHeight="25.0" prefWidth="212.0" text="Kenngruppe setzen!" />
</children>
</HBox>
<Circle fill="DODGERBLUE" layoutX="226.0" layoutY="267.0" radius="100.0" stroke="BLACK" strokeType="INSIDE" AnchorPane.leftAnchor="126.0" AnchorPane.rightAnchor="186.0" AnchorPane.topAnchor="167.0" />
<Button fx:id="secondaryButton" layoutX="40.0" layoutY="85.0" onAction="#switchToPrimary" prefHeight="25.0" prefWidth="241.0" text="Kenngruppe bestätigen!" />
</VBox>
</children>
</AnchorPane>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment