Laden...

Spielkartenbibliothek

Letzter Beitrag vor 13 Jahren 4 Posts 10.457 Views
Spielkartenbibliothek

Hallo, liebe Community,

da ich nach längerer Suche keine Klasse/Klassenbibliothek gefunden habe, die analog zur "cards.dll", welche es bis Windows XP gab, zeichnet, habe ich mir überlegt selbst eine zuerstellen.

Beschreibung:

Die Bibliothek besitzt 2 Klassen, Cards und Card.
Card stellt nur eine Klasse bereit, um einzelne Karten im Projekt nutzen zu können.
In der Klasse Cards befindet sich die Logik. - Ich habe mich auf eine Funktionalität ersteinmal beschränkt, da ich auf mehr momentan nicht angewiesen war.

Unterhalb der Klasse Cards befinden sich 4 enums.

SUIT (Enumerator des Kartentyps, Karo, Herz, Kreuz, Pik)


public enum SUIT : int
{
	CLUBS = 0,
	DIAMOND = 1,
	HEARTS = 2,
	SPADES = 3
}

RANK (Die Kartenwerte)


public enum Rank : int
{
	ACE = 0,
	TWO = 1,
	THREE = 2,
	FOUR = 3,
	FIVE = 4,
	SIX = 5,
	SEVEN = 6,
	EIGHT = 7,
	NINE = 8,
	TEN = 9,
	JACK = 10,
	QUEEN = 11,
	KING = 12
}

BACK (Der Hintergrund der Karte)


public enum BACK : int
{
	BLUE = 0,  // blauer Kartenhintergrund
	RED,         // roter Kartenhintergrund
	UNUSED    // Wenn kein Hintergrund dargestellt werden soll ein roter Kreis
}

und zu guter letzt DrawMode


public enum DrawMode : int
{
	mdFaceUp = 0,
	mdFaceDown
}

Wie man sieht wäre die Verwendung ganz ähnlich der "cards.dll", die bis Windows XP vorhanden war.

Desweiteren stellt die Klasse DrawCard bereit, in dieser wird die Karte gezeichnet.


public void DrawCard(IntPtr hdc, int x, int y, int card, int drawmode, int back)
{
	Graphics graph = Graphics.FromHdc(hdc);
	Image imgCard;
	if (drawmode == (int)DrawMode.mdFaceUp)
	{
		imgCard = (Image)Properties.Resources.ResourceManager.GetObject("_" + card.ToString(), System.Globalization.CultureInfo.CurrentCulture);
	}
	else
	{
		imgCard = (Image)Properties.Resources.ResourceManager.GetObject("back_" + back.ToString(), System.Globalization.CultureInfo.CurrentCulture);
	}
	graph.DrawImage(imgCard, x, y, imgCard.Width, imgCard.Height);
	graph.Dispose();
	imgCard.Dispose();
}

Der Parameter "card" berechnet sich hierbei ebenfalls analog zur "cards.dll", nach der Formel: Suite + Rank * 4.

Der mode gibt an, ob die Karte verdeckt oder offen gezeichnet werden soll. - Wichtig ist hierbei, dass auch ein Hintergrund mit angegeben werden muss.

Somit hab ich hier eine andere Vorgehensweise zur "cards.dll" gewählt. Dort gibt es 2 Methoden, von denen eine die Karte und die andere eine verdeckte Karte zeichnet.

Die Karten liegen in der Bibliothek, wie auch aus der Methode DrawCard hervorgeht als Resourcen innerhalb der DLL vor.

Sollten euch Fehler oder Änderungsvorschläge einfallen, bin ich ganz offen und freue mich über Feedback.

Verwendung:


Cards cards = new Cards();
IntPtr hdc = e.Graphics.GetHdc();
cards.DrawCard(hdc, 0, 0, 0, (int)DrawMode.mdFaceUp, (int)BACK.BLUE);

Hier würde ein Kreuz Ass an der angegebenen Position gezeichnet werden. - In diesem Fall in der linken oberen Ecke.

Schlagwörter: Kartenspiel, Karten, cards.dll, Spielkarten, Kartenspiel, Kartengrafiken

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

Fiel mir doch eben auf, dass ich einen Screenshot anbringen sollte.

Der Screenshot stellt das oben genannte Verwendungsbeispiel dar.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

Windows 7

Hi,

wie sieht denn das ganze bitte unter Windows 7 aus? Da gibt es ja keine cards.dll mehr. Was kann ich da verwenden?

wie sieht denn das ganze bitte unter Windows 7 aus? Da gibt es ja keine cards.dll mehr. Was kann ich da verwenden?

Wie man sieht wäre die Verwendung ganz ähnlich der "cards.dll", die bis Windows XP vorhanden war.

Die Karten liegen in der Bibliothek, wie auch aus der Methode DrawCard hervorgeht als Resourcen innerhalb der DLL vor.

Wer lesen kann ist klar im Vorteil 😁