package de.nak;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Random;
public class Einundzwanzig
{
private ArrayList<Karte> stapel = new ArrayList<Karte>();
public static Einundzwanzig einundzwanzig = new Einundzwanzig();
public Menschlicherspieler menschlicherspieler = new Menschlicherspieler();
public Computerspieler computerspieler = new Computerspieler();
private File f = new File("C:\\test.txt");
// private Rank kartenWert;
// private Suit kartenFarbe;
//
//
//
// public void eSortieren(Rank rank, Suit suit) {
// this.kartenWert = rank;
// this.kartenFarbe = suit;
// }
// public Suit getSuit() {
// return kartenFarbe;
// }
//
// public Rank getRank() {
// return kartenWert;
// }
//
// public String toString() {
// return kartenWert + " - " + kartenFarbe;
// }
//
//
// public enum Suit {
// PIK, KARO, KREUZ, HERZ
// }
//
//
// public enum Rank {
// AS, BUBE, DAME, KOENIG, SECHS, SIEBEN, ACHT, NEUN, ZEHN
// }
//
// public void Deck3(){
// for (Suit suit : Suit.values()) {
// for (Rank rank : Rank.values()) {
// stapel.add(new stapel(rank, suit));
// }
// }
// }
// public Card3 getRandomCard()
// {return cards.get((int)(Math.random()*cards.size()));}
// }
//
//}
public static int[] spielstand =
{ 0, 0 };
public static int[] spielstandsicherung =
{ 0, 0 };
public static int[] getSpielstandsicherung()
{
return spielstandsicherung;
}
public static void setSpielstandsicherung(int[] spielstandsicherung)
{
Einundzwanzig.spielstandsicherung = spielstandsicherung;
}
public static void main(String[] args)
{
einundzwanzig.wilkommen();
einundzwanzig.start();
}
public void wilkommen()
{
System.out.println(
"\n## # # ## # " +
"\n# # # ## ### # # # ## ### # # " +
"\n## # # # # ## # # # # ## " +
"\n# # ## ### ### # # # # ### ### # # " +
"\n## # "
+"\n "
+"\n "
);
}
public void start()
{
einundzwanzig.stapelErstellen();
einundzwanzig.spielStarten();
einundzwanzig.spielfeldAusgabe();
einundzwanzig.spielrunde();
}
public void stapelErstellen()
{
stapelEinfuegen();
stapelMischen();
}
public void stapelEinfuegen()
{
String[] farbe =
{ "Pik", "Kreuz", "Karo", "Herz" };
String[] name =
{ "As", "Bube", "Dame", "Koenig", "7", "8", "9", "10" };
int[] werte =
{ 1, 2, 3, 4, 7, 8, 9, 10 };
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 7; j++)
{
stapel.add(new Karte(name[j], farbe[i], werte[j]));
}
}
}
/////////
public void stapelMischen()
{
Karte aktuelleKarte;
int stapelGrenze;
Random r = new Random();
for (int i = 0; i < stapel.size(); i++)
{
stapelGrenze = r.nextInt(stapel.size());
aktuelleKarte = stapel.get(i);
stapel.set(i, stapel.get(stapelGrenze));
stapel.set(stapelGrenze, aktuelleKarte);
}
}
public void spielStarten()
{
gebeKarteMenschlicherspieler();
gebeKarteMenschlicherspieler();
gebeKarteComputerspieler();
gebeKarteComputerspieler();
}
public void stapelLoeschen()
{
stapel.clear();
}
public void gebeKarteMenschlicherspieler()
{
menschlicherspieler.erhalteKarte(stapel.get(0));
stapel.remove(0);
}
public void gebeKarteComputerspieler()
{
computerspieler.erhalteKarte(stapel.get(0));
stapel.remove(0);
}
public void spielrunde()
{
while (Computerspieler.getComputerHandWert() <= 21
&& Menschlicherspieler.getMenschHandWert() <= 21)
{
if ((Computerspieler.getComputerHandWert() < 21 && Menschlicherspieler
.getMenschHandWert() < 21))
{
dialogSpieler();
if (Menschlicherspieler.getMenschHandWert() > 21)
{
zwischenstandComputerGewonnen();
break;
}
dialogComputer();
}
if (Menschlicherspieler.getMenschHandWert() == Computerspieler
.getComputerHandWert())
{
System.out.println("Unentschieden!");
System.out.println("Spielstand: Du: " + spielstand[0]
+ " Computer: " + spielstand[1]);
break;
}
if (Menschlicherspieler.getMenschHandWert() > 21)
{
zwischenstandComputerGewonnen();
break;
}
if (Menschlicherspieler.getMenschHandWert() == 21
&& Computerspieler.getComputerHandWert() < 21)
{
zwischenstandSpielerGewonnen();
break;
}
if (Computerspieler.getComputerHandWert() == 21)
{
zwischenstandComputerGewonnen();
break;
}
if (Computerspieler.getComputerHandWert() > 21)
{
zwischenstandSpielerGewonnen();
break;
}
}
hauptmenuAuswertung(hauptMenu());
}
private void zwischenstandSpielerGewonnen()
{
System.out.println("Du hast gewonnen");
spielstand[0] = spielstand[0] + 1;
System.out.println("Spielstand: Du: " + spielstand[0] + " Computer: "
+ spielstand[1]);
}
private void zwischenstandComputerGewonnen()
{
System.out.println("Computer hat gewonnen");
spielstand[1] = spielstand[1] + 1;
System.out.println("Spielstand: Du: " + spielstand[0] + " Computer: "
+ spielstand[1]);
}
public void spielfeldAusgabe()
{
for (int i = 0; i < computerspieler.getHandComputer().size(); i++)
{
System.out.println(computerspieler.getHandComputer().get(i)
.toString());
}
System.out.println("*Computer hat Gesamtpunktzahl: "
+ Computerspieler.getComputerHandWert() + "*");
for (int i = 0; i < menschlicherspieler.getHandSpieler().size(); i++)
{
System.out.println(menschlicherspieler.getHandSpieler().get(i)
.toString());
}
System.out.println("*Spieler hat Gesamtpunktzahl: "
+ Menschlicherspieler.getMenschHandWert() + "*");
}
public void dialogSpieler()
{
System.out.println("");
System.out.println("~Spieler ist dran~");
System.out.println("Weitere Karte [(1) ja (2) nein]?");
int eingabe = Eingabe.leseInt();
if (eingabe == 1 && Menschlicherspieler.getMenschHandWert() < 21)
{
gebeKarteMenschlicherspieler();
int k=1;
for (int i = 0; i<1;i++)
{ k+=1;
};
System.out.print(menschlicherspieler.getHandSpieler().get(k)
.toString());
System.out.println("");
System.out.println("*Spieler hat Gesamtpunktzahl: "
+ Menschlicherspieler.getMenschHandWert() + "*");
}
}
public void dialogComputer()
{
System.out.println("Computer ist dran");
computerAnfrageWeitereKarte();
if (computerAnfrageWeitereKarte() == 2)
{
System.out.println("-Computer passt-");
} else
{
gebeKarteComputerspieler();
int k=1;
for (int i = 0; i<1;i++)
{ k+=1;
};
System.out.print(computerspieler.getHandComputer().get(k)
.toString());
System.out.println("*Computer hat Gesamtpunktzahl: "
+ Computerspieler.getComputerHandWert() + "*");
}
}
public int computerAnfrageWeitereKarte()
{
if (Computerspieler.getComputerHandWert() < Menschlicherspieler
.getMenschHandWert())
{
int i = 1;
return i;
} else if (Computerspieler.getComputerHandWert() > Menschlicherspieler
.getMenschHandWert()
&& Menschlicherspieler.getMenschHandWert() != 21)
{
int i = 2;
return i;
} else if (Computerspieler.getComputerHandWert() == Menschlicherspieler
.getMenschHandWert()
&& Computerspieler.getComputerHandWert() < 20)
{
System.out.println("Computer behält Karten");
int i = 3;
return i;
} else
{
int i = 1;
return i;
}
}
public int hauptMenu()
{
System.out.println("\n--------------------" + "\n Wähle weise!"
+ "\n (1) weiteres Spiel" + "\n (2) Spiel beenden"
+ "\n (3) Spielstand speichern" + "\n (4) Spielstand laden"
+ "\n (5) aktuellen Punktestand anzeigen");
return Eingabe.leseInt();
}
public void spielSpeichern()
{
spielstandsicherung[0] = spielstand[0];
spielstandsicherung[1] = spielstand[1];
listInDatei();
System.out.println("Spielstand wurde gespeichert!");
}
public void spielLaden()
{
listVonDatei();
spielstand[0] = spielstandsicherung[0];
spielstand[1] = spielstandsicherung[1];
System.out.println("Spielstand geladen" + "\n Du: " + spielstand[0]
+ " - Computer: " + spielstand[1]);
}
public void hauptmenuAuswertung(int x)
{
if (x < 1 || x > 5)
{
System.out
.println("Bitte gültigen Wert (1,2,3,4 oder 5) eingeben!");
hauptmenuAuswertung(hauptMenu());
}
switch (x)
{
case 1:
System.out.println("Neues Spiel wird gestartet...");
Menschlicherspieler.setMenschHandWert(0);
Computerspieler.setComputerHandWert(0);
einundzwanzig.stapelLoeschen();
computerspieler.neueHand();
menschlicherspieler.neueHand();
Menschlicherspieler.setMenschHandWert(0);
Computerspieler.setComputerHandWert(0);
Einundzwanzig.main(new String[]
{ "1", "2", });
break;
case 2:
System.out.println("Das Spiel wurde beendet");
System.exit(1);
break;
case 3:
spielSpeichern();
hauptmenuAuswertung(Eingabe.leseInt());
break;
case 4:
spielLaden();
hauptmenuAuswertung(Eingabe.leseInt());
break;
case 5:
spielstandAusgabe();
hauptmenuAuswertung(Eingabe.leseInt());
break;
}
}
private void spielstandAusgabe()
{
System.out
.println("Spielstand: " + spielstand[0] + ":" + spielstand[1]);
}
private void listInDatei()
{
StringBuilder sb = new StringBuilder();
try
{
f.createNewFile();
PrintWriter printWriter = new PrintWriter(new FileWriter(f));
for (int i = 0; i < spielstandsicherung.length; i++)
{
sb.append(spielstandsicherung[i]);
if (!(i + 1 == spielstandsicherung.length))
{
sb.append(":");
}
}
printWriter.println(sb.toString());
printWriter.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
public void listVonDatei()
{
FileReader fr;
try
{
fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String line;
String[] sArr = null;
while ((line = br.readLine()) != null)
{
sArr = line.split(":");
}
int[] neuerSpielstand = new int[sArr.length];
for (int i = 0; i < sArr.length; i++)
{
neuerSpielstand[i] = Integer.parseInt(sArr[i]);
}
setSpielstandsicherung(neuerSpielstand);
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
}
}