From 1267792408db945627413fa6242e3e42ad3f25ba Mon Sep 17 00:00:00 2001 From: Sebastian Kacza Date: Sat, 12 Dec 2020 16:14:26 +0100 Subject: [PATCH] =?UTF-8?q?Texturenpakte=20Verwaltung=20und=20Test=20hinzu?= =?UTF-8?q?gef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/jaujau/UnitTests/TEST_Kartensatz.java | 10 +- .../jaujau/UnitTests/TEST_Texturenpaket.java | 32 +++- .../jaujau/UnitTests/TEST_Texturenpakete.java | 15 +- src/de/jaujau/daten/Texturenpaket.java | 156 +++++++++++++++++- src/de/jaujau/daten/Texturenpakete.java | 99 +++++++++++ 5 files changed, 298 insertions(+), 14 deletions(-) diff --git a/src/de/jaujau/UnitTests/TEST_Kartensatz.java b/src/de/jaujau/UnitTests/TEST_Kartensatz.java index 4d9369e..6649284 100755 --- a/src/de/jaujau/UnitTests/TEST_Kartensatz.java +++ b/src/de/jaujau/UnitTests/TEST_Kartensatz.java @@ -1,10 +1,14 @@ -package de.jaujau.daten; +package de.jaujau.UnitTests; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import de.jaujau.daten.Farbe; +import de.jaujau.daten.Kartensatz; +import de.jaujau.daten.Spieler; + class TEST_Kartensatz { private Kartensatz satz; @@ -82,12 +86,12 @@ class TEST_Kartensatz { //Spieler legt Karte auf Ablagestapel satz.ablegen(karteSpieler); - assertTrue(karteSpieler == satz.letztekarte); + assertTrue(karteSpieler == satz.getletzteKarte()); assertTrue(satz.getHand(Spieler.SPIELER).size()==0); //Computer legt Karte auf Ablagestapel satz.ablegen(karteComputer); - assertTrue(karteComputer == satz.letztekarte); + assertTrue(karteComputer == satz.getletzteKarte()); assertTrue(satz.getHand(Spieler.COMPUTER).size()==0); } diff --git a/src/de/jaujau/UnitTests/TEST_Texturenpaket.java b/src/de/jaujau/UnitTests/TEST_Texturenpaket.java index abe340a..0d52b10 100755 --- a/src/de/jaujau/UnitTests/TEST_Texturenpaket.java +++ b/src/de/jaujau/UnitTests/TEST_Texturenpaket.java @@ -1,23 +1,49 @@ -package de.jaujau.daten; +package de.jaujau.UnitTests; import static org.junit.jupiter.api.Assertions.*; +import java.awt.Image; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import de.jaujau.daten.Texturenpaket; + class TEST_Texturenpaket { private Texturenpaket paket; @BeforeEach void setUp() throws Exception { - paket = new Texturenpaket("/home/sebastian/testpacket.zip"); + } @Test - void PacketLaden() { + void FehlerFreiesPaketLaden() { + paket = new Texturenpaket("/home/sebastian/testpaket.zip"); assertTrue(paket.ladePacket()); + System.out.println("Name des Texturen Paketes: " + paket.getName()); + System.out.println("Level des Texturen Paketes: " + paket.getLevel()); + } + + @Test + void FehlerHaftesPaketLaden() { + paket = new Texturenpaket("/home/sebastian/testpaket_fehler.zip"); + assertFalse(paket.ladePacket()); + System.out.println("Name des Fehlerhaften Texturen Paketes: " + paket.getName()); + System.out.println("Level des Fehlerhaften Texturen Paketes: " + paket.getLevel()); + } + + + @Test + void TexturenAusgeben() { + paket = new Texturenpaket("/home/sebastian/testpaket.zip"); + assertTrue(paket.ladePacket()); + Image Bilder[] = paket.getTexturen(); + for(int i = 0; i < 32; i++) { + assertTrue(Bilder[i] != null); + } } } diff --git a/src/de/jaujau/UnitTests/TEST_Texturenpakete.java b/src/de/jaujau/UnitTests/TEST_Texturenpakete.java index 228bcae..d0a9a8d 100755 --- a/src/de/jaujau/UnitTests/TEST_Texturenpakete.java +++ b/src/de/jaujau/UnitTests/TEST_Texturenpakete.java @@ -1,10 +1,12 @@ -package de.jaujau.daten; +package de.jaujau.UnitTests; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import de.jaujau.daten.Texturenpakete; + class TEST_Texturenpakete { private Texturenpakete pakete; @@ -16,7 +18,16 @@ class TEST_Texturenpakete { @Test void test() { - fail("Not yet implemented"); + assertTrue(pakete.getAnzahlPakete()==0); + assertTrue(pakete.addPaket("/home/sebastian/testpaket.zip")); + assertTrue(pakete.getAnzahlPakete()==1); + assertTrue(pakete.setAktivesPaket(0)); + assertTrue(pakete.getAktivesPaket()==0); + System.out.println(pakete.getName(0)); + System.out.println(pakete.getName(0)); + for(int i = 0; i < 32; i++) { + assertTrue(pakete.getTextur(i)!=null); + } } } diff --git a/src/de/jaujau/daten/Texturenpaket.java b/src/de/jaujau/daten/Texturenpaket.java index 6d36a82..7b82b87 100755 --- a/src/de/jaujau/daten/Texturenpaket.java +++ b/src/de/jaujau/daten/Texturenpaket.java @@ -1,6 +1,15 @@ package de.jaujau.daten; import java.awt.Image; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Scanner; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; +import javax.imageio.ImageIO; + /** * Verwaltet ein Texturenpackt @@ -9,8 +18,8 @@ import java.awt.Image; */ public class Texturenpaket { - private final String name; - private final int level; + private String name; + private int level; private final String pfad; @@ -30,16 +39,80 @@ public class Texturenpaket { * @return Paket vollständig laden, true/false */ public boolean ladePacket() { + System.out.println("Lade Paket"); + if(testePaket()) { + //Paket ist OK + + //Paket Informationen Laden + + try { + File zipDatei = new File(pfad); + ZipFile paketDatei = new ZipFile(zipDatei); + ZipEntry zipInhaltPaketTXT = paketDatei.getEntry("paket.txt"); + InputStream eingabeStromTXT = paketDatei.getInputStream(zipInhaltPaketTXT); + Scanner scanner = new Scanner(eingabeStromTXT); + while(scanner.hasNext()) { + String Zeile = scanner.next(); + String Spalte[] = Zeile.split(":"); + //System.out.println(Spalte.length); + if(Spalte.length==2) { + System.out.println(Spalte[1]); + //Name Auslesen + if(Spalte[0].equals("name")) { + name = Spalte[1]; + } + //Level Auslesen + if(Spalte[0].equals("level")) { + level = Integer.parseInt(Spalte[1]); + } + + } + } + scanner.close(); + paketDatei.close(); + + } catch (ZipException e) { + e.printStackTrace(); + return false; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + + } + else { + return false; + } return true; } /** - * Gibt ein Bild das dem Texturenpacket zurück - * @param KartenID der Textur - * @return Image der Textur + * Gibt alle Bilddatein für ein Texturen Paket zurück + * @return Image der Texturen des Peketes als Image Array */ - public Image getTextur(int KartenID) { + public Image[] getTexturen() { + if(testePaket()) { + + try { + File zipDatei = new File(pfad); + ZipFile paketDatei = new ZipFile(zipDatei); + Image Bilder[] = new Image[32]; + + for(int i = 0; i < 32; i++) { + ZipEntry zipInhaltTextur = paketDatei.getEntry(i+".png"); + InputStream eingabeStromTextur = paketDatei.getInputStream(zipInhaltTextur); + Bilder[i] = ImageIO.read(eingabeStromTextur); + } + return Bilder; + + } catch (ZipException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } return null; } @@ -60,4 +133,75 @@ public class Texturenpaket { public int getLevel() { return level; } + + + /** + * Testet das Texturenpaket auf vollständigkeit + * @return Paket vollständig, true/false + */ + private boolean testePaket() { + System.out.println("Teste Paket:"); + //Testen ob Zip-Datei vorhanden und lesabar ist + File zipDatei = new File(pfad); + if(zipDatei.exists() || zipDatei.canRead()) { + + try { + //Zip Datei öffnen + ZipFile paketDatei = new ZipFile(zipDatei); + + //Paket Konfigurations Datei Prüfen + ZipEntry zipInhaltPaketTXT = paketDatei.getEntry("paket.txt"); + InputStream eingabeStromTXT = paketDatei.getInputStream(zipInhaltPaketTXT); + Scanner scanner = new Scanner(eingabeStromTXT); + boolean PaketName = false; + boolean PaketLevel = false; + while(scanner.hasNext()) { + //Prüfen ob Konfigurations Datei die Einträge "name" und "level" enthält + String Zeile = scanner.next(); + System.out.println(Zeile); + if(Zeile.contains("name:")) { + PaketName = true; + } + if(Zeile.contains("level:")) { + PaketLevel = true; + } + } + scanner.close(); + if(!PaketName || !PaketLevel) { + System.out.println("Paket Konfiguration fehlerhaft"); + return false; + } + + //Texturen Prüfen + for(int i = 0; i < 32; i++) { + ZipEntry zipInhaltTextur = paketDatei.getEntry(i+".png"); + InputStream eingabeStromTextur = paketDatei.getInputStream(zipInhaltTextur); + Image bild = ImageIO.read(eingabeStromTextur); + if(bild == null) { + System.out.println("Datei: " + i + ".png nicht gefunden"); + return false; + } + } + + paketDatei.close(); + + } catch (ZipException e) { + //Zip Datei nicht leesbar + e.printStackTrace(); + return false; + } catch (IOException e) { + //Zip Datei nicht lesbar + e.printStackTrace(); + return false; + } + + } + else { + return false; + } + + //Alles OK + System.out.println("Texturen Paket ist OK"); + return true; + } } diff --git a/src/de/jaujau/daten/Texturenpakete.java b/src/de/jaujau/daten/Texturenpakete.java index 2dea05f..d9d5d46 100644 --- a/src/de/jaujau/daten/Texturenpakete.java +++ b/src/de/jaujau/daten/Texturenpakete.java @@ -1,5 +1,7 @@ package de.jaujau.daten; +import java.awt.Image; +import java.util.ArrayList; /** * Diese Klasse Verwaltet die Texturenpackete des Spiels @@ -7,11 +9,108 @@ package de.jaujau.daten; */ public class Texturenpakete { + private ArrayList TexturenpaketListe; + private Image Texturen[]; + private int AktivesPaket; + + public Texturenpakete(){ + TexturenpaketListe = new ArrayList(); + AktivesPaket = 0; + } + + + /** + * Gibt die Anzahl der Vorhanden Texturenpakete aus + * @return Anzahl Texturenpakte + */ + public int getAnzahlPakete() { + return TexturenpaketListe.size(); + } + + + /** + * Gibt das min Level für ein bestimtes Paket zurück + * @param PaketNummer + * @return min Level + */ + public int getLevel(int PaketNr) { + if((PaketNr >= 0) && (PaketNr < TexturenpaketListe.size())) { + return TexturenpaketListe.get(PaketNr).getLevel(); + } + return 0; + } + + + /** + * Gibt den Namen eines Bestiment Paketes zurück + * @param PaketNummer + * @return Name des Paketes + */ + public String getName(int PaketNr) { + if((PaketNr >= 0) && (PaketNr < TexturenpaketListe.size())) { + return TexturenpaketListe.get(PaketNr).getName(); + } + return ""; + } + + + /** + * Gibt die Nummer des AktivenPakes aus + * @return Nummer des Aktiven Paketes + */ + public int getAktivesPaket() { + return AktivesPaket; + } + + + /** + * Setzt das aktive Paket + * @param PaketNr des Paketes + * @return Setzen erfolgreich true/false + */ + public boolean setAktivesPaket(int PaketNr) { + if((PaketNr >= 0) && (PaketNr < TexturenpaketListe.size())) { + AktivesPaket = PaketNr; + + //Texturen Laden + Texturen = TexturenpaketListe.get(PaketNr).getTexturen(); + return true; + } + return false; + } + + + /** + * Fügt ein Neues Testuren Paket hinzu + * Das Paket wird vor dem einfügen auf Vollständfigkeit geprüft + * @param Pfad + * @return + */ + public boolean addPaket(String Pfad) { + Texturenpaket NeuesPaket = new Texturenpaket(Pfad); + if(NeuesPaket.ladePacket()) { + TexturenpaketListe.add(NeuesPaket); + return true; + } + return false; } + /** + * Gibt eine Textur des aktuellen Paketes als Image zurück + * @param KartenNr der Textur + * @return Textur als Image + */ + public Image getTextur(int KartenNr) { + if((KartenNr >= 0) && (KartenNr < 32)) { + return Texturen[KartenNr]; + } + return null; + } + + }