Java Erste Spielereien und die damit verbundenen Probleme eines Anfängers

maxator

Well-known member
ID: 298012
L
19 September 2007
1.847
117
Ich hab bisher nur kleinere Spielereien wie einen Rechner und eine Primzahlstatistik gemacht. Jetzt habe ich mich mal an was "größeres" rangewagt. Allerdings sieht das ganze in meinen Augen noch recht umständlich und zu kompliziert aus. Gibt es Verbesserungsvorschläge?
Würde gerne einfach mal andere Meinungen hören.

PHP:
public class BlackJack
{
 private String wandler;
 private int konto; 
 private int bet;
 private int PunkteImSpiel;
 private int DealerPunkte;
 private int DealerAusstieg;
 private int wurfelzahl;
 private double zufallswert;
 private String A ="A";
 private String zwei ="2";
 private String drei ="3";
 private String vier ="4";
 private String fuenf ="5";
 private String sechs ="6";
 private String sieben ="7";
 private String acht ="8";
 private String neun ="9";
 private String zehn ="10";
 private String J ="j";
 private String D ="D";
 private String K ="K";


    public BlackJack()
    {
        konto = 500;
        bet = 10;   
        DealerAusstieg = 17;
    }
public void gibKontostand()
{
    System.out.print(konto);
}
public void aendereBet(int newBet)
{
    bet = newBet;
}
private void ziehen()
{   
zufallswert = Math.random()*13;
if (zufallswert < 1)
{PunkteImSpiel += 2; System.out.print ("2");}
if (zufallswert > 2 && zufallswert < 2 )
{PunkteImSpiel += 3; System.out.print ("3");}
if (zufallswert > 2 && zufallswert < 3)
{PunkteImSpiel += 4; System.out.print ("4");}
if (zufallswert > 3 && zufallswert < 4)
{PunkteImSpiel += 5; System.out.print ("5");}
if (zufallswert > 4 && zufallswert < 5)
{PunkteImSpiel += 6; System.out.print ("6");}
if (zufallswert > 5 && zufallswert < 6)
{PunkteImSpiel += 7; System.out.print ("7");}
if (zufallswert > 6 && zufallswert < 7)
{PunkteImSpiel += 8; System.out.print ("8");}
if (zufallswert > 7 && zufallswert < 8)
{PunkteImSpiel += 9; System.out.print ("9");}
if (zufallswert > 8 && zufallswert < 9)
{PunkteImSpiel += 10; System.out.print ("10");}
if (zufallswert > 9 && zufallswert < 10)
{PunkteImSpiel += 10; System.out.print ("J");}
if (zufallswert > 10 && zufallswert < 11)
{PunkteImSpiel += 10; System.out.print ("D");}
if (zufallswert > 11 && zufallswert < 12)
{PunkteImSpiel += 10; System.out.print ("K");}
if (zufallswert > 12 && zufallswert < 13)
{PunkteImSpiel += 11; System.out.print ("A");}
}


