import java.util.*;
class Spielkarte{
char farbe;
char ziffer;
Spielkarte(char farbe,char ziffer){
this.farbe = farbe;
this.ziffer = ziffer;
}
Spielkarte(){}
}
class siebuvier{
public static void main(String[] args){
Spielbrett.neuesSpiel();
}
}
class Spielbrett{
static int grundeinsatz;
static boolean neuesspiel = false;
Spieler selbst = new Spieler();
Spieler pc = new Spieler();
static Vector<Spieler> spielerverzeichnis = new Vector<Spieler>();
Spieler bank = new Spieler();
Spieler spieler = new Spieler();
static int pot;
static Stack <Spielkarte> ziehstapel = new Stack <Spielkarte>();
static void neuesSpiel(){
spielerverzeichnis.addElement(selbst);
spielerverzeichnis.addElement(pc);
neuesspiel= true;
selbst.geld= selbst.anfangsgeld;
pc.geld = pc.anfangsgeld;
neuesBuch();
}
static void neuesBuch(){
Kartenstapel.erschaffeNeuenZiehstapel();
if (!neuesspiel){
if (bank == pc) {
spielerverzeichnis(selbst).nimmtGeldAusPot(pot);
spieler = pc;
bank = selbst;
}
else {
spieler.nimmtGeldAusPot();
bank = pc;
spieler = selbst;
}
}
else{
boolean antwort = DosMenue.werMachtBank();
if (antwort){
bank = selbst;
spieler = pc;
}
else{
bank = pc;
spieler = selbst;
}
}
DosMenue.frageHoeheGrundEinsatz();
ziehstapel.erschaffeNeuenZiehStapel();
for (int i = 0; i < spielerverzeichnis.size();i++){
spielerverzeichnis.get(i).gibAlleKartenZurueck();
}
neuesspiel =true;
neueRunde();
}
static void neueRunde(){
neuesspiel = false;
spieler.gesamteinsatz = 0;
spieler.einsatz = 0;
for(int i = 0; i < spielerverzeichnis.size(); i++){
spielerverzeichnis.get(i).gibAlleKartenZurueck();
}
bank.legtGeldInPot(grundeinsatz);
bank.ziehtKarte();
spieler.legtGeldInPot(grundeinsatz);
if(DosMenue.frageEinsatzErhoehen()){
spieler.legtGeldInPot(einsatz);
spieler.gesamteinsatz =+einsatz;
}
spieler.ziehtKarte();
while(DosMenue.frageWeitereKarte()){
spielerErhaeltWeitereKarte();
}
bank.ziehtKarte();
if(bank.festellenGewonnen())
neueRunde();
while(DosMenue.frageWeitereKarte()){
bankErhaeltWeitereKarte();
}
}
static void bankErhaeltWeitereKarte(){
bank.ziehtKarte();
if(bank.feststellenGewonnen())
neueRunde();
if(bank.feststellenVerloren()){
spieler.nimmtGeldAusPot(gesamteinsatz);
neueRunde();}
}
static void spielerErhaeltWeitereKarte(){
if(DosMenue.frageEinsatzErhoehen()){
spieler.legtGeldInPot(einsatz);
spieler.gesamteinsatz =+ einsatz;}
spieler.ziehtKarte();
if(spieler.feststellenGewonnen()){
spieler.nimmtGeldAusPot(spieler.gesamteinsatz);
neueRunde();}
if(spieler.feststellenVerloren()){
neueRunde();
}
}
}
class Kartenstapel{
static Random rand = new Random();
static Vector<Spielkarte> vorlagestapel = new Vector<Spielkarte>();
static Vector<Integer> zufallszahlspeicher = new Vector<Integer>();
static void erschaffeNeuenZiehstapel(){
Spielkarte kreuzass = new Spielkarte('x','a');
Spielkarte kreuzkoenig = new Spielkarte ('x','k');
Spielkarte kreuzdame = new Spielkarte ('x','d');
Spielkarte kreuzbube = new Spielkarte ('x','b');
Spielkarte kreuzzehn = new Spielkarte ('x','x');
Spielkarte kreuzneun = new Spielkarte ('x','9');
Spielkarte kreuzacht = new Spielkarte ('x','8');
Spielkarte kreuzsieben = new Spielkarte ('x','7');
Spielkarte pikass = new Spielkarte('p','a');
Spielkarte pikkoenig = new Spielkarte ('p','k');
Spielkarte pikdame = new Spielkarte ('p', 'd');
Spielkarte pikbube = new Spielkarte ('p', 'b');
Spielkarte pikzehn = new Spielkarte ('p','x');
Spielkarte pikneun = new Spielkarte ('p','9');
Spielkarte pikacht = new Spielkarte ('p','8');
Spielkarte piksieben = new Spielkarte('p','7');
Spielkarte herzass = new Spielkarte ('h','a');
Spielkarte herzkoenig = new Spielkarte('h', 'k');
Spielkarte herzdame = new Spielkarte ('h','d');
Spielkarte herzbube = new Spielkarte ('h', 'b');
Spielkarte herzzehn = new Spielkarte ('h','x');
Spielkarte herzneun = new Spielkarte ('h','9');
Spielkarte herzacht = new Spielkarte ('h','8');
Spielkarte herzsieben = new Spielkarte ('h','7');
Spielkarte karoass = new Spielkarte('k','a');
Spielkarte karokoenig = new Spielkarte ('k', 'k');
Spielkarte karodame = new Spielkarte ('k', 'd');
Spielkarte karobube = new Spielkarte ('k', 'b');
Spielkarte karozehn = new Spielkarte ('k', 'x');
Spielkarte karoneun = new Spielkarte ('k','9');
Spielkarte karoacht = new Spielkarte ('k','8');
Spielkarte karosieben = new Spielkarte ('k', '7');
vorlagestapel.add(kreuzass);
vorlagestapel.add(kreuzkoenig);
vorlagestapel.add(kreuzdame);
vorlagestapel.add(kreuzbube);
vorlagestapel.add(kreuzzehn);
vorlagestapel.add(kreuzneun);
vorlagestapel.add(kreuzacht);
vorlagestapel.add(kreuzsieben);
vorlagestapel.add(pikass);
vorlagestapel.add(pikkoenig);
vorlagestapel.add(pikdame);
vorlagestapel.add(pikbube);
vorlagestapel.add(pikzehn);
vorlagestapel.add(pikneun);
vorlagestapel.add(pikacht);
vorlagestapel.add(piksieben);
vorlagestapel.add(herzass);
vorlagestapel.add(herzkoenig);
vorlagestapel.add(herzdame);
vorlagestapel.add(herzbube);
vorlagestapel.add(herzzehn);
vorlagestapel.add(herzneun);
vorlagestapel.add(herzacht);
vorlagestapel.add(herzsieben);
vorlagestapel.add(karoass);
vorlagestapel.add(karokoenig);
vorlagestapel.add(karodame);
vorlagestapel.add(karobube);
vorlagestapel.add(karozehn);
vorlagestapel.add(karoneun);
vorlagestapel.add(karoacht);
vorlagestapel.add(karosieben);
int zufallszahl = 0;
for (int i= 1 ; i <33;i++){
zufallszahl = zufallsZahl0Bis31();
if(Spielbrett.zufallszahlspeicher.contains(new Integer(zufallszahl))){
while (Spielbrett.zufallszahlspeicher.contains(new Integer(zufallszahl))){
zufallszahl= zufallsZahl0Bis31();
}
}
ziehstapel.push(vorlagestapel.get(zufallszahl));
Kartenstapel.zufallszahlspeicher.addElement(new Integer(zufallszahl));
}
}
static void gibKartenStapelAus(Vector<Spielkarte> v){
for(int i=0; i<v.size();i++){
System.out.println(v.get(i).farbe + " "+v.get(i).ziffer);
}
}
static int zufallsZahl0Bis31(){
int zahl = rand.nextInt((31-0+1)+0);
//Spielbrett.intWertAusgeben(zahl);
return zahl;
}
static void intWertAusgeben(int zahl){
System.out.println("Der Wert ist :" + zahl);
}
static void vectorAusgeben(Vector<Spielkarte> v,int pos){
System.out.println(" GIB Karte an Position "+pos +"an");
System.out.println(v.get(pos).farbe +" "+ v.get(pos).ziffer);
}
static void ziehStapelAusgeben(){
Vector<Spielkarte> zwischenstapel = new Vector<Spielkarte>();
for(int i = 0; i < 32;i++){
zwischenstapel.add(ziehstapel.pop());
System.out.println(zwischenstapel.get(i).farbe+" "+zwischenstapel.get(i).ziffer);
}
for (int i = 0 ; i < 32 ; i++){
ziehstapel.push(zwischenstapel.get(i));
}
}
}
class Spieler{
int einsatz;
int gesamteinsatz;
int geld;
final int anfangsgeld = 500;
Vector<Spielkarte> handkarten = new Vector<Spielkarte>();
boolean bankbesitz = false;
void ziehtKarte(){
if (Spielbrett.ziehstapel == 1)
Spielbrett.neuesBuch();
handstapel.add(Spielbrett.ziehstapel.pop());
}
void gibtAlleKartenZurueck(){
handstapel.removeAllElements();
handstapel.trimToSize();
}
void legtGeldInPot(int geld){
pot =+ geld;
this.geld =- geld;
}
void nimmtGeldAusPot(int geld){
pot =- geld;
this.geld =+ geld;
}
void errechneGrundEinsatzPc(){
zufallszahl = Kartenstapel.rand.nextInt((1-5+1)+1);
switch (zufallszahl){
case 1: Spielbrett.grundeinsatz = 10;
break;
case 2: Spielbrett.grundeinsatz = 25;
break;
case 3: Spielbrett.grundeinsatz = 35;
break;
case 4: Spielbrett.grundeinsatz = 40;
break;
case 5: Spielbrett.grundeinsatz = 50;
break;
}
}
void grundEinsatzFestlegenPc(){
errechneGrundEinsatzPc();
for (int i= 0;i<spielerverzeichnis.size();i++){
while (grundeinsatz > spielerverzeichnis.get(i).geld){
errechneGrundEinsatzPc();
}
}
}
boolean feststellenGewonnen(){
byte fuenfbilder = 0;
boolean zweiasse = false;
int punkte = 0;
for(int i = 0; i < handkarten.size(); i++){
char tempziffer= ' ';
tempziffer = handkarten.get(i).ziffer;
switch(tempziffer){
case 'a': punkte =+ 11;
if (zweiasse == true )
return true;
if (i <3)
zweiasse = true;
break;
case 'k': punkte =+ 4;
fuenfbilder =+1;
break;
case 'd': punkte =+ 3;
fuenfbilder =+1;
break;
case 'b': punkte =+ 2;
fuenfbilder =+1;
break;
case 'x': punkte =+ 10;
break;
case '9': punkte =+9;
break;
case '8': punkte =+ 8;
break;
case '7': punkte =+ 7;
break;
}
if (punkte == 21 )
return true;
else if(handkarten.size() == 5 && fuenfbilder == 5)
return true;
else
return false;
}
}
boolean feststellenVerloren(){
char tempziffer =' ';
int punkte =0;
for(int i = 0; i < handkarten.size(); i++){
tempziffer = handkarten.get(i).ziffer;
switch(tempziffer){
case 'a': punkte =+ 11;
break;
case 'k': punkte =+ 4;
fuenfbilder =+1;
break;
case 'd': punkte =+ 3;
fuenfbilder =+1;
break;
case 'b': punkte =+ 2;
fuenfbilder =+1;
break;
case 'x': punkte =+ 10;
break;
case '9': punkte =+9;
break;
case '8': punkte =+ 8;
break;
case '7': punkte =+ 7;
break;
}
}
if(punkte > 21)
return true;
else
return false;
}
}
class DosMenue{
static char auswahl;
static String eingabe;
static BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
static boolean werMachtBank(){
System.out.println("Wollen sie als erstes die Bank machen ?....................................<j/n>");
try{
eingabe = buff.readLine();
char temp = eingabe.charAt(0);
switch (temp){
case 'j': return true;
case 'n': return false;
}
}catch(Exception e){
System.out.println("Sie muessen 'j' oder 'n' eingeben !");
werMachtBank();
}
}
static int frageHoeheGrundEinsatz(){
if (bank == selbst){
System.out.println ("Wie hoch soll der Grundeinsatz sein? (höchstens 50 sind erlaubt).........<5-50>");
try{
eingabe = buff.readLine();
Spielbrett.grundeinsatz = Integer.parseInt(eingabe);
}catch(Exception e){
System.out.println("Sie muessen eine Zahl zwischen 5 und 50 eingeben !");
frageHoheGrundEinsatz();
}
if(Spielbrett.grundeinsatz < 5 || Spielbrett.grundeinsatz > 50){
System.out.println("Der Grundeinsatz muss zwischen 5 und 50 liegen !");
frageHoeheGrundEinsatz();
}
}
else
pc.grundEinsatzFestlegenPc();
}
static boolean frageEinsatzErhoehen(){
//selbst wird nach Hoehe des Einsatzes gefragt , Pc kann Einsatz nicht erhoehen
if(spieler == selbst){
System.out.println("Wollen Sie den Einsatz erhöhen ?...........................................<j/n>");
try{
eingabe = buff.readLine();
auswahl = eingabe.charAt(0);
}catch(Exception e){
System.out.println("Sie muessen 'j' oder 'n' eingeben");
frageEinsatzErhoehen();}
switch(auswahl){
case 'j': System.out.println("Um wieviel wollen sie ihren Einsatz erhoehen?............<summe>?");
System.out.println("Sie können höchstens auf "+ Spielbrett.pot+"gehen.");
eingabe = buff.readLine();
spieler.einsatz = Integer.parseInt(eingabe);
return true;
break;
case 'n': return false;
}
}
else {
return false;
}
}
static boolean frageWeitereKarte(){
System.out.println("Wollen Sie eine weitere Karte ? ...............<j/n>");
try{
eingabe = buff.readLine();
auswahl = eingabe.charAt(0);
}catch(Exception e){
System.out.println("Sie muessen 'j' oder 'n' eingeben !");
}
switch(auswahl){
case 'j': return true;
break;
case 'n': return false;
break;
}
}
}