當前位置:編程學習大全網 - 編程語言 - C語言編程——發牌洗牌模擬,求幫助

C語言編程——發牌洗牌模擬,求幫助

#include

#include

#include

#include

#define SUIT 52

#define HALF 26

#define COLOR ((char)13)

// 撲克牌的編碼是壹組13進制的數據,從0編到51

// 函數tell用於解釋編碼的內容

int tell(char card, char * description)

{

char i=0, j=0;

char *suit[]={"Spades","Hearts","Clubs","Diamonds"};

char *face[] = {"A","2","3","4","5","6","7","8","9",

"10","Jack","Queen","King"};

//題幹比較奇怪,要求扣8張底牌,但是含大小王。正確的規則應該是不含大小王的情況下扣8張牌,每人11張牌就對了

//否則應該扣10張牌或者6張牌,否則每人發牌得到的牌數不相同(不是4的倍數)

//如需要,可自行定義JB=52,JA=53,SUIT=54,HALF=27即可。

//if (card > JB || card < 0 || !description) return 0;

//if (card == JB) { sprintf(description, "Big Joker"); return 1; }

//if (card == JA) { sprintf(description, "Little Joker"); return 1; }

i = card / COLOR; j = card % COLOR;

sprintf(description, "%s %s", suit[i], face[j]);

return 1;

}

//初始化牌,形成壹個順序牌

int init(char *poker)

{

char i = 0;

if (!poker) return 0;

for (i=0; i<SUIT; i++) poker[i]=i;

srand((unsigned)time(0));

return 1;

}

//洗牌,將當前牌分成上下兩組,然後交叉,有右手先和左手先兩種可能,這壹個是左手先交換法

int wash_left_hand(char *poker)

{

char i=0, j=0, k=0;

char boker[SUIT];

if(!poker) return 0;

for(i=0; i<HALF; i++) {

j = i * 2; //上半組

boker[j] = poker[i];

k = i + HALF; //下半組

boker[j+1]=poker[k];

}//next i

memcpy(poker, boker, SUIT);

return 1;

}

//洗牌,將當前牌分成上下兩組,然後交叉,有右手先和左手先兩種可能,這壹個是右手先交換法

//註意左右手先後順序的區別在於變量j的奇偶變化

int wash_right_hand(char *poker)

{

char i=0, j=0, k=0;

char boker[SUIT];

if(!poker) return 0;

for(i=0; i<HALF; i++) {

j = i * 2; //上半組

boker[j+1] = poker[i];

k = i + HALF; //下半組

boker[j]=poker[k];

}//next i

memcpy(poker, boker, SUIT);

return 1;

}

//在當前牌的基礎上洗壹次牌,主要用隨機函數的奇偶性確定用左手洗還是右手洗

int wash_once(char *poker)

{

return rand()%2?wash_left_hand(poker):wash_right_hand(poker);

}

//在當前牌的基礎上隨機洗若幹次牌,至少8次,最多18次

int wash_full(char *poker)

{

int i = 0, j = 0, k = 0;

i = rand() % 10 + 8;

printf("\nTry to wash %d times.\n", i);

for (j=0; j < i ; j++) k+=wash_once(poker);

return k;

}

int main(void)

{

char choice = 0, i = 0, j = 0; char poker[SUIT], card[16];

init(poker);

do {

printf("\n\tWelcome to My Poker Game!\n");

printf("\t0-Wash.\n");

printf("\t1-Show A.\n");

printf("\t2-Show B.\n");

printf("\t3-Show C.\n");

printf("\t4-Show D.\n");

printf("\tany other number-quit.\n");

printf("Your Choice?");

scanf("%d", &choice);

if(choice 4) break;

if(choice ==0) {

wash_full(poker);

continue;

}//end if

i = (choice - 1) * 11; //註意用11張牌,扣8張底牌

printf("His card is...\n");

for(j = i; j<i+11; j++) {

tell(poker[j], card);

printf("%s\t", card);

}//next

printf("\n");

}while(1);

return 0;

}

  • 上一篇:設計app都用到什麽軟件
  • 下一篇:學室內設計要學哪些東西呢?余姚有沒有這樣的培訓班?
  • copyright 2024編程學習大全網