Simple Poker

De DigiWiki.

// Simple Poker
 
// Message Constants
integer AceHearts = 0;
integer TwoHearts = 1;
integer ThreeHearts = 2;
integer FourHearts = 3;
integer FiveHearts = 4;
integer SixHearts = 5;
integer SevenHearts = 6;
integer EightHearts = 7;
integer NineHearts = 8;
integer TenHearts = 9;
integer JackHearts = 10;
integer QueenHearts = 11;
integer KingHearts = 12;
integer AceDiamonds = 13;
integer TwoDiamonds = 14;
integer ThreeDiamonds = 15;
integer FourDiamonds = 16;
integer FiveDiamonds = 17;
integer SixDiamonds = 18;
integer SevenDiamonds = 19;
integer EightDiamonds = 20;
integer NineDiamonds = 21;
integer TenDiamonds = 22;
integer JackDiamonds = 23;
integer QueenDiamonds = 24;
integer KingDiamonds = 25;
integer AceSpades = 26;
integer TwoSpades = 27;
integer ThreeSpades = 28;
integer FourSpades = 29;
integer FiveSpades = 30;
integer SixSpades = 31;
integer SevenSpades = 32;
integer EightSpades = 33;
integer NineSpades = 34;
integer TenSpades = 35;
integer JackSpades = 36;
integer QueenSpades = 37;
integer KingSpades = 38;
integer AceClubs = 39;
integer TwoClubs = 40;
integer ThreeClubs = 41;
integer FourClubs = 42;
integer FiveClubs = 43;
integer SixClubs = 44;
integer SevenClubs = 45;
integer EightClubs = 46;
integer NineClubs = 47;
integer TenClubs = 48;
integer JackClubs = 49;
integer QueenClubs = 50;
integer KingClubs = 51;
integer MSG_RESET = 54;
 
integer NOTHING = 0;
integer JACK = -1;
integer ONEPAIR = 1;
integer TWOPAIRS = 2;
integer THREEOFKIND = 3;
integer FULLHOUSE = 4;
integer STRAIGHT = 5;
integer FLUSH = 5;
integer FOUROFKIND = 6;
integer STRAIGHTFLUSH = 7;
integer ROYALFLUSH = 8;
 
//Other Global Values
 
integer pc1;
integer pc2;
integer pc3;
integer pc4;
integer pc5;
 
list DECK = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
             26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];
list shuDeck;
 
shuffleCards()
{
    llSay(0, "Shuffling Deck...");
    shuDeck = llListRandomize(DECK, 0);
    llSleep(0.5);
}
 
dealCards()
{
    pc1 = llList2Integer(shuDeck, 0);
    pc2 = llList2Integer(shuDeck, 1);
    pc3 = llList2Integer(shuDeck, 2);
    pc4 = llList2Integer(shuDeck, 3);
    pc5 = llList2Integer(shuDeck, 4);
    llOwnerSay("cards = " + llList2CSV( [ pc1, pc2, pc3, pc4, pc5 ] ));
    checkwin([ pc1, pc2, pc3, pc4, pc5 ]);
    checkwin([ ThreeDiamonds, KingDiamonds, SevenDiamonds, TwoDiamonds, TenDiamonds ]); // a flush
    checkwin([ EightSpades, NineSpades, SevenSpades, SixSpades, TenSpades ]);  // a straight flush
    checkwin([ EightSpades, NineDiamonds, SevenSpades, SixSpades, TenSpades ]); // a straight
    checkwin([ EightSpades, JackDiamonds, SevenSpades, SixSpades, JackSpades ]); // a pair
    checkwin([ EightSpades, JackDiamonds, SixDiamonds, SixSpades, JackSpades ]); // two pairs
}
 
