Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Spielkartenbibliothek
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

Themenstarter:

Spielkartenbibliothek

beantworten | zitieren | melden

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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von inflames2k am .
Attachments
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

Themenstarter:

beantworten | zitieren | melden

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

Der Screenshot stellt das oben genannte Verwendungsbeispiel dar.
Attachments
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
KleinerHacker
myCSharp.de - Member



Dabei seit:
Beiträge: 77

Windows 7

beantworten | zitieren | melden

Hi,

wie sieht denn das ganze bitte unter Windows 7 aus? Da gibt es ja keine cards.dll mehr. Was kann ich da verwenden?
private Nachricht | Beiträge des Benutzers
Siassei
myCSharp.de - Member



Dabei seit:
Beiträge: 401

beantworten | zitieren | melden

Zitat von KleinerHacker
wie sieht denn das ganze bitte unter Windows 7 aus? Da gibt es ja keine cards.dll mehr. Was kann ich da verwenden?
Zitat
Wie man sieht wäre die Verwendung ganz ähnlich der "cards.dll", die bis Windows XP vorhanden war.
Zitat
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
private Nachricht | Beiträge des Benutzers