|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
Windows下正常
Linux下就不行了
这样又可以
- /*洗盘程序*/
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- #include <wchar.h>
- #include <locale.h>
- #define CARD_NUMBER 14
- typedef struct
- {
- char play_name[20];
- unsigned char card[CARD_NUMBER]; // 每个人的牌数
- } PlayAttribute;
- void shuffle(PlayAttribute *play1, PlayAttribute *play2, PlayAttribute *play3)
- {
- int i;
- char card_flag[54] = {0}; // 牌的标志,为1表示此牌已使用
- unsigned char card1, card2, card3;
- for(i = 0; i < CARD_NUMBER; i++)
- {
- do
- {
- card1 = rand() % 54; // 生成0~53之间的数字
- } while(card_flag[card1] == 1); // 此牌已使用,重新生成
- do
- {
- card2 = rand() % 54; // 生成0~53之间的数字
- } while((card_flag[card2] == 1) || (card2 == card1)); // 此牌已使用,重新生成
- do
- {
- card3 = rand() % 54; // 生成0~53之间的数字
- } while((card_flag[card3] == 1) || (card3 == card2) || (card3 == card1)); // 此牌已使用,重新生成
- // 以下3张牌已使用,进行标记
- card_flag[card1] = 1;
- card_flag[card2] = 1;
- card_flag[card3] = 1;
- play1->card[i] = card1;
- play2->card[i] = card2;
- play3->card[i] = card3;
- }
- }
- wchar_t *get_card(unsigned char card) // 返回数字对应的字符串
- {
- static wchar_t table[4][4] = {L"方 ", L"梅 ", L"红 ", L"黑 "};
- if((card >= 0) && (card < 13))
- {
- switch((card % 13) + 1)
- {
- case 11:
- swprintf(table[0] + 1, 4, L"%c", L'J');
- return table[0];
- case 12:
- swprintf(table[0] + 1, 4, L"%c", L'Q');
- return table[0];
- case 13:
- swprintf(table[0] + 1, 4, L"%c", L'K');
- return table[0];
- case 1:
- swprintf(table[0] + 1, 4, L"%c", L'A');
- return table[0];
- }
- swprintf(table[0] + 1, 4, L"%d", (card % 13) + 1);
- return table[0];
- }
- else if((card >= 13) && (card < 2 * 13))
- {
- switch((card % 13) + 1)
- {
- case 11:
- swprintf(table[1] + 1, 4, L"%c", L'J');
- return table[1];
- case 12:
- swprintf(table[1] + 1, 4, L"%c", L'Q');
- return table[1];
- case 13:
- swprintf(table[1] + 1, 4, L"%c", L'K');
- return table[1];
- case 1:
- swprintf(table[1] + 1, 4, L"%c", L'A');
- return table[1];
- }
- swprintf(table[1] + 1, 4, L"%d", (card % 13) + 1);
- return table[1];
- }
- else if((card >= 2 * 13) && (card < 3 * 13))
- {
- switch((card % 13) + 1)
- {
- case 11:
- swprintf(table[2] + 1, 4, L"%c", L'J');
- return table[2];
- case 12:
- swprintf(table[2] + 1, 4, L"%c", L'Q');
- return table[2];
- case 13:
- swprintf(table[2] + 1, 4, L"%c", L'K');
- return table[2];
- case 1:
- swprintf(table[2] + 1, 4, L"%c", L'A');
- return table[2];
- }
- swprintf(table[2] + 1, 4, L"%d", (card % 13) + 1);
- return table[2];
- }
- else if((card >= 3 * 13) && (card < 4 * 13))
- {
- switch((card % 13) + 1)
- {
- case 11:
- swprintf(table[3] + 1, 4, L"%c", L'J');
- return table[3];
- case 12:
- swprintf(table[3] + 1, 4, L"%c", L'Q');
- return table[3];
- case 13:
- swprintf(table[3] + 1, 4, L"%c", L'K');
- return table[3];
- case 1:
- swprintf(table[3] + 1, 4, L"%c", L'A');
- return table[3];
- }
- swprintf(table[3] + 1, 4, L"%d", (card % 13) + 1);
- return table[3];
- }
- else // 大王和小王
- {
- if(card == 52)
- {
- return L"大王";
- }
- else
- {
- return L"小王";
- }
- }
- }
- int main(void)
- {
- int i;
- char replay;
- PlayAttribute play1, play2, play3;
- setlocale(LC_ALL, "chs");
- srand((unsigned int)time(NULL));
- printf("请输入1号玩家的名字:");
- scanf("%s", play1.play_name);
- printf("请输入2号玩家的名字:");
- scanf("%s", play2.play_name);
- printf("请输入3号玩家的名字:");
- scanf("%s", play3.play_name);
- printf("方=方角,梅=梅花,红=红桃,黑=黑桃\n");
-
- do
- {
- shuffle(&play1, &play2, &play3); // 洗牌
- printf("%s手上的牌是:", play1.play_name);
- for(i = 0; i < CARD_NUMBER; i++)
- {
- wprintf(L"%ls ", get_card(play1.card[i]));
- }
- putchar('\n');
- printf("%s手上的牌是:", play2.play_name);
- for(i = 0; i < CARD_NUMBER; i++)
- {
- wprintf(L"%ls ", get_card(play2.card[i]));
- }
- putchar('\n');
- printf("%s手上的牌是:", play3.play_name);
- for(i = 0; i < CARD_NUMBER; i++)
- {
- wprintf(L"%ls ", get_card(play3.card[i]));
- }
- putchar('\n');
-
- printf("重新洗牌(Y/N)?");
- getchar();
- scanf("%c", &replay);
- } while((replay == 'Y') || (replay == 'y'));
- return 0;
- }
复制代码
printf 和 wprintf 两个不能混在一起使用,会导致冲突。
|
|