card-counting program for blackjack

Discussion in 'C Programming' started by luser- -droog, Feb 5, 2012.

  1. Sir, is that a keyboard in your sleeve?


    692(1)03:51 PM:~ 0> cat bj.c && echo --------- && make bj && bj
    #include <ctype.h>
    #include <stdio.h>
    #include <string.h>

    enum { cards = 13, suits = 4, decks = 4 };
    int count[cards];
    int total;
    char symbols[] = "234567890jqka";

    void reset() {
    int i;
    total = 0;
    for (i=0; i < cards; i++)
    total += count = suits * decks;
    }

    void sub(char c) {
    if(c=='s')
    reset();
    else {
    char *p = strchr(symbols, tolower(c));
    if (p == NULL) return;
    --count[ p - symbols ];
    --total;
    }
    }

    void show() {
    int i;
    for (i=0; i < cards; i++) printf(" %c ", toupper(symbols));
    puts("");
    for (i=0; i < cards; i++) printf("%3d ", count);
    printf(" 10s:%d ", count[8]+count[9]+count[10]+count[11]);
    printf(" Total:%d", total);
    puts("");
    for (i=0; i < cards; i++) printf("%3d ", (count*100)/total);
    printf(" 10s:%d ", ((count[8]+count[9]+count[10]+count[11])*100)/
    total);
    puts("");
    }

    char buf[99];

    void readline() {
    fgets(buf,99,stdin);
    }

    void doline() {
    int i = 0;
    while(buf){
    if (!isspace(buf))
    sub(buf);
    ++i;
    }
    }

    int main() {
    reset();
    while(1) {
    show();
    readline();
    doline();
    }
    return 0;
    }

    ---------
    cc -g -Wall bj.c -o bj
    2 3 4 5 6 7 8 9 0 J Q K A
    16 16 16 16 16 16 16 16 16 16 16 16 16 10s:64 Total:
    208
    7 7 7 7 7 7 7 7 7 7 7 7 7 10s:30
    460ak
    2 3 4 5 6 7 8 9 0 J Q K A
    16 16 15 16 15 16 16 16 15 16 16 15 15 10s:62 Total:
    203
    7 7 7 7 7 7 7 7 7 7 7 7 7 10s:30
    3 9 q kaj
    2 3 4 5 6 7 8 9 0 J Q K A
    16 15 15 16 15 16 16 15 15 15 15 14 14 10s:59 Total:
    197
    8 7 7 8 7 8 8 7 7 7 7 7 7 10s:29
    2 4q 48a
    2 3 4 5 6 7 8 9 0 J Q K A
    15 15 13 16 15 16 15 15 15 15 14 14 13 10s:58 Total:
    191
    7 7 6 8 7 8 7 7 7 7 7 7 6 10s:30
    2 4 4 8 0 a q
    2 3 4 5 6 7 8 9 0 J Q K A
    14 15 11 16 15 16 14 15 14 15 13 14 12 10s:56 Total:
    184
    7 8 5 8 8 8 7 8 7 8 7 7 6 10s:30
    4 4 8 ak
    2 3 4 5 6 7 8 9 0 J Q K A
    14 15 9 16 15 16 13 15 14 15 13 13 11 10s:55 Total:
    179
    7 8 5 8 8 8 7 8 7 8 7 7 6 10s:30
    ^C
    693(1)03:52 PM:~ 130>
     
    luser- -droog, Feb 5, 2012
    #1
    1. Advertising

  2. On Feb 7, 9:35 am, pete <> wrote:
    > pete wrote:
    >
    > > luser- -droog wrote:

    >
    > > > Sir, is that a keyboard in your sleeve?

    >
    > > > 692(1)03:51 PM:~ 0> cat bj.c && echo --------- && make bj && bj
    > > > #include <ctype.h>
    > > > #include <stdio.h>
    > > > #include <string.h>

    >
    > > > enum { cards = 13, suits = 4, decks = 4 };
    > > > int count[cards];
    > > > int total;
    > > > char symbols[] = "234567890jqka";

    >
    > > > void reset() {
    > > >     int i;
    > > >     total = 0;
    > > >     for (i=0; i < cards; i++)
    > > >         total += count = suits * decks;
    > > > }

    >
    > > > void sub(char c) {
    > > >     if(c=='s')
    > > >         reset();
    > > >     else {
    > > >         char *p = strchr(symbols, tolower(c));
    > > >         if (p == NULL) return;
    > > >         --count[ p - symbols ];
    > > >         --total;
    > > >     }
    > > > }

    >
    > > > void show() {
    > > >     int i;
    > > >     for (i=0; i < cards; i++) printf("  %c ", toupper(symbols));
    > > >     puts("");
    > > >     for (i=0; i < cards; i++) printf("%3d ", count);
    > > >     printf(" 10s:%d ", count[8]+count[9]+count[10]+count[11]);
    > > >     printf("  Total:%d", total);
    > > >     puts("");
    > > >     for (i=0; i < cards; i++) printf("%3d ", (count*100)/total);
    > > >     printf(" 10s:%d ", ((count[8]+count[9]+count[10]+count[11])*100)/
    > > > total);
    > > >     puts("");
    > > > }

    >
    > > > char buf[99];

    >
    > > > void readline() {
    > > >     fgets(buf,99,stdin);
    > > > }

    >
    > > > void doline() {
    > > >     int i = 0;
    > > >     while(buf){
    > > >         if (!isspace(buf))
    > > >             sub(buf);
    > > >         ++i;
    > > >     }
    > > > }

    >
    > > > int main() {
    > > >     reset();
    > > >     while(1) {
    > > >         show();
    > > >         readline();
    > > >         doline();
    > > >     }
    > > >     return 0;
    > > > }

    >
    > > > ---------
    > > > cc -g -Wall    bj.c   -o bj
    > > >   2   3   4   5   6   7   8   9   0   J   Q  K   A
    > > >  16  16  16  16  16  16  16  16  16  16  16  16  16  10s:64   Total:
    > > > 208
    > > >   7   7   7   7   7   7   7   7   7   7   7  7   7  10s:30

    >
    > > This point is where the output stops on my machine.
    > > Either that,
    > > or this is the point where the program runs too slowly
    > > for me to continue waiting for more output.

    >
    > I think I'm supposed to input something at this point
    > but I haven't figured out what yet.
    >


    Point taken. I guess /some/ commentary really is necessary.

    I've been hooked on the Kindle Blackjack game. So I wrote
    this program to help me improve my guesses.

    The program (initially and after each 's'huffle) maintains
    the number of each rank of card contained in 4 standard
    playing card decks. '0' means "10" on input and output.
    The 'prompt' is a table showing the number of each card,
    the number of "tens", the total number of cards left in
    the shoe, and the integer percentages for each card and
    for "tens".

    So when any cards are played, type them in and hit enter.
    This will show what's left in the deck after every hand.

    Exit by Interrupt.
     
    luser- -droog, Feb 8, 2012
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. slyphiad

    Friend Class Blackjack and Bet

    slyphiad, Oct 13, 2004, in forum: C++
    Replies:
    3
    Views:
    418
    John Harrison
    Oct 15, 2004
  2. Charlie Cosse

    Asymptopia BlackJack (written in Python)

    Charlie Cosse, Jul 29, 2003, in forum: Python
    Replies:
    0
    Views:
    403
    Charlie Cosse
    Jul 29, 2003
  3. Qie Tao
    Replies:
    1
    Views:
    716
    Luke Webber
    Aug 9, 2006
  4. Ruby Quiz

    [QUIZ] Studying Blackjack (#151)

    Ruby Quiz, Jan 4, 2008, in forum: Ruby
    Replies:
    41
    Views:
    445
    James Gray
    Jan 10, 2008
  5. Ruby Quiz
    Replies:
    0
    Views:
    99
    Ruby Quiz
    Jan 10, 2008
Loading...

Share This Page