C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序
C語(yǔ)言自動(dòng)發(fā)牌程序,供大家參考,具體內(nèi)容如下
一副撲克有52張牌,打橋牌時(shí)應(yīng)將牌分給4個(gè)人。請(qǐng)?jiān)O(shè)計(jì)一個(gè)程序完成自動(dòng)發(fā)牌的工作。要求:黑桃用S (Spaces)表示,紅桃用H (Hearts)表示,方塊用D (Diamonds)表示,梅花用C (Clubs)表示。
分析:
要設(shè)置數(shù)組表現(xiàn)撲克牌
要設(shè)置數(shù)組表現(xiàn)玩家
要給撲克牌做特定標(biāo)識(shí),得到結(jié)果后玩家要知道自己手中黑桃有哪些、方塊有哪些
初步想法:
設(shè)置4個(gè)字符數(shù)組保存4種梅花牌,設(shè)置4個(gè)字符數(shù)組表示4名玩家分配到的牌
每張牌隨機(jī)發(fā)給4名玩家,當(dāng)玩家的持牌數(shù)達(dá)到13,不再分配給該名玩家牌
代碼展示:
void mycode_13() { srand(unsigned(time(NULL))); /*全部牌*/ char S[13] = { '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A' }; char H[13] = { '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A' }; char D[13] = { '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A' }; char C[13] = { '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A' }; /*4個(gè)玩家*/ char player1[13], player2[13], player3[13], player4[13]; int p1 = 0, p2 = 0, p3 = 0, p4 = 0; distribution(S, player1, player2, player3, player4, &p1, &p2, &p3, &p4); distribution(H, player1, player2, player3, player4, &p1, &p2, &p3, &p4); distribution(D, player1, player2, player3, player4, &p1, &p2, &p3, &p4); distribution(C, player1, player2, player3, player4, &p1, &p2, &p3, &p4); puts("運(yùn)行結(jié)束"); for (int i = 0; i < 13; i++) printf("%c ", player1[i]); putchar('\n'); for (int i = 0; i < 13; i++) printf("%c ", player2[i]); putchar('\n'); for (int i = 0; i < 13; i++) printf("%c ", player3[i]); putchar('\n'); for (int i = 0; i < 13; i++) printf("%c ", player4[i]); } void distribution(char * S_H_D_C, char * player1, char * player2, char * player3, char * player4, int *p1, int *p2, int *p3, int *p4) { static int h = 1; int r; int a = *p1, b = *p2, c = *p3, d = *p4; for (int i = 0; i < 13; i++) { r = (rand() % 4) + 1; while ((r == 1 && (*p1) == 13) || (r == 2 && (*p2) == 13) || (r == 3 && (*p3) == 13) || (r == 4 && (*p4) == 13)) r = (rand() % 4) + 1; switch (r) { case 1: player1[(*p1)++] = S_H_D_C[i]; break; case 2: player2[(*p2)++] = S_H_D_C[i]; break; case 3: player3[(*p3)++] = S_H_D_C[i]; break; case 4: player4[(*p4)++] = S_H_D_C[i]; break; default: break; } } switch (h++) { case 1: printf("黑桃:\n"); break; case 2: printf("紅桃:\n"); break; case 3: printf("方塊:\n"); break; case 4: printf("梅花:\n"); break; } printf("Player1:"); for (int i = a; i < (*p1); i++) printf("%c ", player1[i]); putchar('\n'); printf("Player2:"); for (int i = b; i < (*p2); i++) printf("%c ", player2[i]); putchar('\n'); printf("Player3:"); for (int i = c; i < (*p3); i++) printf("%c ", player3[i]); putchar('\n'); printf("Player4:"); for (int i = d; i < (*p4); i++) printf("%c ", player4[i]); putchar('\n'); }
以下代碼保證了當(dāng)某個(gè)人得到13張牌后不在得牌
r = (rand() % 4) + 1; while ((r == 1 && (*p1) == 13) || (r == 2 && (*p2) == 13) || (r == 3 && (*p3) == 13) || (r == 4 && (*p4) == 13)) r = (rand() % 4) + 1;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于C語(yǔ)言實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11C/C++之long int與long long的區(qū)別及說(shuō)明
這篇文章主要介紹了C/C++之long int與long long的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08基于C語(yǔ)言模擬實(shí)現(xiàn)人生重開(kāi)模擬器游戲
人生重開(kāi)模擬器是前段時(shí)間非常火的一個(gè)小游戲,所以本文我們將一起學(xué)習(xí)使用c語(yǔ)言寫(xiě)一個(gè)簡(jiǎn)易版的人生重開(kāi)模擬器,感興趣的小伙伴可以了解下2024-02-02C++超詳細(xì)分析講解內(nèi)聯(lián)函數(shù)
為了消除函數(shù)調(diào)用的時(shí)空開(kāi)銷(xiāo),C++ 提供一種提高效率的方法,即在編譯時(shí)將函數(shù)調(diào)用處用函數(shù)體替換,類(lèi)似于C語(yǔ)言中的宏展開(kāi)。這種在函數(shù)調(diào)用處直接嵌入函數(shù)體的函數(shù)稱(chēng)為內(nèi)聯(lián)函數(shù)(Inline Function),又稱(chēng)內(nèi)嵌函數(shù)或者內(nèi)置函數(shù)2022-06-06C++?STL中五個(gè)常用算法使用教程及實(shí)例講解
本文主要介紹了C++?STL算法中常見(jiàn)的五個(gè)算法的使用教程并附上了案例詳解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11C++?Queue隊(duì)列類(lèi)模版實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹C++?Queue隊(duì)列類(lèi)模版實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02