• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            一個c++寫的發牌程序

            from:redguardtoo 的 Blog?


            可以顯示一,二,三,四家的牌

            主要是為了訓練我的牌感(記牌的能力),對有志于賭博或者橋牌事業的同志可能還有點用

            編譯為bd.exe,使用方法輸入"bd -h"看幫助

            以下是源代碼(處理命令行參數的代碼參考了vim):

            #include? < iostream >
            #include?
            < algorithm >
            #include?
            < functional >
            #include?
            < vector >
            using ? namespace ?std;

            #include?
            < cstdlib >
            #include?
            < ctime >
            #include?
            < cctype >

            static ? char ?program_name[] = " bd " ;
            #define ?THE_VERSION?"0.1"

            namespace ?info {
            ????
            enum ? {?WEST = 0 ,NORTH = 1 ,EAST = 2 ,SOUTH = 3 ,} ;
            }
            ;
            static ? char * ?deno[] = { " Spade " , " Heart " , " Diamond " , " Cotton " ,} ;
            static ? char ?card_symbol[] = " 23456789TJQKA " ;

            // ?p?-?pointer?to?argument
            // ?idx?-?index?in?argument
            // ?default?value?
            static ? int
            get_number_arg(
            char * ?p, int ?def)
            {
            ????
            if ?(isdigit( * p))
            ????
            {
            ????def?
            = ?atoi(p);
            ????}

            ????
            return ?def;
            }


            static ? void
            print_help()
            {
            ????cout
            << " Usage:? " << program_name << " ?[OPTION] " << endl;
            ????cout
            << " Bridge?Dealer " << endl;
            ????cout
            << " Example:? " << program_name << " ?-p4 " << endl;
            ????cout
            << endl;
            ????cout
            << " ?-p???????????number?of?players,?value?ranges?from?1?to?4 " << endl;
            ????cout
            << " ??????????????\ "" <<program_name<< " \ " ?with?NO?option?equals?\ "" <<program_name<< " ? - p1\ " ? " << endl;
            ????cout
            << " ?-n???????????number?of?deals,?default?\ " 1 \ "" << endl;
            ????cout
            << " ?-v,--version?print?version?information?and?exit " << endl;
            ????cout
            << " ?-h,--help????display?this?help?and?exit " << endl;
            ????cout
            << endl;
            ????exit(
            0 );
            }


            static ? void
            print_version()
            {
            ????cout
            << program_name << " ?version? " << THE_VERSION << endl;
            ????exit(
            0 );
            }


            static ? void
            dump_one_hand(vector
            < int > ::iterator?ori, int ?sps = 0 )
            {
            ????vector
            < int > ::iterator?iter = ori;
            ????
            for ( int ?i = 0 ;i < sizeof (deno) / sizeof (deno[ 0 ]);i ++ )
            ????
            {
            ????????
            for ( int ?j = 0 ;j < sps;j ++ )?cout << " ? " ;
            ????????cout
            << deno[i][ 0 ] << " :? " ;
            ????????
            for (;(iter != ori + 13 )? && ?( * iter) / 13 == i;iter ++ )
            ????????
            {
            ????????????cout
            << card_symbol[( * iter) % 13 ] << " ? " ;
            ????????}

            ????????cout
            << endl;
            ????}

            }



            static ? void
            dump_two_hands(vector
            < int > ::iterator?o1,?vector < int > ::iterator?o2, int ?sps = 0 )
            {
            ????vector
            < int > ::iterator?iter1 = o1;
            ????vector
            < int > ::iterator?iter2 = o2;
            ????
            int ?j;
            ????
            int ?cnt;
            ????
            for ( int ?i = 0 ;i < sizeof (deno) / sizeof (deno[ 0 ]);i ++ )
            ????
            {
            ????????cout
            << deno[i][ 0 ] << " :? " ;
            ????????cnt
            = 2 ;
            ????????
            for (;(iter1 != o1 + 13 )? && ?( * iter1) / 13 == i;iter1 ++ )
            ????????
            {
            ????????????cout
            << card_symbol[( * iter1) % 13 ] << " ? " ;
            ????????????cnt
            = cnt + 2 ;
            ????????}


            ????????
            for (j = 0 ;j < sps + sps - cnt;j ++ )?cout << " ? " ;
            ????????cout
            << deno[i][ 0 ] << " :? " ;
            ????????
            for (;(iter2 != o2 + 13 )? && ?( * iter2) / 13 == i;iter2 ++ )
            ????????
            {
            ????????????cout
            << card_symbol[( * iter2) % 13 ] << " ? " ;
            ????????}

            ????????cout
            << endl;
            ????}

            }

            // error?message?routines---------------begin
            static ? char * ?bs_errors[] =
            {
            ????
            " Unknown?option " ,
            #define ?BS_UNKNOWN_OPTION?0
            ????
            " Too?many?arguments " ,
            #define ?BS_TOO_MANY_ARGS?1
            ????
            " Argument?missing?after " ,
            #define ?BS_ARG_MISSING?2
            ????
            " Garbage?after?option " ,
            #define ?BS_GARBAGE??????3
            ????
            " Too?many?extra?commands " ,
            #define ?BS_EXTRA_CMD????????4
            ????
            " Invalid?argument?for " ,
            #define ?BS_INVALID_ARG??????5
            }
            ;
            // error?message?routines---------------end

            int
            main(
            int ?argc,? char ** ?argv)
            {
            ????
            int ?argv_idx? = ? 1 ;??????? /* ?active?option?letter?is?argv[0][argv_idx]? */
            ????
            int ?players = 1 ;
            ????
            int ?number_of_deals = 1 ;
            ????
            bool ?want_argument = false ;

            ????
            while (argc > 0 )
            ????
            {
            ????????
            if (argv[ 0 ][ 0 ] == ' - ' )
            ????????
            {
            ????????????
            char ?c = argv[ 0 ][argv_idx ++ ];
            ????????????
            switch (c)
            ????????????
            {
            ????????????
            case ? 0 :
            ????????????????
            // do?nothing
            ????????????????argv_idx =- 1 ;
            ????????????????
            break ;
            ????????????
            case ? ' - ' :? // ?"--"?don't?take?any?more?options
            ???????????????? if (strcmp(argv[ 0 ] + argv_idx, " version " ) == 0 ) {
            ????????????????????print_version();
            ????????????????}

            ????????????????
            else ? if (strcmp(argv[ 0 ] + argv_idx, " help " ) == 0 ) {
            ????????????????????print_help();
            ????????????????}

            ????????????????argv_idx
            =- 1 ;
            ????????????????
            break ;
            ????????????
            case ? ' h ' :
            ????????????????print_help();
            ????????????????
            break ;
            ????????????
            case ? ' v ' :
            ????????????????print_version();
            ????????????????
            break ;
            ????????????
            case ? ' p ' :? // ?1,2,3,4?players,?default?1
            ???????????????? if ?(argv[ 0 ][argv_idx]) {? // ?"-p{tag}"
            ????????????????????players = get_number_arg(argv[ 0 ] + argv_idx, 1 );
            ????????????????????argv_idx
            =- 1 ;
            ????????????????}

            ????????????????
            else {? // ?"-p?{tag}"
            ????????????????????want_argument = true ;
            ????????????????}

            ????????????????
            break ;
            ????????????
            case ? ' n ' :? // number?of?deals,?default?1
            ???????????????? if ?(argv[ 0 ][argv_idx]) {? // ?"-n{tag}"
            ????????????????????number_of_deals = get_number_arg(argv[ 0 ] + argv_idx, 1 );
            ????????????????????
            if (number_of_deals <= 0 )?number_of_deals = 1 ;
            ????????????????????argv_idx
            =- 1 ;
            ????????????????}

            ????????????????
            else {? // ?"-n?{tag}"
            ????????????????????want_argument = true ;
            ????????????????}

            ????????????????
            break ;
            ????????????
            default :
            ????????????????
            break ;
            ????????????}



            ????????????
            // handle?options?with?argument
            ???????????? if (want_argument)
            ????????????
            {
            ????????????????
            if ?(argv[ 0 ][argv_idx]) {
            ????????????????????cerr
            << bs_errors[BS_GARBAGE] << " :?\ "" <<argv[0]<< " \ "" << endl;
            ????????????????????exit(
            1 );
            ????????????????}


            ????????????????
            -- argc;
            ????????????????
            if ?(argc < 1 ) {
            ????????????????????cerr
            << bs_errors[BS_ARG_MISSING] << " :?\ "" <<argv[0]<< " \ "" << endl;
            ????????????????????exit(
            1 );
            ????????????????}

            ????????????????
            ++ argv;
            ????????????????argv_idx?
            = ? - 1 ;

            ????????????????
            switch (c)
            ????????????????
            {
            ????????????????
            case ? ' p ' :
            ????????????????????players
            = get_number_arg(argv[ 0 ], 1 );
            ????????????????????argv_idx
            =- 1 ;
            ????????????????????
            break ;
            ????????????????
            case ? ' n ' :
            ????????????????????number_of_deals
            = get_number_arg(argv[ 0 ], 1 );
            ????????????????????
            if (number_of_deals <= 0 )?number_of_deals = 1 ;
            ????????????????????argv_idx
            =- 1 ;
            ????????????????????
            break ;
            ????????????????
            default :
            ????????????????????;?
            // impossible
            ????????????????}

            ????????????}


            ????????}

            ????????
            else {
            ????????????argv_idx
            =- 1 ; // do?nothing
            ????????}

            ????????
            // ?If?there?are?no?more?letters?after?the?current?"-",?go?to?next
            ????????
            // ?argument.??argv_idx?is?set?to?-1?when?the?current?argument?is?to?be
            ????????
            // ?skipped.
            ???????? if ?(argv_idx? <= ? 0 ? || ?argv[ 0 ][argv_idx]? == ? 0 )
            ????????
            {
            ????????????
            -- argc;
            ????????????
            ++ argv;
            ????????????argv_idx?
            = ? 1 ;
            ????????}

            ????}

            ????
            // init
            ????srand(time( 0 ));

            ????
            // original?card
            ????
            // value:?spade,?0-12;?heart,?13-25;?diamond?26-38;?cotton?39-51;
            ????
            // array?index:?west,?0-12;?north,?13-25;?east?26-38;?south?39-51;
            ???? const ? int ?dim = 52 ;
            ????
            int ?cards[dim];

            ????
            for ( int ?i = 0 ;i < dim;i ++ )
            ????
            {
            ????????cards[i]
            = i;
            ????}

            ????vector
            < int > ?h(dim);
            ????h.assign(cards,cards
            + dim);

            ????
            // redeal
            ???? bool ?need_id = number_of_deals > 1 ;
            ????
            for ( int ?k = 0 ;k < number_of_deals;k ++ )
            ????
            {
            ????????random_shuffle(h.begin(),h.end());
            ????????sort(h.begin()
            + info::WEST * 13 ,h.begin() + info::WEST * 13 + 13 );
            ????????sort(h.begin()
            + info::NORTH * 13 ,h.begin() + info::NORTH * 13 + 13 );
            ????????sort(h.begin()
            + info::EAST * 13 ,h.begin() + info::EAST * 13 + 13 );
            ????????sort(h.begin()
            + info::SOUTH * 13 ,h.begin() + info::SOUTH * 13 + 13 );

            ????????
            // dump
            ???????? if (need_id) {
            ????????????cout
            << " ID:? " << k + 1 << endl;
            ????????}

            ????????
            switch (players)
            ????????
            {
            ????????
            case ? 1 :
            ????????????dump_one_hand(h.begin()
            + info::SOUTH * 13 );
            ????????????
            break ;
            ????????
            case ? 2 :
            ????????????dump_two_hands(h.begin()
            + info::EAST * 13 ,h.begin() + info::WEST * 13 , 26 );
            ????????????
            break ;
            ????????
            case ? 3 :
            ????????????dump_one_hand(h.begin()
            + info::NORTH * 13 , 26 );
            ????????????dump_one_hand(h.begin()
            + info::EAST * 13 );
            ????????????dump_one_hand(h.begin()
            + info::SOUTH * 13 , 26 );
            ????????????
            break ;
            ????????
            case ? 4 :
            ????????????dump_one_hand(h.begin()
            + info::NORTH * 13 , 26 );
            ????????????dump_two_hands(h.begin()
            + info::EAST * 13 ,h.begin() + info::WEST * 13 , 26 );
            ????????????dump_one_hand(h.begin()
            + info::SOUTH * 13 , 26 );
            ????????????
            break ;
            ????????
            default :
            ????????????;
            // impossible
            ????????}

            ????????cout
            << endl;
            ????}

            ????
            return ? 0 ;
            }

            posted on 2007-02-08 15:33 楊粼波 閱讀(322) 評論(0)  編輯 收藏 引用

            一本久久免费视频| 香蕉久久一区二区不卡无毒影院| 久久精品卫校国产小美女| 亚洲女久久久噜噜噜熟女| 99久久国语露脸精品国产| 久久国产精品免费| 久久精品亚洲中文字幕无码麻豆| 亚洲国产天堂久久综合| 久久99国产综合精品免费| 久久精品视频91| 久久九九全国免费| 亚洲精品无码成人片久久| 99久久综合狠狠综合久久| 香蕉久久夜色精品升级完成| 久久久久一本毛久久久| 2021久久国自产拍精品| 久久人与动人物a级毛片| 精品国产综合区久久久久久 | 精品无码久久久久久久久久| 久久婷婷国产剧情内射白浆| 国产午夜久久影院| 久久久久亚洲精品天堂| 色狠狠久久综合网| 久久亚洲国产成人精品无码区| 久久噜噜电影你懂的| 久久婷婷国产综合精品| 久久国产色av免费看| 亚洲成av人片不卡无码久久| 51久久夜色精品国产| 精品国产一区二区三区久久| 久久久国产乱子伦精品作者| 亚洲欧美日韩中文久久| 无码人妻久久一区二区三区免费丨 | 国产精品福利一区二区久久| 久久人人爽人人爽人人片AV高清 | 日韩精品久久久久久免费| 国产偷久久久精品专区 | 亚洲国产精品无码久久久蜜芽| 7777精品伊人久久久大香线蕉| 国内精品久久久久久久久电影网| 久久综合久久鬼色|