Click here to Skip to main content
Licence CPOL
First Posted 11 Feb 2012
Views 17,091
Downloads 259
Bookmarked 8 times

A Bridge Card Game and Display Card Presentation

By | 16 Feb 2012 | Article
Play random drawing four players bridge card game
2.png 3.png

To play the above game, down load BridgeCardGameV3.zip

Introduction

I believe who studies math or programming will study Cards game sooner or later. I have visited this topic several times in the past; either I was studied Object-oriented programming or probability and statistics. As recent, I read War Card Game Simulation in C# by Gary Stafford and I like it very much because it is different and has some distinct features over other Cards programs and his code is very well documented throughout and easy to follow.

The greatest advantage is its simplicity and no need to link to any DLLs such as Cards.dll.

Usually, it is not a simple task to link to the right DLLs and to locate and download DLLs. After spent time down loading and linking only to find out it was the wrong version of the DLLs. With Gary’s code, you can get it up and running in no time and to focus on study the Cards Game algorithms instead of dealing with the programming interface issues.

For programming practice, I adopted his code and other sample Cards class I googled and made it into a Bridge Game presentation. If you are bored at the airport, you can randomly display the four hands of Bridge for viewing. This article can also be a base for expanding in future.

This article will demonstrate the following:

  • Making a variation out of an existing codeproject article
  • The use of Object-oriented programming
  • Making a nice presentation with xml and xml style-sheet
  • Discuss future programming idea

Using the code

I found a very basic Deck class from introcs.cs.princeton.edu Deck class code in Java. To my surprise, the Java and C# are very similar. The Class is very short that is a deck of 52 random shuffle cards. I added one module, two dictionary objects and a nice suits displaying characters set. Project compiled under Microsoft Visual C# 2010 Express.

static string[] suit = { "♦", "♣", "♥", "♠" };
static string[] rank = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };

// Dictionary contains the index value to card suit and rank
// for example, A♠ = 52, 2♦ = 0
// so it can display nicely as player groups his cards on hand

Dictionary<string, int> cardOrder = new Dictionary<string, int>();
Dictionary<int, string> orderedDeck = new Dictionary<int, string>();

/// <summary>
/// format drawing cards to xml tagged string for nice display
/// refer to t.xml and t.css
/// </summary>
// 
public string drawCardXml(int numCard, int sideIdx)
{
    string handxml = "";
    orderedDeck.Clear();

    if (CardIndex + numCard <= N) //enough cards left to draw
    {
        for (int i = CardIndex; i < CardIndex + numCard; i++)
        {
            Console.Out.WriteLine(deck[i]);
            orderedDeck.Add(cardOrder[deck[i]], deck[i]);
        }
        CardIndex += numCard;
        // order cards on hand by suit
        var sortedDict = (from entry in orderedDeck orderby entry.Key descending select entry).ToDictionary(pair => pair.Key, pair => pair.Value);

        string[] suitOnHand = { "", "", "", "" };
        char[] suitchar = { '♦', '♣', '♥', '♠' };
        char[] side = { 'N', 'E', 'W', 'S' };

        string[] suitName = { "DIAMONDS-", "CLUBS-", "HEARTS-", "SPADES-" };

        foreach (KeyValuePair<int, string> pair in sortedDict)
        {
            int idx = pair.Key / RANKS;
            // extract only the value of the card
            suitOnHand[idx] += pair.Value.TrimEnd(suitchar[idx]) + ",  ";
        }
        for (int i = SUITS-1; i >= 0; i--) // reverse order, spade on top
        {
            handxml += "<" + suitName[i] + side[sideIdx] + ">" + suit[i] + ": " 
                            + suitOnHand[i].TrimEnd(new Char[] { ' ', ',' }) 
                            + @"</" + suitName[i] + side[sideIdx] + ">";
        }

    }
    return handxml;
}
 
drawCardXml returns string that will be saved to t.xml for displaying; the t.xml shows as following:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="t.css"?>
<GAME><BRIDGE>

<SPADES-N>♠: 5</SPADES-N>
<HEARTS-N>♥: Q ,  9 ,  8 ,  2</HEARTS-N>
<CLUBS-N>♣: 10 ,  5</CLUBS-N>
<DIAMONDS-N>♦: 10 ,  9 ,  7 ,  6 ,  5 ,  4</DIAMONDS-N>

<SPADES-E>♠: 9 ,  4 ,  2</SPADES-E>
<HEARTS-E>♥: K ,  7 ,  4</HEARTS-E>
<CLUBS-E>♣: K ,  Q ,  7 ,  3</CLUBS-E>
<DIAMONDS-E>♦: K ,  8 ,  2</DIAMONDS-E>

<SPADES-W>♠: A ,  Q ,  J ,  10 ,  3</SPADES-W>
<HEARTS-W>♥: J ,  10 ,  6</HEARTS-W>
<CLUBS-W>♣: 9 ,  8 ,  6 ,  4</CLUBS-W>
<DIAMONDS-W>♦: J</DIAMONDS-W>

<SPADES-S>♠: K ,  8 ,  7 ,  6</SPADES-S>
<HEARTS-S>♥: A ,  5 ,  3</HEARTS-S>
<CLUBS-S>♣: A ,  J ,  2</CLUBS-S>
<DIAMONDS-S>♦: A ,  Q ,  3</DIAMONDS-S>

</BRIDGE></GAME>
At last, we need a style sheet t.css to arrange four bridge hands on the screen with different colors.
GAME
{
background-color: #ffffff;
width: 100%;
}
BRIDGE
{
display: block;
margin-bottom: 30pt;
margin-left: 0;
}

SPADES-N
{
display: block;
color: #000000;
font-size: 20pt;
margin-left: 200pt;
}
CLUBS-N
{
display: block;
color: #000000;
font-size: 20pt;
margin-left: 200pt;
}
HEARTS-N
{
display: block;
color: #FF0000;
font-size: 20pt;
margin-left: 200pt;
}
DIAMONDS-N
{
display: block;
color: #FF0000;
font-size: 20pt;
margin-left: 200pt;
}

Future project idea

A database contains few newspaper published bridge games with the bidding contract and steps of the game and slowly displaying the progress of the card game.

References

War-Card-Game-Simulation-in-C

Deck.java

History

11-Feb-2012 - First version (Display Card).

17-Feb-2012 - V3(Play Card); Fix Bugs and Add AI to generate Default Contract.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

C Yang



United States United States

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
QuestionPretty good. PinmemberDoncp6:44 16 Feb '12  
AnswerRe: Pretty good. Pinmemberw58289:56 16 Feb '12  
Questionn2012 comes, in order to thank everyone, characteristic, novel style, varieties, low price and good quality, and the low sale price. Thank everyone ====( http://www.fullmalls.com )===== ====( http://www.fullmalls.com )===== $33 True Religion jea Pingroupghjtyktyk15:53 15 Feb '12  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120517.1 | Last Updated 16 Feb 2012
Article Copyright 2012 by C Yang
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid