Need help pulling in library sub to shuffle deck of cards

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • l1nuxxx
    New Member
    • Nov 2008
    • 5

    Need help pulling in library sub to shuffle deck of cards

    I have a file well call file.pl. It's a card sorting program. I need to create a lib fuction with part of the original file that shuffles the deck of cards. After it shuffles the first deck and deals a hand of cards I need it to call the shuffling function again before dealing another hand. I call the lib function file file-lib.pl.

    here's the contents i have for file.pl

    Code:
    #!/usr/bin/perl
    
    require 'file-lib.pl';
    my @startingdeck = ("A H","2 H","3 H","4 H","5 H","6 H","7 H","8 H",
                     "9 H","10 H","J H","Q H","K H",
                     "A D","2 D","3 D","4 D","5 D","6 D","7 D","8 D",
                     "9 D","10 D","J D","Q D","K D",
                     "A C","2 C","3 C","4 C","5 C","6 C","7 C","8 C",
                     "9 C","10 C","J C","Q C","K C",
                     "A S","2 S","3 S","4 S","5 S","6 S","7 S","8 S",
                     "9 S","10 S","J S","Q S","K S");
    push@startingdeck, @startingdeck;
    print "@startingdeck[0..4]\n"
    xxxxxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxxxxxx xxxxxxxxxxxxx

    And here are the contents for file-lib.pl

    Code:
    sub shuffle(){
    for my $x(0..99){
    my @shuffle = (
      shift(@startingdeck),
      pop(@startingdeck),
      shift(@startingdeck),
      pop(@startingdeck),
      shift(@startingdeck),
      pop(@startingdeck),
      shift(@startingdeck),
      pop(@startingdeck),
    );
     }
    }
    1;
    i realize some of this may not be what is considered good perl programming techniques. But I merely just want it to work.
    Last edited by eWish; Nov 14 '08, 12:21 AM. Reason: Please use the code tags
  • KevinADC
    Recognized Expert Specialist
    • Jan 2007
    • 4092

    #2
    If the object is to shuffle the deck you can use List::Util and call its shuffle function.



    Or is this school work?

    Comment

    • l1nuxxx
      New Member
      • Nov 2008
      • 5

      #3
      Not school work. Can u show me how it should look?

      Comment

      • Ganon11
        Recognized Expert Specialist
        • Oct 2006
        • 3651

        #4
        A simple example of List::Util::shu ffle:

        Code:
        use List::Util qw/shuffle/;
        
        my @sorted_list = (1..100);
        my @unsorted_list = shuffle(@sorted_list);
        
        print @unsorted_list, "\n"; # Will print 1-100 in some random order

        Comment

        • l1nuxxx
          New Member
          • Nov 2008
          • 5

          #5
          can u show me how my code should look if i didn't want to use List::Util::shu ffle:

          Comment

          • KevinADC
            Recognized Expert Specialist
            • Jan 2007
            • 4092

            #6
            Originally posted by l1nuxxx
            can u show me how my code should look if i didn't want to use List::Util::shu ffle:
            Your code will not shuffle the array. Don't even bother with it unless you meant something else besides shuffling.

            Look here:



            Use the Fisher-Yates shuffle example to shuffle your array. If you still need help, post the code you tried to write using the Fisher-Yates example.

            Comment

            • l1nuxxx
              New Member
              • Nov 2008
              • 5

              #7
              From my original program below I want to remove the code that does the shuffling and include it as a function in let's say mylibfile.pl. Then from myfile.pl using (require 'mylibfile.pl') do the following. Deal a hand of cards then call the shuffling function again before dealing another, different hand.

              (myfile.pl)

              Code:
              my @startingdeck = ("A H","2 H","3 H","4 H","5 H","6 H","7 H","8 H", 
                               "9 H","10 H","J H","Q H","K H", 
                               "A D","2 D","3 D","4 D","5 D","6 D","7 D","8 D", 
                               "9 D","10 D","J D","Q D","K D", 
                               "A C","2 C","3 C","4 C","5 C","6 C","7 C","8 C", 
                               "9 C","10 C","J C","Q C","K C", 
                               "A S","2 S","3 S","4 S","5 S","6 S","7 S","8 S", 
                               "9 S","10 S","J S","Q S","K S"); 
              for my $x(0..99){ 
              my @shuffle = ( 
                shift(@startingdeck), 
                pop(@startingdeck), 
                shift(@startingdeck), 
                pop(@startingdeck), 
                shift(@startingdeck), 
                pop(@startingdeck), 
                shift(@startingdeck), 
                pop(@startingdeck), 
              );
              push@startingdeck, @startingdeck; 
              print "@startingdeck[0..4]\n"
              Last edited by eWish; Nov 14 '08, 11:13 PM. Reason: Please use the code tags

              Comment

              • KevinADC
                Recognized Expert Specialist
                • Jan 2007
                • 4092

                #8
                Well, that wasn;t much of an effort on your part. Here it is, next time I hope to see you at least try.


                myfile.pl:

                Code:
                use strict;
                use warnings;
                require mylibfile.pl;#<--assumes it is in the same folder as myfile.pl
                
                my @deck = ("A H","2 H","3 H","4 H","5 H","6 H","7 H","8 H", 
                "9 H","10 H","J H","Q H","K H", 
                "A D","2 D","3 D","4 D","5 D","6 D","7 D","8 D", 
                "9 D","10 D","J D","Q D","K D", 
                "A C","2 C","3 C","4 C","5 C","6 C","7 C","8 C", 
                "9 C","10 C","J C","Q C","K C", 
                "A S","2 S","3 S","4 S","5 S","6 S","7 S","8 S", 
                "9 S","10 S","J S","Q S","K S");
                
                my @shuffled = shuffle(\@deck);
                print "@shuffled[0..4]";#<-- demonstration only
                mylibfile.pl:

                Code:
                use strict;
                use warnings;
                
                sub shuffle {
                   my $deck = shift;
                   my $i = @$deck;
                   while (--$i) {
                      my $j = int rand ($i+1);
                      @$deck[$i,$j] = @$deck[$j,$i];
                   }
                   return @{$deck};
                }
                1;#<--keep this here
                just call the shuffle() function as needed to reshuffle the deck.

                Comment

                • l1nuxxx
                  New Member
                  • Nov 2008
                  • 5

                  #9
                  thanks for the help. ............... ............... ..........

                  Comment

                  Working...