1
0
Fork 0

Compare commits

..

101 Commits
main ... main

Author SHA1 Message Date
Kai Sellmann 3056aed05c Merge pull request 'iss#6' (#43) from iss#6 into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#43
Reviewed-by: Kai Sellmann <2210892@stud.hs-mannheim.de>
2023-11-07 10:38:02 +01:00
Kai Sellmann 9fa2f7f4ae Merge branch 'main' into iss#6 2023-11-07 10:37:16 +01:00
Mohammad Hawrami 4b4ebbfbe4 Update Block und Blocktest 2023-11-07 10:31:04 +01:00
Mohammad Hawrami 5de20bcf4c Erweiterung der Klassen Block, Blockeintrag und Blockzeile und fertigung des Testes Blockeintrag,Block,Blockzeile 2023-11-07 09:54:07 +01:00
Mohammad Hawrami 4030351fde Erweiterung der Klassen Block, Blockeintrag und Blockzeile und fertigung des Testes Blockeintrag 2023-11-05 20:40:16 +01:00
Philipp Kotte f13e1208ba Merge pull request 'kts.test' (#41) from kts.test into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#41
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-26 17:33:17 +02:00
Kai Sellmann 103361b06a update TEST.DOMAIN.KARTEN 2023-10-26 15:48:44 +02:00
Kai Sellmann 99601d8d3a update 2023-10-26 15:45:40 +02:00
Kai Sellmann e9c835be45 Merge branch 'main' of https://gitty.informatik.hs-mannheim.de/2211945/WIZARD_PR2_DOP.git into kts.testklassen 2023-10-26 15:31:49 +02:00
Kai Sellmann 3b65aa78e5 Update TEST.DOMAIN.KARTEN 2023-10-26 15:31:14 +02:00
Philipp Kotte c52ff449e7 Merge pull request 'Update DOMAIN.KARTEN' (#39) from kts.bib into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#39
2023-10-26 13:54:53 +02:00
Kai Sellmann 380a2b4d8b Update DOMAIN.KARTEN 2023-10-26 13:50:54 +02:00
Philipp Kotte e2a65eaf21 Merge pull request 'Stich klasse mit diversen Änderungen in der SpielCLI Spiel und weitere' (#38) from Stich into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#38
2023-10-25 12:37:49 +02:00
Philipp Kotte 04544be9ee Testklassen aktueller Stand
git push origin Stich
2023-10-25 12:36:07 +02:00
Philipp Kotte ec94bd6d07 Rebase 2023-10-25 12:34:48 +02:00
Philipp Kotte 4eecaf2a0b Merge pull request 'Test der Magierkarte und Narrenkarte angepasst.' (#37) from kts.desktop into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#37
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-25 12:31:13 +02:00
Philipp Kotte 7fe6347026 resolved merge conflict 2023-10-25 12:29:58 +02:00
Philipp Kotte 225f1c3d2a megre with recent pull and further changes 2023-10-25 11:57:48 +02:00
Philipp Kotte 594104e98f Merge pull request 'Aktualisierungen siehe Kommentar im PullRequest' (#36) from kts.laptop into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#36
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-24 10:17:52 +02:00
Kai Sellmann c849412d80 FARBE aus MK und NK und Tests entfernt 2023-10-23 10:33:50 +02:00
Kai Sellmann a868f82c56 Test der Magierkarte und Narrenkarte angepasst. 2023-10-23 10:17:32 +02:00
Philipp Kotte 8689110670 Kartenvariable zu Wert geändert, dementsprechend methoden und Tests angepasst 2023-10-20 08:52:29 +02:00
Philipp Kotte fedf21b3e4 Spieler am Zug hinzufügen und aktualisieren vor dem Spiel 2023-10-19 16:44:03 +02:00
Kai Sellmann 60f53eef86 Aktualisierungen siehe Kommentar im PullRequest 2023-10-18 16:00:16 +02:00
Philipp Kotte e68df5a6bb Spieler removen möglich 2023-10-15 10:13:40 +02:00
Philipp Kotte 26add62098 lokal merge; SpielCLI -> Spieler hinzufügen mit switch ob es genügend sind. 2023-10-14 19:15:04 +02:00
Philipp Kotte 9a64896350 Merge pull request 'Alle Karten incl Test fertig' (#35) from kts.desktop into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#35
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-14 19:07:11 +02:00
Kai Sellmann 860976eeb5 Alle Karten incl Test fertig 2023-10-13 07:58:37 +02:00
Philipp Kotte e55fddc6f9 Merge branch 'main' of https://gitty.informatik.hs-mannheim.de/2211945/WIZARD_PR2_DOP into Stich 2023-10-12 08:52:37 +02:00
Philipp Kotte 1b3decf050 Diverse Anpassungen in Spiel, Karte, Magierkarte, Narrenkarte, zahlenkarte und SpielCLI 2023-10-12 08:51:24 +02:00
Mohammad Hawrami 47bd09f200 Merge pull request 'Testfälle für Narrenkarte-Klasse' (#31) from kts_desktop into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#31
Reviewed-by: Mohammad Hawrami <2210970@stud.hs-mannheim.de>
2023-10-12 08:41:11 +02:00
Mohammad Hawrami d766c52532 Merge pull request 'MagierkarteTest-Klasse und Anpassung Magierkarte-Klasse' (#33) from kts1 into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#33
Reviewed-by: Mohammad Hawrami <2210970@stud.hs-mannheim.de>
2023-10-12 08:40:43 +02:00
Kai Sellmann 4f56c98237 Merge branch 'main' into kts1 2023-10-12 08:22:55 +02:00
Kai Sellmann 6dbe69453c MagierkarteTest-Klasse und Anpassung Magierkarte-Klasse 2023-10-12 08:20:31 +02:00
Philipp Kotte 014bfdcfb3 Merge pull request 'Brainstorming session mit Odin und Mo' (#32) from Bilder into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#32
2023-10-11 19:57:05 +02:00
Philipp Kotte 564a15c529 Brainstorming session mit Odin und Mo 2023-10-11 19:56:22 +02:00
Kai Sellmann 5858c3f14e Merge branch 'main' into kts_desktop 2023-10-11 18:53:36 +02:00
Kai Sellmann 80103884ef Narrenkarte-Klasse jetzt mit Exception 2023-10-11 18:52:56 +02:00
Kai Sellmann a29adfa4ff Testfälle für Narrenkarte-Klasse 2023-10-11 18:44:58 +02:00
Philipp Kotte 694ea35056 Merge pull request 'Änderungen in Persistenz' (#30) from merge into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#30
2023-10-11 17:31:30 +02:00
Philipp Kotte 8182bd7faf Merge branch 'main' of https://gitty.informatik.hs-mannheim.de/2211945/WIZARD_PR2_DOP into merge 2023-10-11 17:31:15 +02:00
Philipp Kotte f47b328388 merging 2023-10-11 17:29:08 +02:00
Philipp Kotte 89e0020191 Änderungen in Persistenz 2023-10-11 17:27:43 +02:00
Philipp Kotte f0dceb402e Merge pull request 'iss#28' (#29) from iss#28 into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#29
2023-10-11 17:17:12 +02:00
Philipp Kotte dd4d7c9e76 Merge branch 'main' of https://gitty.informatik.hs-mannheim.de/2211945/WIZARD_PR2_DOP into iss#28 2023-10-11 17:16:59 +02:00
Philipp Kotte 3d5b6c5d8c Strukturanpassung in Blockzeile, Zahlenkarte, Kartenstapel und Spieler 2023-10-11 17:15:09 +02:00
Philipp Kotte 253f29e2a8 Strukturanpassung in Persistenz.java 2023-10-11 17:04:28 +02:00
Philipp Kotte 3980ba1feb Merge pull request 'Änderungen' (#27) from iss#6 into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#27
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-11 16:59:37 +02:00
Mohammad Hawrami 8d5480674c Merge branch 'main' of https://gitty.informatik.hs-mannheim.de/2211945/WIZARD_PR2_DOP into iss#6 2023-10-11 16:58:06 +02:00
Mohammad Hawrami 15f32d8c23 Änderungen 2023-10-11 16:56:05 +02:00
Philipp Kotte 330548712e Merge pull request 'Template_DOP_Klassen' (#26) from Template_DOP_Klassen into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#26
2023-10-11 16:50:02 +02:00
Philipp Kotte dbf57e9852 Systemausgabe für Laden der WIZARD_DATA_Wizard.ser 2023-10-11 13:59:46 +02:00
Philipp Kotte 605d8c803d to String hinzugefügt und Spiel erweitert 2023-10-11 11:15:39 +02:00
Philipp Kotte 8e7ccb941f Kartenstapel und Block zu Spiel hinzugefügt 2023-10-11 11:06:39 +02:00
Philipp Kotte 7ec9a4e436 Template von DOP hinzugefügt 2023-10-11 11:04:46 +02:00
Philipp Kotte 026e01577d Temaplate für die Anforderungen von einer Struktur für Klassen von Dopatka hinzugefügt 2023-10-11 10:28:42 +02:00
Philipp Kotte 81f5224f55 Merge pull request 'Dopatkas Anforderungen aus den Mails' (#25) from DOP_anforderungen into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#25
2023-10-10 23:14:43 +02:00
Philipp Kotte 32bfd016f4 Dopatkas Anforderungen aus den Mails 2023-10-10 23:14:01 +02:00
Philipp Kotte 349b9ad944 Merge pull request 'Neue Struktur für den Block. Testklassen für alle bisher vorhandenen Klassen' (#19) from Testing into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#19
2023-10-10 21:23:24 +02:00
Philipp Kotte b14ff24156 Neue Struktur für den Block. Testklassen für alle bisher vorhandenen Klassen 2023-10-10 21:22:33 +02:00
Philipp Kotte 9a992ecd99 Merge pull request 'Testklassen für Spieler und Kartenstapel angelegt, Block implementation' (#18) from Block_feat into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#18
2023-10-10 21:15:52 +02:00
Philipp Kotte 0458899dd2 Testklassen für Spieler und Kartenstapel angelegt 2023-10-10 21:13:21 +02:00
Philipp Kotte 01e8504877 Merge pull request '.idea ordner gelöscht' (#17) from clean into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#17
2023-10-10 18:10:38 +02:00
Philipp Kotte 9052428d30 .idea ordner gelöscht 2023-10-10 18:09:57 +02:00
Philipp Kotte eaa7831208 Merge pull request 'Spiel_feat persistenz SpeilCLI und weiteres' (#16) from Spiel_feat into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#16
2023-10-10 18:08:26 +02:00
Philipp Kotte fe6695f91f out directory geslöscht 2023-10-10 18:07:02 +02:00
Philipp Kotte 80a86f94b2 Merge branch 'main' of https://gitty.informatik.hs-mannheim.de/2211945/WIZARD_PR2_DOP into Spiel_feat 2023-10-10 17:54:42 +02:00
Philipp Kotte d41ffe5ea9 Clean up 2023-10-10 17:54:22 +02:00
Philipp Kotte f6f6c6b1d3 out/production/WIAZRD_DOP_PR2/WIAZRD_DOP_PR2.iml gelöscht 2023-10-10 17:46:48 +02:00
Philipp Kotte 85a9d5a1f1 out/production/WIAZRD_DOP_PR2/.idea/vcs.xml gelöscht 2023-10-10 17:46:31 +02:00
Philipp Kotte be086137bf out/production/WIAZRD_DOP_PR2/.idea/modules.xml gelöscht 2023-10-10 17:46:27 +02:00
Philipp Kotte 9acd679aec out/production/WIAZRD_DOP_PR2/.idea/misc.xml gelöscht 2023-10-10 17:46:12 +02:00
Philipp Kotte 7480861dd8 out/production/WIAZRD_DOP_PR2/.idea/.gitignore gelöscht 2023-10-10 17:46:09 +02:00
Philipp Kotte 2117e9073f out/production/WIAZRD_DOP_PR2/.idea/codeStyles/codeStyleConfig.xml gelöscht 2023-10-10 17:46:01 +02:00
Philipp Kotte 6a8f0d20af out/production/WIAZRD_DOP_PR2/.idea/codeStyles/Project.xml gelöscht 2023-10-10 17:45:57 +02:00
Philipp Kotte 52fb145fb1 WIAZRD_DOP_PR2.iml gelöscht 2023-10-10 17:45:45 +02:00
Philipp Kotte 6f9157ef50 Persistenz pluss erster anfang SpielCLI 2023-10-10 17:44:25 +02:00
Philipp Kotte b4ea187d3f Merge pull request 'kleine Änderungen im Kartenstapel - odin' (#15) from Kartenstapel_odin into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#15
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-10 17:39:53 +02:00
odins 1f9cdb5614 kleine Änderungen im Kartenstapel - odin 2023-10-10 17:34:41 +02:00
Philipp Kotte 1571a95a08 Merge pull request 'Spielkarten-Klassen erstellt (Zahlenkarte fehlt noch)' (#14) from kts2 into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#14
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-10 16:50:13 +02:00
Kai Sellmann 0137270bad Merge branch 'main' of https://gitty.informatik.hs-mannheim.de/2211945/WIZARD_PR2_DOP.git into kts2 2023-10-10 16:48:53 +02:00
Kai Sellmann ff35a7dc33 Spielkarten-Klassen erstellt (Zahlenkarte fehlt noch) 2023-10-10 16:46:11 +02:00
Odin Selimovic 809ac6cad6 Merge pull request 'comments hinzugefügt und Spielklasse Methodenköpfe eingefügt' (#11) from comments into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#11
Reviewed-by: Odin Selimovic <2212266@stud.hs-mannheim.de>
2023-10-10 16:20:27 +02:00
Philipp Kotte fff29f4d40 Merge branch 'main' of https://gitty.informatik.hs-mannheim.de/2211945/WIZARD_PR2_DOP into comments 2023-10-10 16:16:56 +02:00
Philipp Kotte e483fb3578 keine ahnung was für änderungen bro 2023-10-10 16:16:24 +02:00
Philipp Kotte 2d6da1d460 Merge pull request 'kommentar hinzugefügt' (#13) from SpielCLI_feat into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#13
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-10 16:13:45 +02:00
odins 801ace0345 kommentar hinzugefügt 2023-10-10 16:11:55 +02:00
Philipp Kotte 8230edfb81 Merge pull request 'erster commit' (#12) from odin_feat into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#12
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-10 16:06:27 +02:00
odins 7ee89b3f60 erster commit 2023-10-10 15:42:39 +02:00
Philipp Kotte a0fdcd3db7 Spiel methodenköpfe hinzugefügt 2023-10-10 15:30:47 +02:00
Philipp Kotte 2541430c0d Kommentare in Spiel und Spieler 2023-10-10 15:22:09 +02:00
Kai Sellmann a114edf228 Merge pull request 'Spieler_feat' (#10) from Spieler_feat into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#10
Reviewed-by: Kai Sellmann <2210892@stud.hs-mannheim.de>
2023-10-10 15:03:00 +02:00
Philipp Kotte 08228b891a Merge pull request 'Spielerklasse ergänzt mit Override toString()' (#9) from kts1 into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#9
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-10 15:00:15 +02:00
Kai Sellmann bf298f5817 Merge branch 'main' of
https://gitty.informatik.hs-mannheim.de/2211945/WIZARD_PR2_DOP into kts1
2023-10-10 14:59:44 +02:00
Kai Sellmann 43ca4cafec Spielerklasse ergänzt 2023-10-10 14:24:38 +02:00
Philipp Kotte 6d96d9148c starte Spiel hinzugefügt 2023-10-10 14:16:24 +02:00
Kai Sellmann d2ee4ffe2a Spielerklasse ergänzt mit Override toString() 2023-10-10 14:13:40 +02:00
Philipp Kotte 397c260aca Readme ergänzung mit Dopatkas Code of Conduct und erweiterung von Spiel 2023-10-10 14:09:27 +02:00
Philipp Kotte 3b5cca6abe Spiel Klasse anfangen 2023-10-10 12:38:27 +02:00
Philipp Kotte d2ca1a5bb4 Merge pull request 'Klassen Geschlecht, Kartenfarbe und Spieler erstellt.' (#8) from kts into main
Reviewed-on: 2211945/WIZARD_PR2_DOP#8
Reviewed-by: Philipp Kotte <2211945@stud.hs-mannheim.de>
2023-10-10 12:16:06 +02:00
Kai Sellmann 2339cbeaae Klassen Geschlecht, Kartenfarbe und Spieler erstellt. 2023-10-10 12:04:21 +02:00
43 changed files with 1873 additions and 544 deletions

BIN
.DS_Store vendored 100644

Binary file not shown.

9
.gitignore vendored
View File

@ -3,3 +3,12 @@
# Object Data # Object Data
*.o *.o
# iml
*.iml
# Jar dateien
/lib
.idea
/Main.class
/RendomTest.class

3
.vscode/settings.json vendored 100644
View File

@ -0,0 +1,3 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode"
}

BIN
Bild 2.jpeg 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 951 KiB

BIN
Bild.jpeg 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 KiB

View File

@ -1,11 +0,0 @@
/*
============================================================
This is the "Block" file from Author: Philipp Kotte
written on: 05 / 10 / 2023 at: 23:43
============================================================
*/
package Domain;
public class Block {
}

View File

@ -0,0 +1,29 @@
/*
============================================================
This is the "Block" file from Author: Philipp Kotte
written on: 05 / 10 / 2023 at: 23:43
============================================================
*/
package Domain.Block;
import java.util.ArrayList;
public class Block {
private ArrayList<Blockzeile> zeilen;
public Block(){
this.zeilen = new ArrayList<>();
}
public void addZeile(Blockzeile blockzeile) {
zeilen.add(blockzeile);
}
public Blockzeile[] getDaten(){
if(zeilen.isEmpty()){
System.out.println("Die Liste der Blockzeilen ist Leer. ");
return zeilen.toArray(new Blockzeile[0]);
}
return zeilen.toArray(new Blockzeile[0]);
}
}

View File

@ -0,0 +1,76 @@
/*
============================================================
This is the "Blockeintrag" file from Author: Philipp Kotte
written on: 05 / 10 / 2023 at: 23:44
============================================================
*/
package Domain.Block;
import Domain.Spieler;
import java.util.Objects;
public class Blockeintrag {
private int punkte;
private int stiche;
private Spieler id;
public Blockeintrag() {
}
public Blockeintrag(int punkte, int stiche, Spieler id) {
if(stiche < 0){
throw new IllegalArgumentException("Ihre Stiche dürfen nicht im Negativen bereich sein");
}
this.stiche = stiche;
this.punkte = punkte;
this.id = id;
}
public int getPunkte() {
return this.punkte;
}
public int getStiche() {
return this.stiche;
}
public void setStiche(int stiche) {
if (stiche < 0){
throw new IllegalArgumentException("Ihre Stich dürfen nicht im Negative bereich sein");
}
this.stiche = stiche;
}
public void setPunkte(int punkte) {
this.punkte = punkte;
}
public Spieler getId() {
return id;
}
@Override
public boolean equals(Object ob){
if (this == ob) {
return true;
}
if (ob == null || getClass() != ob.getClass()) {
return false;
}
Blockeintrag andererEintrag = (Blockeintrag) ob;
return this.punkte == andererEintrag.punkte && this.stiche == andererEintrag.stiche
&& Objects.equals(this.id, andererEintrag.id);
}
@Override
public int hashCode() {
return Objects.hash(punkte, stiche, id);
}
@Override
public String toString() {
return getPunkte() + ", S: " + getStiche() + " | ";
}
}

View File

@ -0,0 +1,86 @@
/*
============================================================
This is the "Blockzeile" file from Author: Philipp Kotte
written on: 05 / 10 / 2023 at: 23:44
============================================================
*/
package Domain.Block;
import java.util.ArrayList;
public class Blockzeile {
/*------------------------------------------*/
// statische Konstanten
/*------------------------------------------*/
/*------------------------------------------*/
// statische Attribute(zB. zähler)
/*------------------------------------------*/
/*------------------------------------------*/
// Attribute jedes Objektes
/*------------------------------------------*/
private int rundenNummer;
private ArrayList<Blockeintrag> eintraege;
/*------------------------------------------*/
// Konstruktoren (default und spezifische)
/*------------------------------------------*/
public Blockzeile(){
}
public Blockzeile(int rundenNummer, Blockeintrag eintrag) {
this.rundenNummer = rundenNummer;
this.eintraege = new ArrayList<>();
addEintrag(eintrag);
}
/*------------------------------------------*/
// statische Methoden
/*------------------------------------------*/
/*------------------------------------------*/
// Getter und Setter
/*------------------------------------------*/
public int getRundenNummer() {
return rundenNummer;
}
public void setRundenNummer(int rundenNummer) {
this.rundenNummer = rundenNummer;
}
/*------------------------------------------*/
// @Overrides
/*------------------------------------------*/
/*------------------------------------------*/
// öffentliche Methodes
/*------------------------------------------*/
public void addEintrag(Blockeintrag eintrag) {
if(eintraege != null){
eintraege.add(eintrag);
}
}
public Blockeintrag[] getDaten() {
return eintraege.toArray(new Blockeintrag[0]);
}
/*------------------------------------------*/
// Hilfsmethoden (privat)
/*------------------------------------------*/
public Blockeintrag[] getValidDaten() {
Blockeintrag[] dataArray = getDaten();
for (Blockeintrag eintrag : dataArray) {
if (eintrag == null) {
throw new IllegalStateException("Das Array ist leer");
}
}
return dataArray;
}
}

View File

@ -1,12 +0,0 @@
/*
============================================================
This is the "Blockeintrag" file from Author: Philipp Kotte
written on: 05 / 10 / 2023 at: 23:44
============================================================
*/
package Domain;
public class Blockeintrag {
public int punkte;
public int stiche;
}

View File

@ -1,25 +0,0 @@
/*
============================================================
This is the "Blockzeile" file from Author: Philipp Kotte
written on: 05 / 10 / 2023 at: 23:44
============================================================
*/
package Domain;
public class Blockzeile {
public int rundenNummer;
public Blockzeile(int rundenNummer) {
this.rundenNummer = rundenNummer;
}
public void addEintrag(Blockeintrag be) {
// TODO: Implementation
};
public Blockeintrag[] getDaten() {
// TODO: Implementation
return new Blockeintrag[0];
}
}

View File

@ -7,6 +7,6 @@ written on: 05 / 10 / 2023 at: 23:31
package Domain.Enums; package Domain.Enums;
public enum Geschlecht { public enum Geschlecht {
KI, M, W, D;
M, W, D, KI;
} }

View File

@ -8,15 +8,21 @@ package Domain.Enums;
public enum Kartenfarbe { public enum Kartenfarbe {
MENSCH("BLAU"), ELF("GRÜN"), ZWERG("ROT"), RIESE("GELG"); MENSCH("BLAU"), ZWERG("ROT"), ELF("GRÜN"), RIESE("GELB");
private String farbe; private String farbe;
Kartenfarbe(String farbe) { private Kartenfarbe(String farbe) {
this.farbe = farbe; this.farbe = farbe;
} }
public String getFarbe() { public String getFarbe() {
return this.farbe; return farbe;
} }
@Override
public String toString() {
return getFarbe();
}
} }

View File

@ -0,0 +1,13 @@
/*
============================================================
This is the "EmptyListException" file from Author: Philipp Kotte
written on: 16 / 10 / 2023 at: 07:54
============================================================
*/
package Domain.Exceptions;
public class EmptyListException extends SpielException {
public EmptyListException(String message) {
super(10, message);
}
}

View File

@ -0,0 +1,65 @@
/*
============================================================
This is the "SpielException" file from Author: Philipp Kotte
written on: 16 / 10 / 2023 at: 07:42
============================================================
*/
package Domain.Exceptions;
public abstract class SpielException extends Exception {
/*------------------------------------------*/
// statische Konstanten
/*------------------------------------------*/
/*------------------------------------------*/
// statische Attribute(zB. zähler)
/*------------------------------------------*/
/*------------------------------------------*/
// Attribute jedes Objektes
/*------------------------------------------*/
private String message;
private int id;
/*------------------------------------------*/
// Konstruktoren (default und spezifische)
/*------------------------------------------*/
public SpielException() {
}
public SpielException(int id, String message) {
}
public SpielException(String message) {
}
/*------------------------------------------*/
// statische Methoden
/*------------------------------------------*/
/*------------------------------------------*/
// Getter und Setter
/*------------------------------------------*/
/*------------------------------------------*/
// @Overrides
/*------------------------------------------*/
public String getMessage() {
return this.message;
}
public int getID() {
return this.id;
}
/*------------------------------------------*/
// öffentliche Methodes
/*------------------------------------------*/
/*------------------------------------------*/
// Hilfsmethoden (privat)
/*------------------------------------------*/
}

View File

@ -0,0 +1,15 @@
/*
============================================================
This is the "SpielerNotFoundException" file from Author: Philipp Kotte
written on: 16 / 10 / 2023 at: 07:50
============================================================
*/
package Domain.Exceptions;
public class SpielerNotFoundException extends SpielException {
public SpielerNotFoundException(String message) {
super(1, message);
}
}

View File

@ -1,65 +0,0 @@
package Domain;
import Domain.Karten.Karte;
public class Hand {
// Statische Konstanten
// Statische Attribute
// Attribute der Objekte
private Karte[] aktuelleHand;
// Konstruktoren
public Hand(int runde) {
setAktuelleHand(runde);
}
// Statische Methoden
// Getter und Setter
public Karte[] getAktuelleHand() {
return this.aktuelleHand;
}
private void setAktuelleHand(int runde) {
this.aktuelleHand = new Karte[runde];
}
// Overrides
@Override
public String toString() {
return "";
}
// Public Methoden
/**
* Zeigt die aktuelle Hand des Spielers an
* @return
*/
public Karte[] zeigeHand() {
return this.aktuelleHand;
}
/**
* Zeigt die höchste Karte auf der Hand des Spielers an
* @return
*/
public Karte höchsteKarte() {
return null;
}
/**
* Zeigt die niedrigste Karte auf der Hand des Spielers an
* @return
*/
public Karte niedrigsteKarte() {
return null;
}
/**
* Ermöglicht die Auswahl einer Karte, die der Spieler
* ausspielen möchte
* @return
*/
public Karte karteAuswählen() {
return null;
}
// Private Methoden
}

View File

@ -11,40 +11,29 @@ public abstract class Karte {
// Statische Konstanten // Statische Konstanten
// Statische Attribute // Statische Attribute
private static int kartenId = 0; private int id;
// Attribute des Ojektes
// Attribute der Objekte (Kann es keine geben, da die Klasse abstrakt ist)
// Konstruktoren // Konstruktoren
public Karte() { public Karte() {
if (kartenId <= 60) {
setKartenId();
}
else {
throw new RuntimeException("Es darf nur 60 Karten im Spiel geben.");
}
} }
public Karte(int id) {
this.id = id;
}
// Statische Methoden // Statische Methoden
public static int getKartenId() {
return kartenId; // Getter und Setter
public int getId() {
return this.id;
} }
public static void setKartenId() { // @Overrides
kartenId++;
}
// Getter und Setter (Kann es auch keine geben)
// Overrides
@Override
public abstract String toString();
// Public Methoden
// Private Methoden
// Public Methoden (öffentliche Methoden)
// Private Methoden (Hilfsmethoden)
} }

View File

@ -6,57 +6,50 @@ written on: 05 / 10 / 2023 at: 23:41
*/ */
package Domain.Karten; package Domain.Karten;
import Domain.Enums.Kartenfarbe;
public class Magierkarte extends Karte { public class Magierkarte extends Karte {
// Statische Konstanten // Statische Konstanten
private static String TRUMPF_NAME = "Zauberer"; private final static String NAME = "Zauberer";
// Statische Attribute // Statische Attribute
private static int mkAnzahl = 1; // mk = magierkarte
// Attribute der Objekte // Attribute des Objekts
private String name; private String name;
// Konstruktoren // Konstruktoren
public Magierkarte() {
super(); public Magierkarte(int id) {
if (getMkAnzahl() <= 4) { super(id);
setName(TRUMPF_NAME); setName();
setMkAnzahl();
}
else {
throw new RuntimeException("Es darf nur 4 Zaubererkarten im Spiel geben.");
}
} }
// Statischen Methoden // Statische Methoden
// Getter und Setter // Getter und Setter
public int getMkAnzahl() { public int getId() {
return mkAnzahl; return super.getId();
} }
public void setMkAnzahl() { private void setName() {
mkAnzahl++; this.name = NAME;
} }
public String getName() { public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// Overrides
@Override
public String toString() {
return this.name; return this.name;
} }
// public Methoden
// private Methoden // @Overrides
@Override
public String toString() {
return "ID " + this.getId() + ": " + this.getName();
}
// Public Methoden
// Private Methoden
} }

View File

@ -6,45 +6,48 @@ written on: 05 / 10 / 2023 at: 23:41
*/ */
package Domain.Karten; package Domain.Karten;
import Domain.Enums.Kartenfarbe;
public class Narrenkarte extends Karte { public class Narrenkarte extends Karte {
// Statische Konstanten // Statische Konstanten
private final static String KARTE_NAME = "Narr"; private final static String NAME = "Narr";
// Statische Attribute // Statische Attribute
private static int nkAnzahl = 1;
// Attribute der Objekte // Attribute des Objekts
private String name; private String name;
// Konstruktoren // Konstruktoren
public Narrenkarte() {
super(); public Narrenkarte(int id) {
if (getNkAnzahl() <= 4) { super(id);
setName(KARTE_NAME); setName();
setNkAnzahl();
}
else {
throw new RuntimeException("Es darf nur 4 Narrenkarten im Spiel geben.");
}
} }
// Statische Methoden // Statische Methoden
// Getter und Setter // Getter und Setter
private void setName(String name) {
this.name = name; public int getId() {
return super.getId();
} }
private void setName() {
this.name = NAME;
}
public String getName() { public String getName() {
return this.name; return this.name;
} }
private void setNkAnzahl() { public void setNarrenkarteanzahl(int narrenkarteanzahl) {
nkAnzahl++; narrenkarteanzahl++;
} }
public int getNkAnzahl() {
return nkAnzahl; // @Overrides
}
// Overrides
@Override @Override
public String toString() { public String toString() {
return this.name; return "ID " + this.getId() + ": " + this.getName();
} }
// Public Methoden // Public Methoden

View File

@ -10,93 +10,71 @@ import Domain.Enums.Kartenfarbe;
public class Zahlenkarte extends Karte { public class Zahlenkarte extends Karte {
// Statische Konstanten /*------------------------------------------*/
private final static String NAME = "Charakterkarte"; // statische Konstanten
// Statische Attribute /*------------------------------------------*/
private static int menschID = 1;
private static int elfID = 1;
private static int rieseID = 1;
private static int zwergID = 1;
// Attribute der Objekte
private int kartenwert;
private Kartenfarbe charakter;
private String name;
// Konstruktoren
public Zahlenkarte(Kartenfarbe farbe) { /*------------------------------------------*/
super(); // statische Attribute(zB. zähler)
if (farbe == Kartenfarbe.MENSCH && menschID <=13) { /*------------------------------------------*/
setNeueMenschKarte(farbe);
} /*------------------------------------------*/
else if (farbe == Kartenfarbe.ELF && elfID <= 13) { // Attribute jedes Objektes
setNeueElfKarte(farbe); /*------------------------------------------*/
} private Kartenfarbe farbe;
else if (farbe == Kartenfarbe.RIESE && rieseID <= 13) { private int kartenNummer;
setNeueRieseKarte(farbe);
} /*------------------------------------------*/
else if (farbe == Kartenfarbe.ZWERG && zwergID <= 13) { // Konstruktoren (default und spezifische)
setNeueZwergKarte(farbe); /*------------------------------------------*/
} public Zahlenkarte(int id) {
else { super(id);
throw new RuntimeException("Es darf von jedem Charakter nur 13 Karten im Spiel geben.");
}
} }
// Statische Methoden
public Zahlenkarte(int id, Kartenfarbe farbe, int kartenNummer) {
super(id);
setFarbe(farbe);
setKartenNummer(kartenNummer);
}
/*------------------------------------------*/
// statische Methoden
/*------------------------------------------*/
/*------------------------------------------*/
// Getter und Setter // Getter und Setter
public int getKartenwert() { /*------------------------------------------*/
return kartenwert;
public int getId() {
return super.getId();
} }
public void setKartenwert(int kartenwert) { public void setFarbe(Kartenfarbe farbe) {
this.kartenwert = kartenwert; this.farbe = farbe;
} }
public Kartenfarbe getCharakter() { public Kartenfarbe getFarbe() {
return charakter; return farbe;
} }
public void setCharakter(Kartenfarbe charakter) { public void setKartenNummer(int kartenNummer) {
this.charakter = charakter; this.kartenNummer = kartenNummer;
} }
public void setName() { public int getKartenNummer() {
this.name = NAME; return kartenNummer;
}
// Overrides
@Override
public String toString() {
return this.name + " " + this.charakter + " " + this.kartenwert;
}
// Public Methoden
// Private Methoden
private void setNeueMenschKarte(Kartenfarbe farbe) {
setCharakter(farbe);
setKartenwert(menschID);
setName();
menschID++;
} }
private void setNeueElfKarte(Kartenfarbe farbe) { /*------------------------------------------*/
setCharakter(farbe); // @Overrides
setKartenwert(elfID); /*------------------------------------------*/
setName();
elfID++;
}
private void setNeueRieseKarte(Kartenfarbe farbe) { /*------------------------------------------*/
setCharakter(farbe); // öffentliche Methodes
setKartenwert(rieseID); /*------------------------------------------*/
setName();
rieseID++;
}
private void setNeueZwergKarte(Kartenfarbe farbe) { /*------------------------------------------*/
setCharakter(farbe); // Hilfsmethoden (privat)
setKartenwert(zwergID); /*------------------------------------------*/
setName();
zwergID++;
}
} }

View File

@ -8,16 +8,12 @@ package Domain;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.HashMap;
import Domain.Enums.Kartenfarbe; import Domain.Enums.Kartenfarbe;
import Domain.Karten.Karte; import Domain.Karten.*;
import Domain.Karten.Magierkarte;
import Domain.Karten.Narrenkarte;
import Domain.Karten.Zahlenkarte;
import Facade.Spiel;
public class Kartenstapel { public class Kartenstapel {
@ -37,33 +33,33 @@ public class Kartenstapel {
// Konstruktoren // Konstruktoren
public Kartenstapel() { public Kartenstapel() {
if (Karte.getKartenId() != 60) { kartensortiert.clear();
// Erstelle Magierkarten // Erstelle Magierkarten
for (int i = 1; i <= 4; i++) { for (int i = 1; i <= 4; i++) {
kartensortiert.put(i, new Magierkarte()); kartensortiert.put(i, new Magierkarte(i));
}
// Erstelle Narrenkarten
for (int i = 5; i <= 8; i++) {
kartensortiert.put(i, new Narrenkarte());
}
// Erstelle Charakterkarten MENSCH
for (int i = 9; i <= 21; i++) {
kartensortiert.put(i, new Zahlenkarte(Kartenfarbe.MENSCH));
}
// Erstelle Charakterkarten ELF
for (int i = 22; i <= 34; i++) {
kartensortiert.put(i, new Zahlenkarte(Kartenfarbe.ELF));
}
// Erstelle Charakterkarten RIESE
for (int i = 35; i <= 47; i++) {
kartensortiert.put(i, new Zahlenkarte(Kartenfarbe.RIESE));
}
// Erstelle Charakterkarten ZWERG
for (int i = 48; i <= 60; i++) {
kartensortiert.put(i, new Zahlenkarte(Kartenfarbe.ZWERG));
}
} }
// Erstelle Narrenkarten
for (int i = 5; i <= 8; i++) {
kartensortiert.put(i, new Narrenkarte(i));
}
// Erstelle Charakterkarten MENSCH
for (int i = 9; i <= 21; i++) {
kartensortiert.put(i, new Zahlenkarte(i, Kartenfarbe.MENSCH, i - 8));
}
// Erstelle Charakterkarten ELF
for (int i = 22; i <= 34; i++) {
kartensortiert.put(i, new Zahlenkarte(i, Kartenfarbe.ELF, i - 21));
}
// Erstelle Charakterkarten RIESE
for (int i = 35; i <= 47; i++) {
kartensortiert.put(i, new Zahlenkarte(i, Kartenfarbe.RIESE, i - 34));
}
// Erstelle Charakterkarten ZWERG
for (int i = 48; i <= 60; i++) {
kartensortiert.put(i, new Zahlenkarte(i, Kartenfarbe.ZWERG, i - 47));
}
} }
// Statische Methoden // Statische Methoden
@ -124,6 +120,10 @@ public class Kartenstapel {
kartengemischt.put(i + 1, kartensortiert.get(schlüsselzahl)); kartengemischt.put(i + 1, kartensortiert.get(schlüsselzahl));
zahlen.remove(index); zahlen.remove(index);
} }
for(Karte k : kartengemischt.values()) {
System.out.println(k.toString());
}
} }
/** /**
@ -132,26 +132,13 @@ public class Kartenstapel {
* falls noch eine Karte auf dem Stapel liegen sollte. Hierzu wird die Runde, * falls noch eine Karte auf dem Stapel liegen sollte. Hierzu wird die Runde,
* als Ausgangswert genommen. * als Ausgangswert genommen.
*/ */
public Karte getObersteKarte() { public Object getObersteKarte() {
// Todo: Nur für den Trumpf Object k = kartengemischt.values().toArray()[0];
Karte austeilen = null; kartengemischt.remove(k);
if (kartengemischt.get(kartenzählen) != null && kartenzählen <= 60) { return k;
austeilen = kartengemischt.get(kartenzählen);
kartengemischt.remove(kartenzählen);
kartenzählen++;
}
else if (kartenzählen > 60) {
throw new RuntimeException("Es können nicht mehr als 60 Karten ausgeteilt werden.");
}
else {
throw new RuntimeException("Es ist ein Fehler in 'Kartenzählen' aufgetaucht.");
}
return austeilen;
} }
/** /**
* *
*/ */

View File

@ -6,114 +6,185 @@ written on: 05 / 10 / 2023 at: 23:48
*/ */
package Domain; package Domain;
import java.io.Serializable;
import Domain.Enums.Geschlecht; import Domain.Enums.Geschlecht;
public class Spieler implements Serializable{ import java.io.Serializable;
// Statische Konstanten public class Spieler extends Object implements Serializable {
private final static String BOTNAME = "Spieler (KI): "; // KI erhält einen konstanten Namen + id(zähler)
// Statische Attribute /*------------------------------------------*/
private static int id = 1; // Interner Zähler für Prüfung max Spieler und für Name KI(BOTNAME + id) // statische Konstanten
// Attribute der Objekte /*------------------------------------------*/
private int spielerID; // Feste SpielerID zur Festlegung der Ref-Variablen
private String name; // Name eines Spielers oder fester Name falls Geschlecht.KI /*------------------------------------------*/
private Geschlecht geschlecht; // statische Attribute(zB. zähler)
private Hand hand; /*------------------------------------------*/
/*------------------------------------------*/
// Attribute jedes Objektes
/*------------------------------------------*/
private int id = 0;
private String name;
private int vorhersage; private int vorhersage;
// Konstruktoren private Geschlecht geschlecht;
//
/*------------------------------------------*/
// Konstruktoren (default und spezifische)
/*------------------------------------------*/
// Default
/** /**
* Die Prüfung, ob der @param name leer ist, muss in der Klasse Spiel erfolgen. * Default Konstruktor des Spieler - Klasse
* Es wird der @param id noch zusätzlich geprüft.
* @param geschlecht wird übergeben, als MinAnforderung
*/ */
public Spieler(Geschlecht geschlecht) { public Spieler() {
if (id <= 6) {
if (geschlecht != Geschlecht.KI) {
setGeschlecht(geschlecht);
setVorhersage(0);
setHand(0);
setSpielerID(id);
}
else {
setNeuerBot(geschlecht);
}
}
else {
throw new RuntimeException("Es kann nur max 6 Spieler pro Spiel geben.");
}
} }
/**
* Der Konstruktor prüft die Länge des @param name ob mehr als zwei
* Zeichen übergeben wurden. Geschlecht wird mit @code this(geschlecht) an
* den oberen Konstruktor übergeben.
* @param geschlecht
* @param name
*/
public Spieler(Geschlecht geschlecht, String name) {
this(geschlecht); // Frage: Wird hier (auch wenn Folgebedingung nicht erfüllt) ein Bot angelegt?
if (name.length() < 3) {
throw new RuntimeException("Der Spielername muss min. 3 Zeichen lang sein.");
}
else {
setName(name);
}
}
// Statische Methoden
/**
* Konstruktor des Spieler - Klasse mit den Werten id, name und geschlecht
*
* @param id int
* @param name String
* @param geschlecht Geschlecht
*/
public Spieler(int id, String name, Geschlecht geschlecht) {
this();
if (id < 6) {
setId(id);
} else {
throw new RuntimeException("Es darf nur max 6 Spieler geben.");
}
if (geschlecht == Geschlecht.KI) {
setName(name); // Bei KI wird kein Name gesetzt. name = leerer String
} else if (name.length() > 2) {
setName(name); // Es wird geprüft, ob Name größer 2 Zeichen
} else {
throw new RuntimeException("Der Name muss länger als 2 Buchstaben sein.");
}
setGeschlecht(geschlecht);
}
/**
* Konstruktor des Spieler - Klasse mit den Werten id, name, geschlecht und
* Vorhersage
*
* @param id int
* @param name String
* @param geschlecht Geschlecht
* @param vorhersage int
*/
public Spieler(int id, String name, Geschlecht geschlecht, int vorhersage) {
this(id, name, geschlecht);
setVorhersage(vorhersage);
}
/*------------------------------------------*/
// statische Methoden
/*------------------------------------------*/
/*------------------------------------------*/
// Getter und Setter // Getter und Setter
public void setGeschlecht(Geschlecht geschlecht) { /*------------------------------------------*/
this.geschlecht = geschlecht; // id
} /**
public Geschlecht getGeschlecht() { * Setzt die ID des Spielers
return this.geschlecht; *
* @param int id
*/
private void setId(int id) {
this.id = id;
} }
/**
* Gibt die ID des Spielers zurück
*
* @return int id
*/
public int getId() {
return id;
}
// name
/**
* Setzt den Namen des Spielers
*
* @param String name
*/
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
/**
* Gibt den Namen des Spielers zurück
*
* @return String name
*/
public String getName() { public String getName() {
return this.name; return this.name;
} }
// geschlecht
/**
* Setzt das Geschlecht des Spielers wie definiert in
* {@link Domain.Enums.Geschlecht}
*
* @param geschlecht
*/
public void setGeschlecht(Geschlecht geschlecht) {
this.geschlecht = geschlecht;
}
/**
* Gibt das Geschlecht des Spielers zurück wie definiert in
* {@link Domain.Enums.Geschlecht}
*
* @return
*/
public Geschlecht getGeschlecht() {
return geschlecht;
}
// vorhersage
/**
* Setzt die Vorhersage des Spielers
*
* @param int vorhersage
*/
public void setVorhersage(int vorhersage) { public void setVorhersage(int vorhersage) {
this.vorhersage = vorhersage; this.vorhersage = vorhersage;
} }
/**
* Gibt die Vorhersage von dem Spieler zurück
*
* @return int vorhersage
*/
public int getVorhersage() { public int getVorhersage() {
return this.vorhersage; return vorhersage;
} }
public void setSpielerID(int id) { /*------------------------------------------*/
this.spielerID = id; // @Overrides
setId(); /*------------------------------------------*/
}
public int getSpielerID() {
return this.spielerID;
}
public void setHand(int runde) {
this.hand = new Hand(runde);
}
public Hand getHand() {
return this.hand;
}
// Overrides
// Public Methoden /**
* Überschreibt die toString methode für eine eigene Implementation um den
// Private Methoden * Spieler als String zurück zu geben
private void setNeuerBot(Geschlecht geschlecht) { *
this.spielerID = id; * @return ID: "id" Name: "name" ("geschlecht")
this.name = BOTNAME + " " + id; *
this.geschlecht = geschlecht; */
setVorhersage(0); // Nicht zwingend notwendig, aber dient @Override
setHand(0); // der Übersicht aller Attribute. public String toString() {
setId(); return "ID: " + this.id + " Name: " + this.name + " (" + this.geschlecht + ")";
} }
private void setId() { /*------------------------------------------*/
id++; // öffentliche Methodes
/*------------------------------------------*/
/*------------------------------------------*/
// Hilfsmethoden (privat)
/*------------------------------------------*/
}
} }

82
Domain/Stich.java 100644
View File

@ -0,0 +1,82 @@
/*
============================================================
This is the "Stich" file from Author: Philipp Kotte
written on: 11 / 10 / 2023 at: 20:25
============================================================
*/
package Domain;
import Domain.Karten.Karte;
public class Stich {
/*------------------------------------------*/
// statische Konstanten
/*------------------------------------------*/
/*------------------------------------------*/
// statische Attribute(zB. zähler)
/*------------------------------------------*/
/*------------------------------------------*/
// Attribute jedes Objektes
/*------------------------------------------*/
private Karte[] karten;
private int[] spielerID;
private int kartenCount = 0;
/*------------------------------------------*/
// Konstruktoren (default und spezifische)
/*------------------------------------------*/
public Stich() {
}
public Stich(int spielerAnzahl) {
setSpielerAnzahl(spielerAnzahl);
}
/*------------------------------------------*/
// statische Methoden
/*------------------------------------------*/
/*------------------------------------------*/
// Getter und Setter
/*------------------------------------------*/
public void setSpielerAnzahl(int spielerAnzahl) {
this.karten = new Karte[spielerAnzahl];
this.spielerID = new int[spielerAnzahl];
}
public Karte[] getKarten() {
return this.karten;
}
public void addKarte(int spielerID, Karte karte) {
this.karten[kartenCount] = karte;
this.spielerID[kartenCount] = spielerID;
kartenCount++;
}
/*------------------------------------------*/
// @Overrides
/*------------------------------------------*/
@Override
public String toString() {
String text = "";
for (int i = 0; i < this.karten.length; i++) {
text += this.karten[i].toString();
}
return text;
}
/*------------------------------------------*/
// öffentliche Methodes
/*------------------------------------------*/
/*------------------------------------------*/
// Hilfsmethoden (privat)
/*------------------------------------------*/
}

View File

@ -6,53 +6,259 @@ written on: 05 / 10 / 2023 at: 23:25
*/ */
package Facade; package Facade;
import java.io.Serializable;
import java.util.HashMap;
import Domain.Kartenstapel;
import Domain.Spieler; import Domain.Spieler;
import Domain.Stich;
import Domain.Block.Block;
import Domain.Enums.Geschlecht;
import Domain.Exceptions.EmptyListException;
import Domain.Exceptions.SpielerNotFoundException;
import Domain.Karten.Karte;
public class Spiel { public class Spiel implements Serializable {
// Statische Konstanten /*--------------------------------------------------------*/
// statische Konstanten
/*--------------------------------------------------------*/
// Statische Attribute private static final String ANSI_RESET = "\u001B[0m";
private static int runde = 0; private static final String ANSI_GREEN = "\u001B[32m";
private static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_BLUE = "\u001B[34m";
// Attribute der Objekte /*--------------------------------------------------------*/
private Spieler spielerAmZug; // statische Attribute(zB. zähler)
private boolean istGestartet = false; /*--------------------------------------------------------*/
private boolean istBeendet = true;
// Konstruktoren
public Spiel() {
setRunde();
setIstGestartet(true);
setIstBeendet(false);
}
// Statische Methoden
public static int getRunde() {
return runde;
}
// Getter und Setter
public void setIstGestartet(boolean wert) {
this.istGestartet = wert;
}
public boolean getIstGestartet() {
return this.istGestartet;
}
public void setIstBeendet(boolean wert) {
this.istBeendet = wert;
}
public boolean getIstBeendet() {
return istBeendet;
}
public Spieler getSpielerAmZug() {
return spielerAmZug;
}
// Overrides
// Public Methoden /*--------------------------------------------------------*/
// Attribute jedes Objektes
/*--------------------------------------------------------*/
// Private Methoden private boolean istGestartet;
private void setRunde() { private boolean istBeendet;
runde++; private Spieler spielerAmZug;
} private int runde;
private HashMap<Integer, Spieler> spieler = new HashMap<>();
private HashMap<Integer, Stich> stiche = new HashMap<>();
private boolean[] id_check = { false, false, false, false, false, false };
private Kartenstapel kartenstapel;
private Block block;
/*--------------------------------------------------------*/
// Konstruktoren (default und spezifische)
/*--------------------------------------------------------*/
public Spiel() {
this.istGestartet = false;
this.istBeendet = false;
this.spielerAmZug = null;
this.runde = 0;
this.kartenstapel = new Kartenstapel();
};
/*--------------------------------------------------------*/
// statische Methoden
/*--------------------------------------------------------*/
/*--------------------------------------------------------*/
// Getter und Setter
/*--------------------------------------------------------*/
public void setSpielGestartet(boolean gestarted) {
this.istGestartet = gestarted;
}
public void setSpielBeendet(boolean beendet) {
this.istBeendet = beendet;
}
public void setRunde(int runde) {
this.runde = runde;
}
public void setSpielerAmZug(Spieler spieler) {
this.spielerAmZug = spieler;
}
/*--------------------------------------------------------*/
// @Overrides
/*--------------------------------------------------------*/
@Override
public String toString() {
String text = "\n";
String header = "Systemausgabe--------------------------------\n";
String footer = "---------------------------------------------\n";
text += header;
text += "Runde: " + getRunde() + "\n";
text += "Gestartet : " + (istSpielGestartet() ? "Ja " : "Nein ") + "\n";
text += "Beendet: " + (istSpielBeendet() ? "Ja" : "Nein") + "\n";
text += "Spieler am Zug: "
+ (this.spielerAmZug == null ? "Noch keine Spieler vorhanden" : this.spielerAmZug.getName()) + "\n";
if (this.spieler.size() == 0) {
text += "Noch keine Spieler vorhanden \n";
} else {
for (Spieler s : this.spieler.values()) {
text += "[" + s.getId() + "] " + s.getName() + " ("
+ s.getGeschlecht() + ")" + "\n";
}
}
for (int i = 0; i < this.id_check.length; i++) {
if (this.id_check[i]) {
text += "idcheck" + ANSI_BLUE + " [" + i + "] " + ANSI_GREEN + this.id_check[i] + ANSI_RESET + " \n";
} else {
text += "idcheck" + ANSI_BLUE + " [" + i + "] " + ANSI_RED + this.id_check[i] + ANSI_RESET + " \n";
}
}
text += footer;
return text;
}
/*--------------------------------------------------------*/
// öffentliche Methodes
/*--------------------------------------------------------*/
public void addSpieler(String name, Geschlecht geschlecht) {
int id = 1;
while (id_check[id - 1]) {
id++;
}
id_check[id - 1] = true;
Spieler temp = new Spieler(id, name, geschlecht);
this.spieler.put(id, temp);
System.out.println(this.spieler.get(id));
if (this.spielerAmZug == null) {
this.spielerAmZug = temp;
}
updateSpielerAmZug();
}
public void removeSpieler(int id_spieler) throws SpielerNotFoundException, EmptyListException, RuntimeException {
if (this.spieler.containsKey(id_spieler)) {
this.spieler.remove(id_spieler);
this.id_check[id_spieler - 1] = false;
} else if (!this.spieler.containsKey(id_spieler)) {
throw new SpielerNotFoundException("Dieser Spieler existiert nicht");
} else if (this.spieler.values().size() == 0) {
throw new EmptyListException("Dise Liste ist Leer.");
} else {
throw new RuntimeException("Unkown Error");
}
updateSpielerAmZug();
}
public String[] getAlleSpieler() {
String[] spieler_text = new String[this.spieler.size()];
int zähler = 0;
for (Spieler s : this.spieler.values()) {
spieler_text[zähler] = s.toString();
zähler++;
}
return spieler_text;
}
public void starteSpiel() {
// sing genügend Spieler angelegt?
if (this.spieler.size() >= 3 && this.spieler.size() <= 6) {
this.istGestartet = true;
while (!this.istSpielBeendet()) {
System.out.println("Das Spiel wurde gestartet.");
// Beginn der Runde
// Stiche erstellen
erstelleStiche(this.runde);
// Karten für jeden Spieler verteilen
// While loop mit der länge der anzahl Stiche für die jeweilige Runde
// Für jeden Durchgang des Loops wird der Stich ermittelt
// Wer gewonnen hat wird dann der Stich zugeordnet
// prüfen ob das Spiel zuende ist
// Der Spieler der jetzt am Zug ist, ist der der den letzten Stich gewonne hat
// Runde erhöhen
runde++;
}
} else {
System.out.println("Es fehlen " + (3 - this.spieler.size()) + " spieler");
}
}
public String[] getSpielerAmZug() {
return new String[1];
}
public boolean istSpielGestartet() {
return this.istGestartet;
}
public boolean istSpielBeendet() {
return this.istBeendet;
}
public String[][] getBlock() {
return new String[0][0];
}
public String getGewinner() {
return "";
}
public int getRunde() {
return this.runde;
}
public void mischen() {
}
public void austeilen() {
// Spieler 1 bekommt karten
// Spieler 2 bekommt Karten
// ...
// letzer Spieler bekommt Karten
}
public void ausspielen(int idKarte) {
}
public void vorhersagen(int stiche) {
}
/*--------------------------------------------------------*/
// Hilfsmethoden (privat)
/*--------------------------------------------------------*/
private void erstelleStiche(int runde) {
for (int i = 0; i < runde; i++) {
this.stiche.put(i + 1, new Stich(this.spieler.size()));
}
}
private void ermittleGewinner(Stich stich) {
stich.getKarten();
}
private void updateSpielerAmZug() {
if (this.spieler.size() >= 1) {
this.spielerAmZug = (Spieler) this.spieler.values().toArray()[0];
} else {
this.spielerAmZug = null;
}
}
} }

View File

@ -6,7 +6,69 @@ written on: 05 / 10 / 2023 at: 23:25
*/ */
package Infrastructure; package Infrastructure;
import Facade.Spiel;
import java.io.*;
public class Persistenz { public class Persistenz {
/*------------------------------------------*/
// statische Konstanten
/*------------------------------------------*/
/*------------------------------------------*/
// statische Attribute(zB. zähler)
/*------------------------------------------*/
final static String FILE_NAME = "WIZARD_DATA_";
/*------------------------------------------*/
// Attribute jedes Objektes
/*------------------------------------------*/
/*------------------------------------------*/
// Konstruktoren (default und spezifische)
/*------------------------------------------*/
/*------------------------------------------*/
// statische Methoden
/*------------------------------------------*/
public static boolean sindDatenVorhanden(String name) {
File f = new File(FILE_NAME + name + ".ser");
if (f.exists()) {
return true;
}
return false;
}
public static void speichereDaten(String name, Spiel spiel) throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME + name + ".ser"));
oos.writeObject(spiel);
oos.close();
}
public static Object ladeDaten(String name) throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME + name + ".ser"));
Object spiel = ois.readObject();
ois.close();
return spiel;
}
/*------------------------------------------*/
// Getter und Setter
/*------------------------------------------*/
/*------------------------------------------*/
// @Overrides
/*------------------------------------------*/
/*------------------------------------------*/
// öffentliche Methodes
/*------------------------------------------*/
/*------------------------------------------*/
// Hilfsmethoden (privat)
/*------------------------------------------*/
} }

43
Main.java 100644
View File

@ -0,0 +1,43 @@
import Facade.Spiel;
import Infrastructure.Persistenz;
import UI.SpielCLI;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
String name = "Wizard";
Spiel spiel = null;
if (Persistenz.sindDatenVorhanden(name)) {
try {
System.out.println("Lade daten");
spiel = (Spiel) Persistenz.ladeDaten(name);
System.out.println("laden erfolgreich");
} catch (IOException e) {
System.out.println("Konnte file nicht laden.");
System.out.println(e.getLocalizedMessage());
} catch (ClassNotFoundException cnfe) {
System.out.println("Konnte file nicht laden.");
System.out.println(cnfe.getLocalizedMessage());
} finally {
if (spiel == null) {
System.out.println("Initialisiere neues Spiel");
spiel = new Spiel();
}
}
} else {
spiel = new Spiel();
}
new SpielCLI(spiel);
try {
Persistenz.speichereDaten(name, spiel);
} catch (IOException e) {
System.out.println("Konnte Daten nicht speicher!");
}
}
}

View File

@ -9,6 +9,60 @@ Gruppe Studienleistung bereits vorhanden
- Mohammad Hawrami - Mohammad Hawrami
- Philipp Kotte - Philipp Kotte
## Dopatka Regeln wie Klassen anzulegen sind
### Aufbau
1. statische Konstante
2. statische Attribute(zB. zähler)
3. Attribute jedes Objektes
4. Konstruktoren (default und spezifische)
5. statische Methoden
6. Getter und Setter
7. @Overrides
8. öffentliche Methodes
9. Hilfsmethoden (privat)
### Template
```
/*------------------------------------------*/
// statische Konstanten
/*------------------------------------------*/
/*------------------------------------------*/
// statische Attribute(zB. zähler)
/*------------------------------------------*/
/*------------------------------------------*/
// Attribute jedes Objektes
/*------------------------------------------*/
/*------------------------------------------*/
// Konstruktoren (default und spezifische)
/*------------------------------------------*/
/*------------------------------------------*/
// statische Methoden
/*------------------------------------------*/
/*------------------------------------------*/
// Getter und Setter
/*------------------------------------------*/
/*------------------------------------------*/
// @Overrides
/*------------------------------------------*/
/*------------------------------------------*/
// öffentliche Methodes
/*------------------------------------------*/
/*------------------------------------------*/
// Hilfsmethoden (privat)
/*------------------------------------------*/
```
## Für das Arbeiten mit geschützten Mainbranch ## Für das Arbeiten mit geschützten Mainbranch
Wenn Änderungen durchgeführt werden müssen, kann dieses nicht direkt auf dem main-Branch gepusht werden sondern muss mit einem Separatem Branch und Pull-Request durchgeführt werden. Wenn Änderungen durchgeführt werden müssen, kann dieses nicht direkt auf dem main-Branch gepusht werden sondern muss mit einem Separatem Branch und Pull-Request durchgeführt werden.
@ -34,3 +88,29 @@ Besonders wenn eine Weile an dem Feature Branch gearbeitet wurde, können bereit
Danach damit wir alle die Changes mitbekommen muss ein Pull Request auf Gitea gestellt werden. Danach damit wir alle die Changes mitbekommen muss ein Pull Request auf Gitea gestellt werden.
Im zuge dessen findet eine Code Review von einem beliebigen Teammitglied statt, damit dieser frei gegeben werden kann. Im zuge dessen findet eine Code Review von einem beliebigen Teammitglied statt, damit dieser frei gegeben werden kann.
## Anmerkungen von Dopatka im Forum
### Kartenstapel
1. [ ] Die Methode getObsersteKarte soll nur den wert zurückgeben, diese aber nicht ziehen
2. [ ] Die Methode mischen() kann gelöscht werden da die Spieler keine möglichkeit haben sollen dies selbst anzustoßen. Vorschlag -> wir behalten sie als private und rufen sie an der benötigten Stele auf
### Karten
1. [ ] Magierkarte wurde zu Zaubererkarte umbenannt
### Spieler
1. [ ] Speicherung der Karten des Spieler in der Klasse Spieler
2. [ ] Die Namen der Spieler müssen mindestens 3 und dürfen maximal 9 Zeichen lang sein a-z A-Z 0-9 -\_
### Spiel
1. [ ] Die Methode getSpielerAmZug(): String[] soll einen Spieler mit all seinen Daten representieren und alle Daten des Spielers zurückgeben
2. [ ] Es dürfen während des Spiels keine Spieler gelsöscht oder hinzugfügt werden
### Allgemein
1. [ ] toString methode für jede Klasse

29
RendomTest.java 100644
View File

@ -0,0 +1,29 @@
/*
============================================================
This is the "RendomTest" file from Author: Philipp Kotte
written on: 20 / 10 / 2023 at: 08:26
============================================================
*/
import java.util.Random;
public class RendomTest {
// ----------------------------- Spiel
// ausspiele(int Kartenid){
// Karte temp = Spieler.getKarte(id)
// Stich.add(spielerAmZug.getId(), temp);
// }
// ------------------------------Stich
// Trumpf: Mensch
// spielerID: [3, 4, 1, 2]
// Karten: [Zwerg 4, Magier, narr, Magie]
//
// wo sind magier, false, true
// Karte -> Karten[1]
// Spieler -> spielerID[1]
//
// private void add(int Spielerid, int Kartenid){}
// spieler
}

BIN
Test/.DS_Store vendored 100644

Binary file not shown.

View File

@ -0,0 +1,101 @@
/*
============================================================
This is the "BlockTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 21:17
============================================================
*/
package Test.Domain.Block;
import Domain.Block.Block;
import Domain.Block.Blockeintrag;
import Domain.Block.Blockzeile;
import Domain.Enums.Geschlecht;
import Facade.Spiel;
import org.junit.Test;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;
public class BlockTest {
Block block = new Block();
Blockeintrag b1 = new Blockeintrag(20,0,null);
Blockeintrag b2 = new Blockeintrag(30,1,null);
Blockeintrag b3 = new Blockeintrag(40,2,null);
Blockeintrag b4 = new Blockeintrag(20,0,null);
Blockeintrag b5 = new Blockeintrag(30,1,null);
Blockeintrag b6 = new Blockeintrag(40,2,null);
Blockzeile z1 = new Blockzeile(1,b1);
Blockzeile z2 = new Blockzeile(2,b2);
Blockzeile z3 = new Blockzeile(3, b3);
Blockzeile z4 = new Blockzeile(1,b1);
Blockzeile z5 = new Blockzeile(2,b2);
Blockzeile z6 = new Blockzeile(3, b3);
/**
* Testet die Methode addZeile in der Block-Klasse.
* Überprüft, ob die Anzahl der Zeilen im Block nach dem Hinzufügen korrekt ist
* und ob die hinzugefügte Zeile an der richtigen Position im Datenarray steht.
*/
@Test
public void addZeileTest() {
block.addZeile(z1);
block.addZeile(z2);
block.addZeile(z3);
z1.addEintrag(b1);
z1.addEintrag(b2);
z1.addEintrag(b3);
z2.addEintrag(b1);
z2.addEintrag(b2);
z2.addEintrag(b3);
z3.addEintrag(b1);
z3.addEintrag(b2);
z3.addEintrag(b3);
assertEquals(3,block.getDaten().length);
assertTrue((z1 == block.getDaten()[0]) &&
(z2 == block.getDaten()[1]) && (z3 == block.getDaten()[2]));
}
/**
* Testet die Methode getDaten der Klasse Block. Überprüft, ob die Daten im
* Block korrekt abgerufen werden können.
*/
@Test
public void getDatenTest() {
block.addZeile(z4);
block.addZeile(z5);
block.addZeile(z6);
z1.addEintrag(b4);
z1.addEintrag(b5);
z1.addEintrag(b6);
z2.addEintrag(b4);
z2.addEintrag(b5);
z2.addEintrag(b6);
z3.addEintrag(b4);
z3.addEintrag(b5);
z3.addEintrag(b6);
assertTrue((block.getDaten()[0].getDaten()[0].getPunkte() ==20)
&& (block.getDaten()[0].getDaten()[0].getStiche() == 0)
&& (block.getDaten()[1].getDaten()[0].getPunkte() == 30)
&& (block.getDaten()[1].getDaten()[0].getStiche() == 1)
&& (block.getDaten()[2].getDaten()[0].getPunkte() == 40)
&& (block.getDaten()[2].getDaten()[0].getStiche() == 2));
}
/**
* Testet die Methode getDaten der Klasse Block für einen leeren Block.
* Überprüft, ob für einen leeren Block ein leeres Datenarray zurückgegeben
* wird.
*/
@Test
public void getDatenTestLeererBlock(){
Block block2 = new Block();
assertEquals(0, block2.getDaten().length);
}
}

View File

@ -0,0 +1,44 @@
/*
============================================================
This is the "BlockeintragTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 21:17
============================================================
*/
package Test.Domain.Block;
import Domain.Block.Blockeintrag;
import org.junit.Test;
import static junit.framework.TestCase.assertEquals;
import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
public class BlockeintragTest {
@Test
public void getPunkteTest(){
Blockeintrag eintrag = new Blockeintrag(20,0,null);
assertTrue((eintrag.getPunkte() == 20));
eintrag.setPunkte(30);
assertTrue((eintrag.getPunkte() == 30));
eintrag.setPunkte(40);
assertTrue((eintrag.getPunkte()== 40));
}
@Test
public void getStiche() {
Blockeintrag eintrag = new Blockeintrag(30,1,null);
assertEquals(1, eintrag.getStiche());
eintrag.setStiche(2);
assertEquals(2, eintrag.getStiche());
eintrag.setStiche(3);
assertEquals(3, eintrag.getStiche());
}
//Exception Test hier schreiben
@Test
public void testNegativeStiche() throws Exception {
assertThrows(IllegalArgumentException.class, () -> new Blockeintrag(50, -3, null));
assertThrows(IllegalArgumentException.class, () -> new Blockeintrag(30,-1, null));
assertThrows(IllegalArgumentException.class, () -> new Blockeintrag(10, -4, null));
}
}

View File

@ -0,0 +1,107 @@
/*
============================================================
This is the "BlockzeileTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 21:17
============================================================
*/
package Test.Domain.Block;
import Domain.Block.Block;
import Domain.Block.Blockeintrag;
import Domain.Block.Blockzeile;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class BlockzeileTest {
Block b = new Block();
Blockeintrag e1 = new Blockeintrag(20,0,null);
Blockeintrag e2 = new Blockeintrag(30,1,null);
Blockeintrag e3 = new Blockeintrag(40,2,null);
Blockeintrag e4 = new Blockeintrag(50,2, null);
Blockeintrag e5 = new Blockeintrag(50, 2, null);
Blockeintrag e6 = new Blockeintrag(40, 1, null);
Blockzeile z1 = new Blockzeile(1, e1);
Blockzeile z2 = new Blockzeile(2, e2);
Blockzeile z3 = new Blockzeile(3, e3);
/**
* testet addEintrag
* Anmerkung assertEquals überprüft nicht ob der Eintrag richtig ist sondern ob das
* Objekt eintrag1 im array liegt Eintrag wird in Blockeintrag auf Richtigkeit
* getestet
*/
@Test
public void addEintragTest() {
Blockeintrag[] daten;
//1 Eintrag
z1.addEintrag(e1);
z1.addEintrag(e2);
daten = z1.getDaten();
assertEquals("addEintrag: 1 Eintrag", 3, daten.length);
assertEquals("addEintrag: 1 Eintrag", e1, daten[1]);
assertEquals("addEintrag: 1 Eintrag", e2, daten[2]);
//2 Eintrag
z1.addEintrag(e3);
z1.addEintrag(e4);
daten = z1.getDaten();
assertEquals("addEintrag: 2 Eintrag", 5, daten.length);
assertEquals("addEintrag: 2 Eintrag", e3, daten[3]);
assertEquals("addEintrag: 2 Eintrag", e4, daten[4]);
//3 Eintrag
z1.addEintrag(e5);
z1.addEintrag(e6);
daten = z1.getDaten();
assertEquals("addEintrag: 3 Eintrag", 7, daten.length);
assertEquals("addEintrag: 3 Eintrag", e5, daten[5]);
assertEquals("addEintrag: 3 Eintrag", e6, daten[6]);
}
//Überprüfung ob Daten korrekt zurückgegeben werden
@Test
public void getDatenTest() {
z1.addEintrag(e1);
z1.addEintrag(e2);
Blockeintrag[] daten = z1.getDaten();
assertEquals(3, daten.length);
assertEquals(e1, daten[1]);
assertEquals(e2, daten[2]);
z1.addEintrag(null);
Blockeintrag[] daten1 = z1.getDaten();
}
@Test
public void duplikateRunde() throws Exception{
Blockeintrag e1 = new Blockeintrag(30,1,null);
Blockeintrag e2 = new Blockeintrag(20,0,null);
Blockzeile z1 = new Blockzeile(4, e1);
Blockzeile z2 = new Blockzeile(4, e2);
}
@Test
public void invalidRunde() throws Exception{
Blockzeile z4 = new Blockzeile(-1, e1);
}
@Test
public void invalidRunde2() throws Exception{
Blockzeile z5 = new Blockzeile(-3, e2);
}
@Test
public void getRundenNummer(){
assertEquals(3, z3.getRundenNummer());
z3.setRundenNummer(4);
assertEquals(4, z3.getRundenNummer());
z3.setRundenNummer(5);
assertEquals(5, z3.getRundenNummer());
}
}

View File

@ -0,0 +1,40 @@
/*
============================================================
This is the "MagierkarteTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 21:18
============================================================
*/
package Test.Domain.Karten;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import Domain.Karten.Magierkarte;
public class MagierkarteTest {
@Test
public void vierMagier() {
Magierkarte m1 = new Magierkarte(1);
Magierkarte m2 = new Magierkarte(2);
Magierkarte m3 = new Magierkarte(3);
Magierkarte m4 = new Magierkarte(4);
assertEquals("Zauberer", m1.getName());
assertTrue(1 == m1.getId());
assertEquals("Zauberer", m2.getName());
assertTrue(2 == m2.getId());
assertEquals("Zauberer", m3.getName());
assertTrue(3 == m3.getId());
assertEquals("Zauberer", m4.getName());
assertTrue(4 == m4.getId());
assertEquals("ID 1: Zauberer", m1.toString());
}
}

View File

@ -0,0 +1,39 @@
/*
============================================================
This is the "NarrenkarteTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 21:18
============================================================
*/
package Test.Domain.Karten;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import Domain.Karten.Narrenkarte;
public class NarrenkarteTest {
@Test
public void vierNarren() {
Narrenkarte n1 = new Narrenkarte(5);
Narrenkarte n2 = new Narrenkarte(6);
Narrenkarte n3 = new Narrenkarte(7);
Narrenkarte n4 = new Narrenkarte(8);
assertEquals(n1.getName(), "Narr");
assertTrue(5 == n1.getId());
assertEquals(n2.getName(), "Narr");
assertTrue(6 == n2.getId());
assertEquals(n3.getName(), "Narr");
assertTrue(7 == n3.getId());
assertEquals(n4.getName(), "Narr");
assertTrue(8 == n4.getId());
assertEquals("ID 5: Narr", n1.toString());
}
}

View File

@ -0,0 +1,87 @@
/*
============================================================
This is the "ZahlenkarteTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 21:18
============================================================
*/
package Test.Domain.Karten;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import org.junit.Test;
import org.junit.jupiter.api.BeforeAll;
import Domain.Enums.Kartenfarbe;
import Domain.Karten.Karte;
import Domain.Karten.Zahlenkarte;
public class ZahlenkarteTest {
@Test
public void zahlenkartentesten() {
HashMap<Integer, Karte> zk = new HashMap<>();
for (int i = 1; i <= 8; i++) {
zk.put(i, null);
}
for (int i = 9; i <= 21; i++) {
zk.put(i, new Zahlenkarte(i, Kartenfarbe.MENSCH, i - 8));
}
for (int i = 22; i <= 34; i++) {
zk.put(i, new Zahlenkarte(i, Kartenfarbe.ELF, i - 21));
}
for (int i = 35; i <= 47; i++) {
zk.put(i, new Zahlenkarte(i, Kartenfarbe.RIESE, i - 34));
}
for (int i = 48; i <= 60; i++) {
zk.put(i, new Zahlenkarte(i, Kartenfarbe.ZWERG, i - 47));
}
// Testen der Charakterkarten MENSCH
assertEquals(1, ((Zahlenkarte) zk.get(9)).getKartenNummer());
assertEquals(13, ((Zahlenkarte) zk.get(21)).getKartenNummer());
assertEquals(5, ((Zahlenkarte) zk.get(13)).getKartenNummer());
assertEquals(17, ((Zahlenkarte) zk.get(17)).getId());
assertTrue(Kartenfarbe.MENSCH == ((Zahlenkarte) zk.get(17)).getFarbe());
// Testen der Charakterkarten ELF
assertEquals(1, ((Zahlenkarte) zk.get(22)).getKartenNummer());
assertEquals(13, ((Zahlenkarte) zk.get(34)).getKartenNummer());
assertEquals(11, ((Zahlenkarte) zk.get(32)).getKartenNummer());
assertEquals(28, ((Zahlenkarte) zk.get(28)).getId());
assertTrue(Kartenfarbe.ELF == ((Zahlenkarte) zk.get(28)).getFarbe());
// Testen der Charakterkarten RIESE
assertEquals(1, ((Zahlenkarte) zk.get(35)).getKartenNummer());
assertEquals(13, ((Zahlenkarte) zk.get(47)).getKartenNummer());
assertEquals(3, ((Zahlenkarte) zk.get(37)).getKartenNummer());
assertEquals(41, ((Zahlenkarte) zk.get(41)).getId());
assertTrue(Kartenfarbe.RIESE == ((Zahlenkarte) zk.get(41)).getFarbe());
// Testen der Charakterkarten ZWERG
assertEquals(1, ((Zahlenkarte) zk.get(48)).getKartenNummer());
assertEquals(13, ((Zahlenkarte) zk.get(60)).getKartenNummer());
assertEquals(6, ((Zahlenkarte) zk.get(53)).getKartenNummer());
assertEquals(53, ((Zahlenkarte) zk.get(53)).getId());
assertTrue(Kartenfarbe.ZWERG == ((Zahlenkarte) zk.get(53)).getFarbe());
}
}

View File

@ -1,60 +1,28 @@
/*
============================================================
This is the "KartenstapelTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 20:41
============================================================
*/
package Test.Domain; package Test.Domain;
import static org.junit.jupiter.api.Assertions.*; import org.junit.Test;
import org.junit.jupiter.api.Test; public class KartenstapelTest {
import Domain.Kartenstapel; @Test
import Domain.Enums.Kartenfarbe; public void mischenTest() {
import Domain.Karten.Karte;
import Domain.Karten.Magierkarte;
import Domain.Karten.Narrenkarte;
import Domain.Karten.Zahlenkarte;
class KartenstapelTest { }
@Test @Test
void testKartenstapelSortiert() { public void getAnzahlKartenTest() {
Kartenstapel k = new Kartenstapel();
System.out.println(k.getKartenstapelSortiert()); }
k.mischen();
System.out.println(k.getKartenstapelGemischt());
System.out.println(k.getStatusGemischt());
// Test der richtigen Klassen
assertInstanceOf(Magierkarte.class, k.getKartesortiert(1));
assertInstanceOf(Magierkarte.class, k.getKartesortiert(4));
assertInstanceOf(Narrenkarte.class, k.getKartesortiert(5));
assertInstanceOf(Narrenkarte.class, k.getKartesortiert(8));
assertInstanceOf(Zahlenkarte.class, k.getKartesortiert(9));
assertInstanceOf(Zahlenkarte.class, k.getKartesortiert(17));
assertInstanceOf(Zahlenkarte.class, k.getKartesortiert(26));
assertInstanceOf(Zahlenkarte.class, k.getKartesortiert(45));
assertInstanceOf(Zahlenkarte.class, k.getKartesortiert(60));
// Test der richtigen Bezeichnungen für Magierkarten und Narrenkarten @Test
assertTrue("Zauberer" == ((Magierkarte) k.getKartesortiert(2)).getName()); public void getObersteKarteTest() {
assertTrue("Narr" == ((Narrenkarte) k.getKartesortiert(5)).getName());
// Test der richtigen Werte auf den Zahlenkarten }
// Charakterkarte MENSCH
assertTrue(1 == ((Zahlenkarte) k.getKartesortiert(9)).getKartenwert());
assertTrue(13 == ((Zahlenkarte) k.getKartesortiert(21)).getKartenwert());
assertEquals(Kartenfarbe.MENSCH.getFarbe(), ((Zahlenkarte) k.getKartesortiert(17)).getCharakter().getFarbe());
assertTrue(9 == ((Zahlenkarte) k.getKartesortiert(17)).getKartenwert());
// Charakterkarte ELF
assertTrue(1 == ((Zahlenkarte) k.getKartesortiert(22)).getKartenwert());
assertTrue(13 == ((Zahlenkarte) k.getKartesortiert(34)).getKartenwert());
assertEquals(Kartenfarbe.ELF.getFarbe(), ((Zahlenkarte) k.getKartesortiert(25)).getCharakter().getFarbe());
assertTrue(4 == ((Zahlenkarte) k.getKartesortiert(25)).getKartenwert());
// Charakterkarte RIESE
// Charakterkarte ZWERG
}
} }

View File

@ -0,0 +1,59 @@
/*
============================================================
This is the "SpielerTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 20:27
============================================================
*/
package Test.Domain;
import org.junit.Test;
import Domain.Spieler;
import Domain.Enums.Geschlecht;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
public class SpielerTest {
Spieler spieler = new Spieler(0, "Herbert", Geschlecht.M, 0);
Spieler spieler2 = new Spieler(1, "Heinz", Geschlecht.M, 0);
Spieler spieler3 = new Spieler(2, "Ulrike", Geschlecht.W, 0);
Spieler spieler4 = new Spieler(3, "HerrFrau", Geschlecht.D, 0);
Spieler spieler5 = new Spieler(4, "", Geschlecht.KI, 0);
Spieler spieler6 = new Spieler(5, "", Geschlecht.KI, 0);
@Test
public void idTest() {
assertEquals(0, spieler.getId());
assertEquals(1, spieler2.getId());
assertEquals(2, spieler3.getId());
assertEquals(3, spieler4.getId());
assertEquals(4, spieler5.getId());
assertEquals(5, spieler6.getId());
}
@Test
public void geschlechtTest() {
assertEquals(Geschlecht.M, spieler.getGeschlecht());
spieler.setGeschlecht(Geschlecht.D);
assertEquals(Geschlecht.D, spieler.getGeschlecht());
spieler.setGeschlecht(Geschlecht.W);
assertEquals(Geschlecht.W, spieler.getGeschlecht());
spieler.setGeschlecht(Geschlecht.KI);
assertEquals(Geschlecht.KI, spieler.getGeschlecht());
}
@Test
public void nameTest() {
assertEquals("Herbert", spieler.getName());
spieler.setName("Heinz");
assertEquals("Heinz", spieler.getName());
assertEquals("", spieler5.getName()); //Kein Name notwendig, da KI.
}
@Test
public void exceptionsTest() {
assertThrows(RuntimeException.class, () -> new Spieler(6, "", Geschlecht.KI, 0));
}
}

View File

@ -0,0 +1,11 @@
/*
============================================================
This is the "SpielTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 21:19
============================================================
*/
package Test.Facade;
public class SpielTest {
}

View File

@ -0,0 +1,11 @@
/*
============================================================
This is the "PersistenzTest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 21:21
============================================================
*/
package Test.UI;
public class PersistenzTest {
}

View File

@ -0,0 +1,11 @@
/*
============================================================
This is the "SpielCLITest" file from Author: Philipp Kotte
written on: 10 / 10 / 2023 at: 21:21
============================================================
*/
package Test.UI;
public class SpielCLITest {
}

View File

@ -7,6 +7,160 @@ written on: 05 / 10 / 2023 at: 23:25
package UI; package UI;
public abstract class SpielCLI { import Facade.Spiel;
public int id; import Domain.Spieler;
import Domain.Enums.Geschlecht;
import Domain.Exceptions.EmptyListException;
import Domain.Exceptions.SpielerNotFoundException;
import java.util.Scanner;
public class SpielCLI {
private static final String ANSI_RESET = "\u001B[0m";
private static final String ANSI_GREEN = "\u001B[32m";
private static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_BLUE = "\u001B[34m";
Scanner sc = new Scanner(System.in);
private Spiel spiel;
public SpielCLI(Spiel spiel) {
this.spiel = spiel;
hauptmenue();
}
public void hauptmenue() {
System.out.println("Hallo Wanderer");
mainloop: while (true) {
print("");
print("--------Hauptmenü--------");
print(ANSI_BLUE + "-1-" + ANSI_RESET + " Spiel starten");
print(ANSI_BLUE + "-2-" + ANSI_RESET + " Spieler hinzufügen");
print(ANSI_BLUE + "-3-" + ANSI_RESET + " Spiel to String");
print(ANSI_BLUE + "-4-" + ANSI_RESET + " Spieler löschen");
print(ANSI_BLUE + "-5-" + ANSI_RESET + " Exit");
int input = 0;
try {
input = Integer.parseInt(sc.nextLine());
} catch (NumberFormatException e) {
System.out.println("Diese eingabe ist ungültig.");
}
switch (input) {
case 1:
spielStarten();
break;
case 2:
addSpieler();
break;
case 3:
System.out.println(spiel.toString());
break;
case 4:
spielerLöschen();
break;
case 5:
break mainloop;
case 0:
System.out.println("Diese eingabe ist nicht vergeben.");
}
}
System.out.println("auf wiedersehen!");
}
private void spielStarten() {
this.spiel.starteSpiel();
System.out.println("Noch nicht implementiert.");
}
private void addSpieler() {
int spieler_anzahl = this.spiel.getAlleSpieler().length;
if (spieler_anzahl <= 5) {
System.out.println("Gib den Namen des Spielers an");
String name = sc.nextLine();
System.out.println("Gib das Geschlecht an.");
System.out.println("Männlich (M), Weiblich (W), Divers (D), KI (K)");
String geschlecht = sc.nextLine();
switch (geschlecht) {
case "W":
spiel.addSpieler(name, Geschlecht.W);
break;
case "M":
spiel.addSpieler(name, Geschlecht.M);
break;
case "D":
spiel.addSpieler(name, Geschlecht.D);
break;
case "K":
spiel.addSpieler(name, Geschlecht.KI);
break;
default:
System.out.println("Diese eingabe ist nicht gültig");
break;
}
} else {
System.out.println("Die Maximale Spieleranzahl ist erreicht.");
}
}
private void spielerLöschen() {
if (this.spiel.getAlleSpieler().length >= 1) {
System.out.println("Welchen Spieler willst du löschen?");
System.out.println("Gib die ID des Spielers an.");
String[] spieler = spiel.getAlleSpieler();
for (int i = 0; i < spieler.length; i++) {
System.out.println(spieler[i]);
}
int _id = Integer.parseInt(sc.nextLine());
// System.out.println(_id);
for (String s : spieler) {
if (s.contains("ID: " + _id)) {
System.out.println("Sicher das du " + s + " löschen willst?");
} else {
System.out.println("Diese Spieler ist nicht vorhanden!");
_id = 0;
}
}
boolean valid_choice = false;
while (!valid_choice) {
System.out.println("Ja [j] Nein [n]");
String wahl = sc.nextLine();
switch (wahl) {
case "j":
valid_choice = true;
try {
spiel.removeSpieler(_id);
System.out.println("Spieler löschen erfolgreich!");
} catch (SpielerNotFoundException | EmptyListException | RuntimeException e) {
System.out.println(e.getMessage());
}
break;
case "n":
System.out.println("Spieler löschen abgebrochen!");
valid_choice = true;
break;
default:
System.out.println("Diese Auswhal ist nicht gültig");
}
}
} else {
System.out.println("Es existieren keine Spieler zum löschen.");
}
}
private void print(String message) {
System.out.println(message);
}
} }

View File

@ -1,15 +0,0 @@
package main;
import Facade.Spiel;
import Infrastructure.Persistenz;
public class Main {
public static void main(String[] args) {
String spielname = "Wizard";
Spiel spiel;
}
}