• <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)  編輯 收藏 引用

            久久www免费人成看片| 国产产无码乱码精品久久鸭| 国产91久久精品一区二区| 久久AV高潮AV无码AV| 偷偷做久久久久网站| 久久亚洲精品国产亚洲老地址| 久久久久这里只有精品| 国内精品伊人久久久久网站| 国产高潮国产高潮久久久91 | 国产成人久久久精品二区三区| 久久99国产综合精品免费| 欧美熟妇另类久久久久久不卡| 久久亚洲AV无码精品色午夜麻豆 | 91精品国产综合久久婷婷| 久久Av无码精品人妻系列 | 久久久中文字幕| 亚洲一区中文字幕久久| 国产精品永久久久久久久久久| 久久久久人妻一区精品| 97视频久久久| 久久久国产精品亚洲一区| 久久99国产精品久久久| 久久精品这里只有精99品| 婷婷久久综合九色综合九七| 久久精品卫校国产小美女| 久久99热只有频精品8| 9191精品国产免费久久| 欧美一级久久久久久久大| 久久精品国产亚洲av麻豆图片 | 中文字幕一区二区三区久久网站| 国产激情久久久久影院小草| 久久国产精品无码网站| 久久精品国产亚洲AV蜜臀色欲| 97久久天天综合色天天综合色hd| 久久久WWW免费人成精品| 亚洲国产另类久久久精品黑人| 久久国产精品一区二区| 日韩久久无码免费毛片软件| 国产精品一久久香蕉国产线看观看| 久久国产精品久久| 久久天天躁狠狠躁夜夜avapp|