diff --git a/src/domain/kortit/Erikoiskortti.java b/src/domain/kortit/Erikoiskortti.java new file mode 100644 index 0000000000000000000000000000000000000000..9a5a82cb9134cc20e5ee0d5456029f365a3b77d9 --- /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 5665dd7c08577abce635a7d9cec18b5973a8f627..3825dcb95547d4b06817fa2ae05e68fc01b6f5ca 100644 --- a/src/domain/kortit/Jokerikortti.java +++ b/src/domain/kortit/Jokerikortti.java @@ -1,13 +1,13 @@ package domain.kortit; -public class Jokerikortti extends Kortti { +public class Jokerikortti extends Kortti implements Erikoiskortti { public Jokerikortti(String vari) { super(vari); } public String toString() { - return "[Jokeri, v�ri]"; + return "jokerikortti"; } } diff --git a/src/domain/kortit/Nosta4Jokerikortti.java b/src/domain/kortit/Nosta4Jokerikortti.java index 56126c3a86fc0647822ba8a27ee742dfcd9525c0..01863b6588fbbb6a0f5a4579e95e8b3a89bb70eb 100644 --- a/src/domain/kortit/Nosta4Jokerikortti.java +++ b/src/domain/kortit/Nosta4Jokerikortti.java @@ -1,12 +1,12 @@ package domain.kortit; -public class Nosta4Jokerikortti extends Kortti { +public class Nosta4Jokerikortti extends Kortti implements Erikoiskortti { public Nosta4Jokerikortti(String vari) { super(vari); } public String toString() { - return "[Jokeri, +4]"; + return "nosta 4 -jokerikortti"; } } diff --git a/src/domain/kortit/NostaKaksikortti.java b/src/domain/kortit/NostaKaksikortti.java index c0c2ae432da8f924a4f2338d19ff388b1948844e..57c5c6638c4004d5b6264c175fa80887eaa56b8f 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) { @@ -8,6 +8,6 @@ public class NostaKaksikortti extends Kortti { } public String toString() { - return "[" + this.vari + ", +2]"; + return this.vari + " nosta kaksi -kortti"; } } diff --git a/src/domain/kortit/Ohituskortti.java b/src/domain/kortit/Ohituskortti.java index 4889d1168c486eb2c840f2e33f4b23360f34e72b..19ae128b081b46df3c1444ff22200f9dfa851e5a 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) { @@ -8,7 +8,7 @@ public class Ohituskortti extends Kortti { } public String toString() { - return "[" + this.vari + ", �]"; + return this.vari + " ohituskortti"; } } diff --git a/src/domain/kortit/Peruskortti.java b/src/domain/kortit/Peruskortti.java index 3328ffc8890a7b281c542f17a21e116ac9c5e048..c5170345c6a2ad2ebe80bedd5fce515edf6be60c 100644 --- a/src/domain/kortit/Peruskortti.java +++ b/src/domain/kortit/Peruskortti.java @@ -14,7 +14,7 @@ public class Peruskortti extends Kortti { } public String toString() { - return "[" + this.vari + ", " + this.numero + "]"; + return this.vari + " peruskortti numero " + this.numero; } diff --git a/src/domain/kortit/Suunnanvaihtokortti.java b/src/domain/kortit/Suunnanvaihtokortti.java index 92fdb85f8686bd2f753a35276d8104c4234e0646..7383ffbe9c6d756856e802054f00a878c1db773e 100644 --- a/src/domain/kortit/Suunnanvaihtokortti.java +++ b/src/domain/kortit/Suunnanvaihtokortti.java @@ -1,12 +1,12 @@ package domain.kortit; -public class Suunnanvaihtokortti extends Kortti { +public class Suunnanvaihtokortti extends Kortti implements Erikoiskortti { public Suunnanvaihtokortti(String vari) { super(vari); } public String toString() { - return "[" + this.vari + ", <->]"; + return this.vari + " suunnanvaihtokortti"; } } diff --git a/src/domain/korttipakat/Nostopakka.java b/src/domain/korttipakat/Nostopakka.java index e179604ad14e32e0141cb3301d64117351cfdbfd..186e2cab12d1a9abf3b519dc362b090fbafa3ca3 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 bbe4d29445da124a8db18c4797969195d60b9f07..7118b11971053cf6eb06781bdba634b2dd1ba6c2 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 ab43c193b982b07566a5f7e98b0c724b60a4f7c1..a6202e875b29dbc641463f5eaa25f5058403eb4a 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 c2f5fb039cba81d8bdc25d567af6a9f20fa5b4d7..0e80f8f33f81563ff82a04f27bea59e09fb1a7c3 100644 --- a/src/logiikka/Peli.java +++ b/src/logiikka/Peli.java @@ -31,10 +31,10 @@ public class Peli { public Peli() { this.pelaajat = new ArrayList<>(); - this.pelaajat.add(new Ihmispelaaja("Pelaaja")); // pelaaja nro 0 - this.pelaajat.add(new Tietokonepelaaja("Tietokone 1")); - this.pelaajat.add(new Tietokonepelaaja("Tietokone 2")); - this.pelaajat.add(new Tietokonepelaaja("Tietokone 3")); + this.pelaajat.add(new Ihmispelaaja("pelaaja")); // pelaaja nro 0 + this.pelaajat.add(new Tietokonepelaaja("tietokone 1")); + this.pelaajat.add(new Tietokonepelaaja("tietokone 2")); + this.pelaajat.add(new Tietokonepelaaja("tietokone 3")); this.nostopakka = new Nostopakka(); @@ -158,12 +158,10 @@ public class Peli { * ottamaan vastaan Nosta kaksi -korttia tai Nosta 4-jokeri -korttia. */ if (kortti instanceof Jokerikortti) { - do{ - System.out.println("Valitse v�ri (sininen, punainen, keltainen, vihre�):"); - System.out.print(">"); - String vari = lukija.next(); - this.vari = vari; - }while (!(this.vari.equals("sininen")||this.vari.equals("punainen")||this.vari.equals("keltainen")||this.vari.equals("vihre�"))); + System.out.println("Valitse v�ri (sininen, punainen, keltainen, vihre�):"); + System.out.print(">"); + String vari = lukija.next(); + this.vari = vari; this.paivitaVuoronumero(); kelvollinenKortti = true; } @@ -188,12 +186,10 @@ public class Peli { return false; } this.annaPelaaja(seuraavaksiVuorossa).nostaNeljaKorttia(this.nostopakka); - do{ - System.out.println("Valitse v�ri (sininen, punainen, keltainen, vihre�):"); - System.out.print(">"); - String vari = lukija.next(); - this.vari = vari; - }while (!(this.vari.equals("sininen")||this.vari.equals("punainen")||this.vari.equals("keltainen")||this.vari.equals("vihre�"))); + System.out.println("Valitse v�ri (sininen, punainen, keltainen, vihre�):"); + System.out.print(">"); + String vari = lukija.next(); + this.vari = vari; this.paivitaVuoronumero(); kelvollinenKortti = true; } @@ -206,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."); @@ -223,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."); @@ -240,20 +236,18 @@ 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."); } this.suuntaKasvava = !this.suuntaKasvava; - paivitaVuoronumero(); - paivitaVuoronumero(); kelvollinenKortti = true; } 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 @@ -264,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; @@ -286,6 +280,7 @@ public class Peli { return false; } this.vari = null; + System.out.println(pelaaja.annaNimi() + " pelasi kortin: " + kortti); return true; } @@ -344,6 +339,7 @@ public class Peli { } } if (pelaajallaSopivanVarinenKortti) { + System.out.println("Et voi k�ytt�� Nosta 4 -korttia, jos sinulla on sopivan v�rinen kortti."); return false; } this.annaPelaaja(seuraavaksiVuorossa).nostaNeljaKorttia(this.nostopakka); @@ -364,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; } @@ -380,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; } @@ -396,18 +392,16 @@ 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; - paivitaVuoronumero(); - paivitaVuoronumero(); kelvollinenKortti = true; System.out.println(pelaaja.annaNimi() + " pelasi kortin: " + kortti); } 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 d1fbdcbb88e84bf18e2cb31766ee76229a9f5909..858b673b4d7792cd96115aa52bc0c5a791566318 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,17 +49,27 @@ 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) { Pelaaja peliVuorossa = peli.annaPelaaja(peli.annaSeuraavaksiVuorossa()); -// System.out.println("Pelivuorossa on: " + peliVuorossa.annaNimi() -// + " (Pisteet: " + peliVuorossa.laskePisteet() + ")"); + System.out.println("Pelivuorossa on: " + peliVuorossa.annaNimi() + + " (Pisteet: " + peliVuorossa.laskePisteet() + ")"); System.out.println(); @@ -81,7 +91,7 @@ public class Tekstikayttoliittyma { pelaaja.tulostaKortit(); System.out.println("Kirjoita kortin numero pelataksesi kortin tai \"nosta\" nostaaksesi kortin."); - System.out.print("> "); + System.out.print(">"); String input = this.lukija.next(); List<Kortti> kortit = pelaaja.annaKortit(); if (input.equals("nosta")) { @@ -116,8 +126,6 @@ public class Tekstikayttoliittyma { if (!kelvollinenKortti) { if (kortinNumero == peliVuorossa.annaKortit().size()-1) { peliVuorossa.nostaKortti(nostopakka); //ei sopivaa korttia -// System.out.println((peli.annaPelaaja(peli.annaSeuraavaksiVuorossa()).annaNimi()) + " nosti yhden kortin"); //Faulty, saved for syntax - System.out.println(peliVuorossa.annaNimi() + " nosti yhden kortin"); //Vaikutti rikkovan jotain? En tied� varmaksi. Nyt n�ytt�� jo toimivan kelvollinenKortti = true; } else { kortinNumero++; @@ -126,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 } + } } }