 private void Dealerziehen()
{   
zufallswert = Math.random()*13;
if (zufallswert < 1)
{DealerPunkte += 2; System.out.print ("2");}
if (zufallswert > 2 && zufallswert < 2 )
{DealerPunkte += 3; System.out.print ("3");}
if (zufallswert > 2 && zufallswert < 3)
{DealerPunkte += 4; System.out.print ("4");}
if (zufallswert > 3 && zufallswert < 4)
{DealerPunkte += 5; System.out.print ("5");}
if (zufallswert > 4 && zufallswert < 5)
{DealerPunkte += 6; System.out.print ("6");}
if (zufallswert > 5 && zufallswert < 6)
{DealerPunkte += 7; System.out.print ("7");}
if (zufallswert > 6 && zufallswert < 7)
{DealerPunkte += 8; System.out.print ("8");}
if (zufallswert > 7 && zufallswert < 8)
{DealerPunkte += 9; System.out.print ("9");}
if (zufallswert > 8 && zufallswert < 9)
{DealerPunkte += 10; System.out.print ("10");}
if (zufallswert > 9 && zufallswert < 10)
{DealerPunkte += 10; System.out.print ("J");}
if (zufallswert > 10 && zufallswert < 11)
{DealerPunkte += 10; System.out.print ("D");}
if (zufallswert > 11 && zufallswert < 12)
{DealerPunkte += 10; System.out.print ("K");}
if (zufallswert > 12 && zufallswert < 13)
{DealerPunkte += 11; System.out.print ("A");}
}
public void SpielStarten()
{ 
PunkteImSpiel = 0;  
ziehen();
System.out.print(" gezogen; Punkte: "+PunkteImSpiel);
}

public void nachziehen()
{
ziehen();
System.out.print(" gezogen; Punkte: "+PunkteImSpiel);
if (PunkteImSpiel == 21)
{
    konto = konto + bet;
    System.out.println("");
    System.out.println("");
    System.out.println("Spiel gewonnen");
    System.out.println("Konto: " + konto);
    PunkteImSpiel = 0;
}
if (PunkteImSpiel > 21)
{
    konto = konto - bet;
    System.out.println("");
    System.out.println("");
    System.out.println("Spiel verloren");
    System.out.println("Konto: " + konto);
    PunkteImSpiel = 0;
}
}

public void ziehenBeenden()
{
System.out.print("Karten Dealer: ");
while (DealerPunkte < DealerAusstieg)
{
    Dealerziehen();
    System.out.print(" ");
}
 
if (DealerPunkte < PunkteImSpiel || DealerPunkte > 21)
{
    konto = konto + bet;
    System.out.println("");
    System.out.println("Punkte Dealer: "+DealerPunkte+ " | Punkte Spieler: "+PunkteImSpiel);
    System.out.println("");
    System.out.println("Spiel gewonnen:");
    System.out.println("Konto: " + konto);   
    PunkteImSpiel = 0;
}
else
{
konto = konto - bet;
    System.out.println("");
    System.out.println("Punkte Dealer: "+DealerPunkte+ " | Punkte Spieler: "+PunkteImSpiel);
    System.out.println("");
    System.out.println("Spiel Verloren:");
    System.out.println("Konto: " + konto);   
    PunkteImSpiel = 0;
}

}

}
 
Zuletzt bearbeitet:
Ich würde die Karten in ein Array packen :think:, dann hast du weniger Deklaration und auch die Zufallsgeschichte wäre nur noch ein Zugriff auf den Index.
 
Wenn du Java programmierst, solltest du dir unbedingt auch angewöhnen, den Java Coding Style einzuhalten.
 
Hallo,
mal ein paar (subjektive) Anregungen meinerseits
  • Konstanten (wie die Karten) als public static
  • was ist der tiefere Sinn dahinter deinen Randomwert beim ziehen als Double zu machen? Auf Integer runden lassen erfüllt doch einen ausrechenden Zweck und du sparst dir die <,>
  • Diese ganze if Abfragerei kannst du auch wesentlich einfacher mittels einer Schleife erledigen (edit: oder noch einfacher ala cybo ;))
  • Das Ziehen ist ja bei Dealer und Spieler gleich also einmal implementieren reicht, arbeite mit Rückgabewerten (ala dealerpunkte += ziehen() wobei ziehen eben den gezogenen wert zurückgibt)
  • Ich kenne mich mit den 17 und 4 Regeln nicht aus aber falls das Blackjack sein soll wie der Konstruktor vermuten lässt sehe ich 2 Regelfehler: Das Ass kann nicht nur 11 sondern auch 1 Punkt zählen und du hast den Spezialfall "Blackjack" (sofort 21) vergessen der den 2,5fachen Einsatz bezahlt (bzw. bei dir dann 1,5 da du den Einsatz in dem Fall nicht abziehst)
  • Ich würde dir empfehlen dir Code Conventions anzueigenen das macht es auch für dich später einfach ältere Sachen zu durchblicken 8)
  • Die leeren Prints kannst du dir auch sparen, für Zeilenumbrüche gibt es extra "Sonderzeichen" ("\n")

Ich erhebe keinen Anspruch auf irgendetwas :ugly:
 
dafür existieren in Java Enums
zunge0999.gif

Hab schon länger nix mehr in Java gemacht ;)
 
Ich hab ein "klassisches" 17 und 4 gemacht.
Ass zählt immer 11, man zieht immer eine Karte, auch die erste einzeln.

