Kartenspiele Teil 1

Dieses Tutorial ist eine Einführung in die Benutzung der Windows-Bibliothek 'Cards.DLL zur einfachen und schnellen Realisierung von Kartenspielen aller Art.

B. Olaf Rasch 03/2003

 Anregungen oder Tipps an B. Olaf Rasch
 
Einführung voriges Thema [ Top ] nächstes Thema

Bereits bei Windows 3.11 war im Installationsumfang eine handvoll kleinerer Spiele wie Minesweeper, Hearts oder Solitär enthalten; eine Sammlung, die später je nach Betriebssystem um andere, z.B. Freecell und Pinball, erweitert wurde.

Zum einen ein Hinweis darauf, wie 'verspielt' doch der moderne Mensch an seinem HiTech-Arbeitsplatz ist, zum anderen ein Beweis für die Beliebtheit von Kartenspielen jeglicher Art - kaum einer meiner Exkollegen, der nicht schon (besonders während der Arbeitszeit) bei einer Partie Solitär erwischt worden wäre ;)

Für die Realisierung von Kartengames greifen Windows und auch andere Anbieter auf eine sogenannte Entertainment Pack Cardplaying Helper-DLL zurück. Diese Bibliothek namens Cards.DLL befindet sich im Windows-Systemordner und enthält die Bitmaps und einfache Ausgabefunktionen für ein 52-Blatt-Kartenspiel.

Während diese in der Anfangszeit eine 16-Bit-DLL war, ist sie heute standardmäßig als 32-Bit-Version verbreitet, weshalb sie auch unter dem Namen cards32.dll anzutreffen ist.

 
Das Interface voriges Thema [ Top ] nächstes Thema

Ihr Interface ist relativ einfach gehalten, und besitzt folgende Funktionen:

Function: cdtInit (Initialisierung)

Diese Funktion muss zu Beginn vor allen anderen aufgerufen werden. Sie versorgt außerdem die ByRef-Parameter CardWidth und CardHeight mit den Ausmaßen einer Karte (in Pixeln).

  ByRef CardWidth As Long (Originalbreite einer Karte)
  ByRef CardHeight As Long (Originalhöhe einer Karte)
  è Long (Flag für 'Success')

Function: cdtDraw (Karte darstellen)

Zeichnet die Karte in der Default-Größe an die angegebene Stelle auf eine Form, PictureBox oder auf die Fläche eines sonstigen Objekts, das einen hDC besitzt.
Mögliche Grafiken:
- eine der 52 Karten-Vorderseiten oder
- eine der 13 verschiedenen Rückseiten oder
- eine der beiden Ablageflächen (mit 'X' oder mit 'O')
Kartenbilder können auch invertiert dargestellt werden, um z.B. eine Auswahl anzuzeigen.

  ByVal hDC As Long (Handle des Ziel-DeviceContext)
  ByVal xOrg As Long (X-Position der Karte in Pixeln)
  ByVal yOrg As Long (Y-Position der Karte in Pixeln)
  ByVal nCard As Long (ID der darzustellenden Grafik)
  ByVal nDraw As Long (Flags für Vorder/Rückseite bzw. Invertierung)
  ByVal nColor As (Farbe für Rückseite bzw. Invertierung)
  è Long (Flag für 'Success')

Function: cdtDrawExt (Karte skaliert darstellen)

Besitzt die selben Parameter wie cdtDraw; außerdem können noch Breite und Höhe der Karte angegeben werden. Die Grafik wird dadurch verzerrt bzw. skaliert dargestellt, was jedoch mangels Antialiasing zu recht unansehnlichen Ergebnissen führt.

  ByVal hDC As Long (Handle des Ziel-DeviceContext)
  ByVal xOrg As Long (X-Position der Karte in Pixeln)
  ByVal yOrg As Long (Y-Position der Karte in Pixeln)
  ByVal CardWidth As Long (darzustellende Breite)
  ByVal CardHeight As Long (darzustellende Höhe)
  ByVal nCard As Long (ID der darzustellenden Grafik)
  ByVal nDraw As Long (Flags für Vorder/Rückseite bzw. Invertierung)
  ByVal nColor As OLE_COLOR (Farbe für Rückseite bzw. Invertierung)
  è Long (Flag für 'Success')

Function: cdtAnimate (Rückseite animieren)
Folgende der Rückseiten lassen sich animieren:
- Roboter (ID 56)
- Burg (ID 63)
- Insel (ID 64)
- Kartenhand (ID 65)
  ByVal hDC As Long (Handle des Ziel-DeviceContext)
  ByVal nCard As Long (ID der darzustellenden Grafik)
  ByVal xOrg As Long (X-Position der Karte in Pixeln)
  ByVal yOrg As Long (Y-Position der Karte in Pixeln)
  ByVal nState As Long (Status der Animation)
  è Long (Flag für 'Success')

Function: cdtTerm (Speicherfreigabe)

Sollte aufgerufen werden, wenn das Programm beendet wird. Diese Funktion sorgt für die Freigabe von Speicherplatz.

  è Long (Flag für 'Success')
 
Konstanten voriges Thema [ Top ] nächstes Thema

Für den Parameter nCard sind zunächst einmal die ID's für die verschiedenen Spielkarten (0 bis 51) interessant. Diese sind so aufgeschlüsselt, dass immer vier gleiche Karten beieinander stehen:

 Kartenwert

A

As   0   1   2   3
2 Zwei   4   5   6   7
3 Drei   8   9 10 11
4 Vier 12 13 14 15
5 Fünf 16 17 18 19
6 Sechs 20 21 22 23
7 Sieben 24 25 26 27
8 Acht 28 29 30 31
9 Neun 32 33 34 35
10 Zehn 36 37 38 39
J Bube 40 41 42 43
Q Dame 44 45 46 47
K König 48 49 50 51

Falls man für nCard einen Wert von 53 bis 68 einsetzt, hat man Zugriff auf die Rückseiten und Sondergrafiken. Hierzu muss der Parameter nDraw jedoch auf 1 stehen.

53 (kariert) 54 (Geflecht1) 55 (Geflecht2) 56 (Roboter)
57 (Blumen) 58 (Eiche1) 59 (Eiche2) 60 (Fisch1)
61 (Fisch2) 62 (Muschel) 63 (Berg) 64 (Insel)
65 (Kartenhand) 66 (leer) 67 (X) 68 (O)
 
Der Parameter nColor wirkt sich dabei auf die Hintergrundfarbe der Rückseite 53 (kariert) aus.

Um Karten zu markieren, sollte vbWhite verwendet werden; andere Werte funktionieren evtl. nicht korrekt!

In nDraw werden das Vorder-/Rückseitenflag und das Invertierungs-(Markierungs)Flag übergeben. Dezimal lauten die Werte
    0 =
Vorderseite
    1 = Rückseite
    2 = Invertierung
und
können nach Bedarf addiert werden.

 
Schlusswort voriges Thema [ Top ] nächstes Thema

Das gezippte Beispielprojekt CardsDemo.vbp besteht aus lediglich zwei Modulen (frmMain.frm und CardsDll.bas) und demonstriert verschiedene Einstellungen und Aufrufe. In der Datei CardsDll.bas sind alle Deklarationen enthalten, so dass du dieses Modul einfach in eigene Projekte aufnehmen kannst, um auf alle Funktionen von Cards.DLL zugreifen zu können.

Der Sourcecode zu diesem Programm ist relativ kurz und selbsterklärend; auf spezielle Routinen wie das Mischen von Karten und die interne Darstellung von Stapeln und Gruppen werde ich in einem der folgenden Teile dieser Tutorialreihe näher eingehen.

 
Download des Projekts voriges Thema [ Top ]   

Hier können Sie sich das fertige Projekt herunterladen.

  Download
CardsDemo.zip
 (5 kB)
Downloadzeit: <1 Min. - 28.8k / <1 Min. - ISDN Downloads bisher: [ 9750 ]

Startseite | VB/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | VB-/VBA-Forum | VB.Net-Forum | DirectX | DirectX-Forum | Foren-Archiv | VB.Net | Chat | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report

Letzte Aktualisierung: Freitag, 18. April 2003