1. Help With My Game of Black Jack

I am making a game of black jack. It's my first euphoria program and I need
a little guidance. I've only been doing this for a realy short period of
time (2 weeks). I am using Dave Cunny's win32lib and I have figured out how
to open windows make menu bars, display text, and make butons and assign
actions to the buttons. My game is very simple. Visual black jack.The
dealer gets two cards to start and the player gets two cards to start. I
have only two buttons "Hit Me" and "Stay". What I need help with is setting
up the procedures that make the game work. For instance pulling random
cards (I am only using cards 2-9 and jack, queen, king, and an ace , four
of each of course, just to keep it simple), making it where the computer
will not any one card more than one time. Pretty much any thing beyond
simple window stuff I get lost. I can do it in QBasic but I like this
programming too much and I want to use it. I just nees some guidance in the
right direction. Please help.

new topic     » topic index » view message » categorize

2. Re: Help With My Game of Black Jack

----- Original Message -----
From: David Roach <roachd_76 at YAHOO.COM>
To: <EUPHORIA at LISTSERV.MUOHIO.EDU>
Sent: Tuesday, November 30, 1999 1:22 PM
Subject: Help With My Game of Black Jack


> I am making a game of black jack. It's my first euphoria program and I
need
> a little guidance. I've only been doing this for a realy short period of
> time (2 weeks). I am using Dave Cunny's win32lib and I have figured out
how
> to open windows make menu bars, display text, and make butons and assign
> actions to the buttons. My game is very simple. Visual black jack.The
> dealer gets two cards to start and the player gets two cards to start. I
> have only two buttons "Hit Me" and "Stay". What I need help with is
setting
> up the procedures that make the game work. For instance pulling random
> cards (I am only using cards 2-9 and jack, queen, king, and an ace , four
> of each of course, just to keep it simple), making it where the computer
> will not any one card more than one time. Pretty much any thing beyond
> simple window stuff I get lost. I can do it in QBasic but I like this
> programming too much and I want to use it. I just nees some guidance in
the
> right direction. Please help.