Zum Array: Man kann doch damit nur eine Liste machen oder nicht?

mit Index 0-12 und Karten 2-A in meinem Fall ?
Dann hätten die Karten ja immernoch keinen wert, oder nicht?

"(...)Randomwert beim ziehen als Double(...)" -> ich wollts auch erst als int machen, allerdings kam der Fehler "possible lost of precission", ich dachte das liegt an der int-Zahl..

"Sonderzeichen" ("\n")"
-> das hätte ich gebraucht :biggrin:

"Konstanten (wie die Karten) als public static" -> wozu? :X
 
mit Index 0-12 und Karten 2-A in meinem Fall ?
Dann hätten die Karten ja immernoch keinen wert, oder nicht?
Dann gibst du ihnen halt einen Wert ;)

Leg dir dazu eine neue Klasse Card an. Der kannst du Namen, Wert und vielleicht später irgendwann ne passende Grafik geben.
 
Ich würde das so lösen.

Klasse für:
  • Karte
  • Kartenstapel/Talon
  • Benutzer
    • Dealer
    • Spieler

Die Klasse Blackjack bindet dann die einzenlen Klassen ein. So hast du auch gleich wiederverwertbaren Code für andere Kartenspiele.
Der Kartenstapel (Stack) ist wichtig, wenn du sicherstellen möchtest das die Anzahl der Karten realistisch ist (Zwei Kartendecks entspricht acht Assen etc.). Bei deiner jetzigen Einbindung könnten beliebig viele Asse "gezogen" werden.
 
Ich kenn eins: das Informatikstudium :ugly:
defniere das Informatikstudium

klingt als ob getroffene Hunde bellen und als ob du mit 22 noch keine 5 Jahre Informatikstudium hinter Dir hast
Jetzt bestätigst du mich auch noch :yawn: Wie wärs wenn du deine geistigen Ergüsse irgendwo anders hinterlässt wo sie auch Sinn machen? Von "hinter haben" steht auch nirgendwo was also wenn du mich schon was unterstellen willst bleib bei den Fakten, nicht bei deinen Einbildungen :ugly:
 
hab doch nur gesagt wie es sich anhört nicht das es Fakten sind ;)
Ich merk schon, dass du gerne mitredest ohne Ahnung zu haben und Dinge unterstellst :roll:
Schonmal dran gedacht, dass "Hunde" auch "bellen" weil du einfach nur verdammt dreist bist und sich das nicht jeder gefallen lässt? :evil:
Bitte sehr der Herr
Und nun möchte ich dich bitten dich in Zukunft (wenigstens mir gegenüber) mit derart dreisten Unterstellungen zurückzuhalten und deine Klappe zu halten wenn du nichts außer unhaltbaren Vermutungen zu äußern hast ;)

PS: ich war doch glatt so dreist das aktuelle Semester mitzuzählen, Schande über mich :(
 
Ich merk schon, dass du gerne mitredest ohne Ahnung zu haben und Dinge unterstellst :roll:
Unterstellung von Dir ;)

Schonmal dran gedacht, dass "Hunde" auch "bellen" weil du einfach nur verdammt dreist bist und sich das nicht jeder gefallen lässt? :evil:
ja, aber wie Du mitspielst :mrgreen:

Und nun möchte ich dich bitten dich in Zukunft (wenigstens mir gegenüber) mit derart dreisten Unterstellungen zurückzuhalten und deine Klappe zu halten wenn du nichts außer unhaltbaren Vermutungen zu äußern hast ;)
also das klingt nun aber so als wärst Du zu allem Überfluss auch sexuell nicht ausgelastet
 
Unterstellung von Dir ;)


ja, aber wie Du mitspielst :mrgreen:


also das klingt nun aber so als wärst Du zu allem Überfluss auch sexuell nicht ausgelastet
Wenn du den Beweis bereits geliefert hast ist es ein Faktum. Toll, dass du es scheinbar nicht lassen kannst dir irgendetwas auszudenken. Muss ich jetzt einen P*rno drehen damit du Ruhe gibst oder benimmst du dich ausnahmsweise mal wenigstens ansatzweise deines (angeblichen) Alters entsprechend und siehst ein, dass du nur Schwachsinn von dir gegeben hast?