integer checkwin( list cardvals) {
    list suits;
    list matched;
    integer pairs = 0; // number of pairs
    integer threes = 0; // number of three of kind
    integer fours = 0; // number of fours;
    integer flush = FALSE;
    integer straight = FALSE;
 
    cardvals = llListSort(cardvals,0, TRUE);
 
    integer i;
    integer j;
 
    for ( i = 0; i < 4; i++ ) {
        suits += [ 0 ];                //  Initialise suits array to zero
    }
 
    for ( i = 0; i < 13; i++ ) {
        matched += [ 0 ];             //  Initialise matched array to zero  
    }
 
    for ( i = 0; i < 5; i++ ) {
        j = llList2Integer(cardvals, i) % 13 ;
        // Update matched for cards
        matched = llListReplaceList( matched, [ llList2Integer(matched, j) + 1 ], j, j );
        // equivalent to matched[cardvals[i] % 13]++; 
        j = (integer) (llList2Integer(cardvals, i) / 13) ;
        // Update suits for cards
        suits= llListReplaceList( suits, [ llList2Integer(suits, j) + 1 ], j, j );
        // equivalent to suits[cardvals[i]/13]++;
    }
 
 
    //  Check for pairs, threes and fours
 
    for (  i = 0; i < 13; i++ ) {
        if ( llList2Integer(matched, i) == 2 ) {
            pairs++;
        }
        else if ( llList2Integer(matched, i) == 3 ) {
            threes++;
        }
        else if ( llList2Integer(matched, i) == 4 ) {
            fours++;
        }
    }
 
 
    //  Check for a flush
 
    for ( i = 0; i < 4; i++ ) {
        if ( llList2Integer( suits, i ) == 5 ) {
            flush = TRUE;
        }
    }
 
    if ( (llList2Integer(cardvals,4) - llList2Integer(cardvals,1) == 3)  &&  //  Consistent with 
         (llList2Integer(cardvals,4) - llList2Integer(cardvals,0) == 12) &&  //  A, T, J, Q, K...
         flush ) {        //  If we also have a flush, then its a royal flush
        llOwnerSay("Royal flush!");
        return ROYALFLUSH;
    }
    else if ( llList2Integer(cardvals,4) - llList2Integer(cardvals,0) == 4 && flush ) {
        llOwnerSay("Straight flush!");
        return STRAIGHTFLUSH;
    }
 
 
    //  Sort cards by face value (necessary to check for a straight)
 
    for (  i = 0; i < 5; i++ )
    {
        // equivalent to cardvals[i] = cardvals[i] % 13;
        cardvals = llListReplaceList( cardvals, [ llList2Integer(cardvals, i) % 13 ], i, i ); 
    }
    cardvals = llListSort(cardvals,0, TRUE);
 
 
    if ( fours > 0 ) {
         llOwnerSay("Four of a kind!");
         return FOUROFKIND;
     }
     else if ( threes == 1 && pairs == 1 ) {
         llOwnerSay("Full house!");
         return FULLHOUSE;
     }
     else if ( flush ) {
         llOwnerSay("A flush!");
         return FLUSH;
     }
     else if ( llList2Integer(cardvals,4) - llList2Integer(cardvals,3) == 1 && 
               llList2Integer(cardvals,3) - llList2Integer(cardvals,2) == 1 &&
               llList2Integer(cardvals,2) - llList2Integer(cardvals,1) == 1 && 
             ( llList2Integer(cardvals,1) - llList2Integer(cardvals,0) == 1 ||
               llList2Integer(cardvals,4) - llList2Integer(cardvals,0) == 12 ) ) {
         llOwnerSay("A straight!");
         return STRAIGHT;
     }
     else if ( threes > 0 ) {
         llOwnerSay("Three of a kind!");
         return THREEOFKIND;
     }
     else if ( pairs == 2 ) {
         llOwnerSay("Two pair!");
         return TWOPAIRS;
     }
     else if ( pairs == 1 ) {
         llOwnerSay("One pair!");
         return ONEPAIR;
     }        
     // otionnally delete this piece of code . it s for machine games not table games
     else if ( llList2Integer(matched,0)  == 2 ||
               llList2Integer(matched,10) == 2 ||             
               llList2Integer(matched,11) == 2 ||             
               llList2Integer(matched,12) == 2 ) {
         llOwnerSay("Jacks or better!");
         return JACK;
     }
     else {
         llOwnerSay( "No win! Bad luck!");
         return NOTHING;
     }
}
 
default {
    state_entry()
    {
        shuffleCards();
        dealCards();
    }
 
    touch_start(integer number)
    {
        shuffleCards();
        dealCards();
    }
}
Outils personnels
  • Cette page a été consultée 1 479 fois.
donate
Google Ads