spielkarten austeilen

feiste

Bekanntes Mitglied
Hey
hab in der schule grade das 2.jahr Informatik begonnen
und würde gerne das Spiel "Schafkopf" erstmal soweit programmieren,
dass man von allen 4 Spielern die Karten sehen kann und, dass 1 Spieler alle Karten von allen 4 Spieler bedienen kann.

Alles was ihr über das Spiel wissen müsst:
- 4 Spieler
- jeweils 8 Karten pro Spieler
-> insgesamt 32 Karten

Jetzt möchte ich, dass jeder Spieler 8 Karten ausgeteilt bekommt.

Nur ich weiß nicht wie ich es hinbekommen soll, dass zufällig eine der 32 Karten ausgeteilt wird
und dann nur die anderen 31 karten ausgeteilt werden usw.

dachte mir dass ich erstmal alle karten in an Array schreibe also so int etwa:

Java:
public class Spiel
{
BILD[] karten;

public Spiel()
{
karten = new BILD[32];

for(j=0 ; j < karten.length ; j=j+1)
        {
            holz[0] = new BILD("karte1.jpg");
            holz[1] = new BILD("karte2.jpg");
            holz[2] = new BILD("karte3.jpg");
            // ...
            holz[31] = new BILD("karte32.jpg");
           

        }
}
}

stimmen denn meine ersten schritte schon?

Jetzt brauche ich eben eine Methode

"kartenausteilen()"

in der jeder Spieler 8 Karten bekommt.
Eigentlich reicht es mir auch, wenn mir jmd sagen kann,
wie ich jetzt alle 32 karten an einer zufälligen Stelle
( sagen wir mal es gibt Stelle 1-32) austeilen kann.


Danke für eure Hilfe :)
 

Marco13

Top Contributor
Variablennamen klein schreiben. Es könnte hilfreich sein, sich die Karten einmal in einem Array zu speichern, in dem die Reihenfolge bekannt ist, und dann nochmal in einem, in dem sie gemischt sind (ist aber nur ein Gedanke - du wirst dir sowieso noch ein bißchen über die Struktur Gedanken machen müssen)

Zum Mischen der Karten könntest du sie auch eine List<Bild> legen, die die dann mit Collections.shuffle mischen.
 

Melfis

Aktives Mitglied
Zum mischen:
Java:
ArrayList arraylist = new ArrayList();

for(int i=0;i<32;i++){
arraylist.add(holz[i]);
}
Collections.shuffle(arraylist);

MFG Melfis

Edit: Marco war schneller
 
Zuletzt bearbeitet:
J

jDennis79

Gast
Ergänzend zu den Vorpostern und als Antwort auf deine Frage: Eine Liste hat gegenüber einem "normalen" Array auch den Vorteil, dass du eine Karte, die an einen Spieler verteilt ist, daraus relativ einfach entfernen kannst - sie *kann* also gar nicht doppelt verteilt werden.

Aber wie Marco schon sagte, du wirst dir über die Struktur noch einige Gedanken machen müssen. Ich bin da wahrscheinlich ein schlechter Ratgeber, weil ich selber dazu neige, drauflos zu programmieren ohne genügend über das Problem nachzudenken. Aber andererseits kann ich dir genau *deshalb* versichern, dass du dich damit in Teufels Küche bringst.

Du solltest dir zum Beispiel vorher überlegen, welche Bauteile deine Programm benötigt (Klassen, Methoden, etc.) und wie diese miteinander in Beziehung stehen und interagieren. Bei deinem Code oben hast du z. B. zwar die Bilder der Karten schön in einem Array gespeichert, aber anhand von 32 jpgs (oder was auch immer) kann dein Code ja keine Punktewertung vornehmen. Solche Probleme *während* des codens zu lösen statt vorher führt nur zu einem heillosen Durcheinander und endet meist in einer Sackgasse.
 

hdi

Top Contributor
Interessant könnte für dich auch die Klasse
Code:
ArrayDeque
sein. Wie eine ArrayList ist das eine Collection zur Speicherung einer Menge an Daten. Allerdings Stack-basiert, d.h. sie arbeitet nach dem Last-In-First-Out Prinzip und bietet u.a. die Methoden push() und poll(). Ist eigentlich prädestiniert für einen Kartenstapel, und vielleicht etwas intuitiver zu benutzen für das Austeilen.

Und generell als Tipp für Kartenspiele: Verwende Enumerationen für Schlag und Farbe einer Karte. Das ermöglicht dir einen einfachen Vergleich der Karten und kann auch bei der Bewertung einer Karte helfen.

Ach, und nochwas: Du musst höllisch aufpassen, wie genau du die Karten erzeugst. Am besten du bleibst da ganz an der Realität und stellst sicher, dass es jede der 32 Karten genau einmal im Programm gibt. Wenn du anfängst Karten öfters zu erzeugen usw könntest du in Probleme in Verbindung mit Collections wie ArrayList usw rennen. (Stichwort equals/hashCode)

Und schick mir dein Programm wenn's fertig ist! Ich bin ein riesen Schafkopf-Fan!! :toll:

(Hast du eigentlich vor auch gegen den Computer spielen zu lassen? Hab mich nämlich auch mal an nem SK-Game probiert, musste aber feststellen dass die Implementierung eines halbwegs schlauen PC-Gegners verdammt übel ist.. KI ist ja generell nicht ohne, und Schafkopf ist glaube ich das komplexeste Kartenspiel überhaupt. Bring mal dem Computer bei dass er Gras nachspielen soll wenn's vor 3 Runden angespielt wurde aber die 10 fehlt :D)
 
Zuletzt bearbeitet:
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben