Die Applikationsklassen für Kartenspiele werden in der Regel von der Klasse CardGame abgeleitet, die ihrerseits aus GameGrid abgeleitet ist. Das Spielfenster erhält dadurch eine 1 Pixel Auflösung und einen grünen Hintergrund ohne Gitterlinien und keinen Navigationsbalken. Die Methoden show() und doRun() werden automatisch gestartet. Hands sind sehr nützliche Container für Karten. Man verwendet sie nicht nur für Karten, welche die Spieler in der Hand halten, sondern auch für die Stapel und Kartenablage auf dem Spieltisch. Für die Darstellung von Karten können vier Layout-Klassen verwendet werden: |
Mit der Methode setView() wird das Layout einer Hand zugeordnet und mit der Methode draw() werden die Karten einer Hand im Spielfenster dargestellt. Eine Deck - Instanz erhält Informationen über die zur Verfügung stehende Karten als enum-Werte: Zu diesen Karten stellen wir folgende Sprites zur Verfügung, die automatisch auf Grund der enum-Bezeichner geladen werden:
|
![]() |
(Für die Arbeit mit einer lokalen Entwicklungsumgebung müssen sich die Kartendateien im Unterverzeichnis sprites des src-Verzeichnisses befinden. Unter dem Menüpunkt Kartenbibliothek stellen wir Ihnen weitere Kartensätze zum Herunterladen zur Verfügung). |
Im folgenden Beispiel werden die unterschiedlichen Kartenlayouts gezeigt.
Programmcode für lokale Bearbeitung downloaden (CardGameEx1.zip)
Programmcode:
// CardGameEx1.java import ch.aplu.jcardgame.*; import ch.aplu.jgamegrid.*; public class CardGameEx1 extends CardGame { public enum Suit { KREUZ, KARO, HERZ, PIK } public enum Rank { ASS, KOENIG, DAME, BUBE, ZEHN, NEUN, ACHT, SIEBEN, SECHS } private Deck deck = new Deck(Suit.values(), Rank.values(), "cover"); private final int nbCards = 6; private final int nbPlayers = 4; private Hand[] hand; public CardGameEx1() { super(600, 600); hand = deck.dealingOut(nbPlayers, nbCards); RowLayout rowLayout = new RowLayout(new Location(200, 150), 350); hand[0].setView(this, rowLayout); hand[0].draw(); ColumnLayout columnLayout = new ColumnLayout(new Location(500, 250), 400); hand[1].setView(this, columnLayout); hand[1].draw(); FanLayout fanLayout = new FanLayout(new Location(200, 850), 500, 260, 280); hand[2].setView(this, fanLayout); hand[2].draw(); StackLayout stackLayout = new StackLayout(new Location(380, 500)); hand[3].setView(this, stackLayout); hand[3].setVerso(true); hand[3].draw(); } public static void main(String[] args) { new CardGameEx1(); } } |
Deck deck = new Deck(Suit.values(), Rank.values(), "cover") |
Erzeugt ein Kartenspiel, wobei die Farbe durch den enum Suit und der Rang durch den enum Rank festgelegt. Cover ist der abgekürzte Dateiname für das Sprite der Kartenrückseite |
Hand[ ] hand = deck.dealingOut(nbPlayers, nbCards) | Veteilt Karten aus dem Kartenspiel. Es wird ein Array von Hand zurückgegeben, wobei die Elemente 0..nbPlayers je nbCards Karten erhalten. Die Karten sind zufällig gemischt |
RowLayout rowLayout = new RowLayout(new Location(200, 150), 350) |
Legt einen RowLayot an der Position (200, 150), mit der Breite 350 fest |
hand[0].setView(this, rowLayout)
|
Setzt den Layou der Hand |
hand[0].draw() |
Stellt die Hand dar |
hand[3].setVerso(true) |
Die letzte Hand wird mir der Kartenrdargestelltückseite angezeigt |