Hi:
One way is to set up a list of cards in the deck, and then remove each card
as it
is drawn (so it can't be drawn again)

-- put this part in (General)
constant      hearts = 1, diamonds = 2, clubs = 3, spades = 4
constant suit = {"Hearts","Diamonds","Clubs","Spades"}
sequence deck
   deck = { {"Ace",1},{"Ace",2},{"Ace",3},{"Ace",4},{2,1},{2,2},{2,3},{2,4},
{3,1},.....{"Queen",4},{"King",1},{"King",2},{"King",3},{"King",4} }

--put this part in the draw-a-card onClick button response:
object newcard
integer x

-- the second number of each pair denotes the suit.
-- each time you draw a card, use rand(length(deck)) to pick from what's
left.

x = rand(length(deck)) -- randomly select a card
newcard = deck[x] --save the card

deck = deck[1..x-1] & deck[x+1..length(deck)] -- remove that card from the
deck
printf(1,"You have drawn the %d of %s",newcard)

Try this in text mode - there may be bugs.

HTH
Irv

new topic     » goto parent     » topic index » view message » categorize

3. Re: Help With My Game of Black Jack

David Roach wrote:

> For instance pulling random cards
> (I am only using cards 2-9 and jack,
> queen, king, and an ace , four of each
> of course, just to keep it simple), making
> it where the computer will not [use] any one
> card more than one time.


I'll assume the cards are set up like this:

   -- WARNING! UNTESTED CODE!

   -- create a deck of cards
   sequence deckOfCards

   -- create the deck in order
   deckOfCards = {}
   for i = 1 to 52 do
      deckOfCards = i
   end for


One option is to shuffle the deck:

   -- WARNING! UNTESTED CODE!

   function shuffle( sequence deck )

      -- shuffle a deck of cards (integer) by swapping them

      integer tmp, card1, card2

      -- shuffle them
      for i = 1 to length( deck ) do

         -- pick cards to swap
         card1 = rand( length( deck ) )
         card2 = rand( length( deck ) )

         -- swap the cards
         tmp = deck[card1]
         deck[card1] = deck[card2]
         deck[card2] = tmp

      end for

      return deck

   end function


This gives you a list of cards that are shuffled. You can deal them
sequentially.

   -- WARNING! UNTESTED CODE!

   -- shuffle the deck
   deckOfCards = shuffle( deckOfCards )

   -- deal sequentially
   for i = 1 to length( deckOfCards ) do
      -- display the card
      printf( 1, "card #%d is %d\n", {i, deckOfCards[i]} )
   end for


Another option is to remove a card at random from the deck, until the deck
is empty:

   -- WARNING! UNTESTED CODE!

   function removeNth( integer index, sequence s )

      -- return the nth item, and the sequence with the nth item removed

      return { s[index], s[1..index-1] & s[index+1..length(index)] }

   end function


   function removeRandom( sequence s )

      -- remove an item from the sequence at random
      return removeNth( rand(length( s )), s )

   end function

For example:

   -- WARNING! UNTESTED CODE!

   integer card
   sequence tmp

   for i = 1 to length( deckOfCards ) do

      -- draw a card at random
      tmp = removeRandom( deckOfCards )
      card = tmp[1]
      deckOfCards = tmp[2]

      -- display the selection
      printf( 1, "card #%d is %d\n", {i, card } )

   end for

Hope this helps!


[ SOAPBOX ]

In both versions, it would be nice if Euphoria supported the syntax:

   { var list } = expr

For example, the swap could have been written as:

   { deck[card1], deck[card2] } = { deck[card2], deck[card1] }

Drawing a card would be:

   { card, deckOfCards } = removeRandom( deckOfCards )

-- David Cuny

new topic     » goto parent     » topic index » view message » categorize

4. Re: Help With My Game of Black Jack

Hi David,

I might be able to help you.  I have a good start on a wrapper/library for
cards32.dll, a windows library for drawing cards.  It has been designed for
win32lib and works well but is not thoroughly documented.  The library
shuffles cards and remembers where they are placed in your window so that
you can easily select them.  Perhaps with your help I could polish it up
and get it released to the Eu archives.

I don't have access to it at the moment but I can get back to you by
tomorrow if you're interested.

-- Brian

new topic     » goto parent     » topic index » view message » categorize

5. Re: Help With My Game of Black Jack

David,

Just a couple of minor points.
Firstly, you did not properly initialize your deck.
Secondly, in your shuffle, you call rand() twice per iteration. One is
enough, it is an expensive operation.

This is roughly what I have been using for the last 30 years:

-- WARNING! TESTED CODE!

sequence pack

-- initialize pack
pack = {}
for i=1 to 52 do
    pack &= i
end for

procedure shuffle()
    integer dummy, r
    for i = 1 to 52 do
        r = rand(52)
        dummy = pack[r]
        pack[r] = pack[i]
        pack[i] = dummy
    end for
end procedure


Btw, for very obscure theoretical reasons, this is *not* the best
possible shuffle, but it is still far better than what you can get by
hand.

jiri

new topic     » goto parent     » topic index » view message » categorize

6. Re: Help With My Game of Black Jack

>David Roach wrote:
>
>> For instance pulling random cards
>> (I am only using cards 2-9 and jack,
>> queen, king, and an ace , four of each
>> of course, just to keep it simple), making
>> it where the computer will not [use] any one
>> card more than one time.
>
>
Lets try this once more from a mathematicians viewpoint:

sequence cards,shuffled,newdeck
atom card
card = 1
cards = repeat(0,52)
shuffled = cards
newdeck = cards

for c = 1 to 52 do
cards[c] = c
end for

newdeck = cards  -- now we have a permanent new deck

for c = 52 to 1 by -1 do        -- shuffle the cards
card = rand(c)                                                     -- select a
card
shuffled[c] = cards[card]                                      -- put it face
down
cards = cards[1..(card - 1)] & cards[(card + 1)..c]  -- put deck back together
end for                                                               -- do it
again

print(1, shuffled)          -- write out the shuffled deck from the first card
to
                                 -- the last

This can easily be made into a procedure and cards can be refreshed from
shuffled and "shuffled" again or cards can be refreshed from newdeck and
a completely different random sequence generated. The difference between
this and a true shuffle algorithm is that the deck must be completely
shuffled before it is valid. At any point other than the exit from the loop,
shuffled is not valid.

Obviously, you might want to put into cards a sequence of an entirely
different nature. It should still work.

Everett L.(Rett) Williams
rett at gvtc.com

new topic     » goto parent     » topic index » view message » categorize

7. Re: Help With My Game of Black Jack

Jiri Babor wrote:

> Firstly, you did not properly initialize your deck.

Ooops...

> Secondly, in your shuffle, you call rand() twice
> per iteration. One is enough, it is an expensive operation.

Errrr...

> -- WARNING! TESTED CODE!

Thanks! smile

-- David Cuny

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu