From bee73e36aa3eef0a3ab1db4d7baaa7b33359a3c6 Mon Sep 17 00:00:00 2001
From: Roope Malinen <rokrmal@utu.fi>
Date: Mon, 9 Mar 2020 21:51:18 +0000
Subject: [PATCH] =?UTF-8?q?Ihan=20vaan=20niin=20kuin=20muuten=20vaan=20pal?=
 =?UTF-8?q?autteesta=20gitille,=201/5=20t=C3=A4hte=C3=A4,=20el=C3=A4m?=
 =?UTF-8?q?=C3=A4ni=20kehnoin=20kokemus?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

(cherry picked from commit f1cff9d276559f9adaefb955413492887fc7e3f1)
---
 src/domain/kortit/Erikoiskortti.java       |  5 ++
 src/domain/kortit/Jokerikortti.java        |  2 +-
 src/domain/kortit/Nosta4Jokerikortti.java  |  2 +-
 src/domain/kortit/NostaKaksikortti.java    |  2 +-
 src/domain/kortit/Ohituskortti.java        |  2 +-
 src/domain/kortit/Suunnanvaihtokortti.java |  2 +-
 src/domain/korttipakat/Nostopakka.java     |  9 ++++
 src/domain/korttipakat/Poistopakka.java    |  9 ++++
 src/domain/pelaajat/Pelaaja.java           |  9 ++++
 src/logiikka/Peli.java                     | 27 +++++-----
 src/ui/Tekstikayttoliittyma.java           | 57 +++++++++++++++++-----
 11 files changed, 96 insertions(+), 30 deletions(-)
 create mode 100644 src/domain/kortit/Erikoiskortti.java

diff --git a/src/domain/kortit/Erikoiskortti.java b/src/domain/kortit/Erikoiskortti.java
new file mode 100644
index 0000000..9a5a82c
--- /dev/null
+++ b/src/domain/kortit/Erikoiskortti.java
@@ -0,0 +1,5 @@
+package domain.kortit;
+
+public interface Erikoiskortti {
+
+}
diff --git a/src/domain/kortit/Jokerikortti.java b/src/domain/kortit/Jokerikortti.java
index af0d600..3825dcb 100644
--- a/src/domain/kortit/Jokerikortti.java
+++ b/src/domain/kortit/Jokerikortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class Jokerikortti extends Kortti {
+public class Jokerikortti extends Kortti implements Erikoiskortti {
 	
 	public Jokerikortti(String vari) {
 		super(vari);
diff --git a/src/domain/kortit/Nosta4Jokerikortti.java b/src/domain/kortit/Nosta4Jokerikortti.java
index 4535fbc..01863b6 100644
--- a/src/domain/kortit/Nosta4Jokerikortti.java
+++ b/src/domain/kortit/Nosta4Jokerikortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class Nosta4Jokerikortti extends Kortti {
+public class Nosta4Jokerikortti extends Kortti implements Erikoiskortti {
 
 	public Nosta4Jokerikortti(String vari) {
 		super(vari);
diff --git a/src/domain/kortit/NostaKaksikortti.java b/src/domain/kortit/NostaKaksikortti.java
index 9f7b1ac..57c5c66 100644
--- a/src/domain/kortit/NostaKaksikortti.java
+++ b/src/domain/kortit/NostaKaksikortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class NostaKaksikortti extends Kortti {
+public class NostaKaksikortti extends Kortti implements Erikoiskortti {
 	
 	
 	public NostaKaksikortti(String vari) {
diff --git a/src/domain/kortit/Ohituskortti.java b/src/domain/kortit/Ohituskortti.java
index 58ba67c..19ae128 100644
--- a/src/domain/kortit/Ohituskortti.java
+++ b/src/domain/kortit/Ohituskortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class Ohituskortti extends Kortti {
+public class Ohituskortti extends Kortti implements Erikoiskortti {
 
 	
 	public Ohituskortti(String vari) {
diff --git a/src/domain/kortit/Suunnanvaihtokortti.java b/src/domain/kortit/Suunnanvaihtokortti.java
index 54f56a8..7383ffb 100644
--- a/src/domain/kortit/Suunnanvaihtokortti.java
+++ b/src/domain/kortit/Suunnanvaihtokortti.java
@@ -1,6 +1,6 @@
 package domain.kortit;
 
-public class Suunnanvaihtokortti extends Kortti {
+public class Suunnanvaihtokortti extends Kortti implements Erikoiskortti {
 	
 	public Suunnanvaihtokortti(String vari) {
 		super(vari);
diff --git a/src/domain/korttipakat/Nostopakka.java b/src/domain/korttipakat/Nostopakka.java
index e179604..186e2ca 100644
--- a/src/domain/korttipakat/Nostopakka.java
+++ b/src/domain/korttipakat/Nostopakka.java
@@ -26,4 +26,13 @@ public class Nostopakka {
 			throw new IndexOutOfBoundsException();
 		}
 	}
+	
+	public String toString() {
+		StringBuilder str = new StringBuilder("");
+		str.append("Nostopakassa on kortit:\n");
+		for (Kortti kortti : this.kortit) {
+			str.append(kortti + "\n");
+		}
+		return str.toString();
+	}
 }
diff --git a/src/domain/korttipakat/Poistopakka.java b/src/domain/korttipakat/Poistopakka.java
index bbe4d29..7118b11 100644
--- a/src/domain/korttipakat/Poistopakka.java
+++ b/src/domain/korttipakat/Poistopakka.java
@@ -20,4 +20,13 @@ public class Poistopakka {
 	public Kortti annaPaallimmainenKortti() {
 		return this.kortit.get(this.kortit.size()-1);
 	}
+	
+	public String toString() {
+		StringBuilder str = new StringBuilder("");
+		str.append("Poistopakassa olevat kortit:\n");
+		for (Kortti kortti : this.kortit) {
+			str.append(kortti + "\n");
+		}
+		return str.toString();
+	}
 }
diff --git a/src/domain/pelaajat/Pelaaja.java b/src/domain/pelaajat/Pelaaja.java
index ab43c19..a6202e8 100644
--- a/src/domain/pelaajat/Pelaaja.java
+++ b/src/domain/pelaajat/Pelaaja.java
@@ -72,4 +72,13 @@ public abstract class Pelaaja {
 		}
 		return summa;
 	}
+	
+	public String toString() {
+		StringBuilder str = new StringBuilder("");
+		str.append("Pelaajan " + this.nimi + " kortit:\n");
+		for (Kortti kortti : this.kortit) {
+			str.append(kortti + "\n");
+		}
+		return str.toString();
+	}
 }
diff --git a/src/logiikka/Peli.java b/src/logiikka/Peli.java
index 6e0c0f0..0e80f8f 100644
--- a/src/logiikka/Peli.java
+++ b/src/logiikka/Peli.java
@@ -202,7 +202,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof NostaKaksikortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof NostaKaksikortti) {
 				System.out.println("Nosta 2 -kortin voi ly�d� samanv�risen kortin p��lle tai"
 						+ " toisen nosta 2 -kortin p��lle.");
@@ -219,7 +219,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof Ohituskortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof Ohituskortti) {
 				System.out.println("Ohituskortin saa ly�d� samanv�risen kortin p��lle tai"
 						+ " toisen ohituskortin p��lle.");
@@ -236,7 +236,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof Suunnanvaihtokortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof Suunnanvaihtokortti) {
 				System.out.println("Suunnanvaihtokortin saa ly�d� samanv�risen kortin p��lle tai"
 						+ " toisen suunnanvaihtokortin p��lle.");
@@ -246,8 +246,8 @@ public class Peli {
 		} 
 		
 		else if (kortti instanceof Peruskortti) {
-			if (edellinenKortti != null && edellinenKortti.annaVari() != null) {
-				if (!kortti.annaVari().equals(edellinenKortti.annaVari()) 
+			if (edellinenKortti.annaVari() != null) {
+				if (!kortti.annaVari().equals(edellinenKortti.annaVari())
 						&& edellinenKortti instanceof Peruskortti) {
 					if (((Peruskortti) kortti).annaNumero() != ((Peruskortti) edellinenKortti).annaNumero()) {
 						//Kortti on peruskortti, mutta eriv�rinen ja erinumeroinen kuin edellinen kortti
@@ -258,10 +258,10 @@ public class Peli {
 				if(!kortti.annaVari().equals(edellinenKortti.annaVari())) {
 					System.out.println("Kortin tulee olla samaa v�ri� tai sama numero.");
 					return false;					
-				}
-			} else {
-				kelvollinenKortti = true;				
-			}			
+				} else {
+					kelvollinenKortti = true;				
+				}	
+			} 		
 		}
 		
 		this.vari = null;
@@ -280,6 +280,7 @@ public class Peli {
 				return false;
 			}
 			this.vari = null;
+			System.out.println(pelaaja.annaNimi() + " pelasi kortin: " + kortti);
 			return true;
 		}
 		
@@ -359,7 +360,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof NostaKaksikortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof NostaKaksikortti) {
 				return false;
 			}
@@ -375,7 +376,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof Ohituskortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof Ohituskortti) {
 				return false;
 			}
@@ -391,7 +392,7 @@ public class Peli {
 		 */
 		
 		else if (kortti instanceof Suunnanvaihtokortti) {
-			if (edellinenKortti != null && !edellinenKortti.annaVari().equals(kortti.annaVari())
+			if (!edellinenKortti.annaVari().equals(kortti.annaVari())
 					|| edellinenKortti instanceof Suunnanvaihtokortti) {
 			}
 			this.suuntaKasvava = !this.suuntaKasvava;
@@ -400,7 +401,7 @@ public class Peli {
 		} 
 		
 		else if (kortti instanceof Peruskortti) {
-			if (edellinenKortti != null && edellinenKortti.annaVari() != null) {
+			if (edellinenKortti.annaVari() != null) {
 				if (!kortti.annaVari().equals(edellinenKortti.annaVari()) 
 						&& edellinenKortti instanceof Peruskortti) {
 					if (((Peruskortti) kortti).annaNumero() != ((Peruskortti) edellinenKortti).annaNumero()) {
diff --git a/src/ui/Tekstikayttoliittyma.java b/src/ui/Tekstikayttoliittyma.java
index d0537c8..858b673 100644
--- a/src/ui/Tekstikayttoliittyma.java
+++ b/src/ui/Tekstikayttoliittyma.java
@@ -1,8 +1,15 @@
 package ui;
 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Scanner;
 
+import domain.kortit.Erikoiskortti;
 import domain.kortit.Kortti;
 import domain.korttipakat.Nostopakka;
 import domain.korttipakat.Poistopakka;
@@ -20,7 +27,7 @@ public class Tekstikayttoliittyma {
 	public void start() {
 		
 		System.out.println("Tervetuloa pelaamaan Uunoa. Kirjoita \"uusi\" aloittaaksesi uuden pelin,");
-		System.out.println(" \"lataa\" ladataksesi vanhan pelin, \"ohjeet\" lukeaksesi peliohjeita tai 'lopeta' lopettaaksesi.");
+		System.out.println(" \"lataa\" ladataksesi vanhan pelin tai 'lopeta' lopettaaksesi.");
 		System.out.print("> ");
 		String input = this.lukija.next();
 		
@@ -29,13 +36,6 @@ public class Tekstikayttoliittyma {
 			return;
 		case "uusi":
 			this.uusiPeli();
-			break;
-		case "lataa":
-//			lataaPeli();
-			break;
-		case "ohjeet":
-//			naytaPeliohjeet();
-			break;
 		default:
 			this.uusiPeli();
 		}
@@ -49,11 +49,21 @@ public class Tekstikayttoliittyma {
 			Pelaaja pelaaja = peli.annaPelaaja(0);
 			Poistopakka poistopakka = peli.annaPoistopakka();
 			Nostopakka nostopakka = peli.annaNostopakka();
-		
-			Kortti ensimmainenKortti = poistopakka.annaPaallimmainenKortti();
 			
-			peli.pelaaKorttiTietokone(lukija, ensimmainenKortti, null, pelaaja);
+			try {
+				PrintWriter tiedosto = new PrintWriter(new File("pelitilanne.txt"));
+				tiedosto.close();
+			} catch (Exception e) {
+				// TODO: handle exception
+			}
+			
+			Kortti ensimmainenKortti = poistopakka.annaPaallimmainenKortti();
 			
+			while (ensimmainenKortti instanceof Erikoiskortti) {
+				ensimmainenKortti = nostopakka.nostaKortti();
+				poistopakka.lisaaKortti(ensimmainenKortti);
+			}
+						
 			boolean peliKesken = true;
 			while (peliKesken) {
 			
@@ -124,9 +134,32 @@ public class Tekstikayttoliittyma {
 						poistopakka.lisaaKortti(k);
 						kortit.remove(kortinNumero);
 					}
-				}
+				}		
+			}
+			//Tulostaminen tiedostoon
+			try {
+				
+				File tiedosto = new File("pelitilanne.txt");
+				OutputStreamWriter kirjoittaja =
+			             new OutputStreamWriter(new FileOutputStream(tiedosto), StandardCharsets.UTF_8);
 				
+				kirjoittaja.append(peli.annaPelaaja(0).toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(peli.annaPelaaja(1).toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(peli.annaPelaaja(2).toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(peli.annaPelaaja(3).toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(nostopakka.toString());
+				kirjoittaja.append("\n");
+				kirjoittaja.append(poistopakka.toString());
+				
+				kirjoittaja.close();
+			} catch (Exception e) {
+				// TODO: handle exception
 			}
+
 		}
 	}	
 }
-- 
GitLab