#include
#include
#include
//定義撲克的花色
enum suit;
//一副牌的數量
#define card_count 54
//定義撲克
typedef
struct cardcard;
//定義玩家
typedef
struct playerplayer;
//分牌完成後呼叫的函式的型別
typedef
int (*compare)(card* ,card*);
//函式宣告們
char* getcardname(const card*);
card** shuffle(const card*);
void dispatchcards(player** ,int ,const card** );
void sort(card**,int,compare);
int compare1(card* ,card*);
int compare2(card* ,card*);
void initonepack();
//原始一副牌所在的陣列
card pokers[card_count];
//入口函式
int main(void)
; //發牌
dispatchcards(players,sizeof(players)/sizeof(player*),shuffledpokers);
//洗後的牌用完了,釋放之
free(shuffledpokers);
int i;
//列印出每個玩家手中的牌
for(i=0;i//每個玩家都需要換一次行
printf("\n");
}//釋放玩家手中牌的陣列
for(i=0;ireturn0;}
//構造一副牌
void initonepack()
//剩下的兩張:大王和小王
//joker1
pokers[i].value=i/4+1;
pokers[i].suit=joker1;
//joker2
pokers[i+1].value=i/4+2;
pokers[i+1].suit=joker2;
}//洗牌,引數是原始的一副牌,返回洗完後的牌
card** shuffle(const card* pokers)else
}free(pokers2);
//返回洗完後的陣列
return retpokers;
}//發牌
//players是玩家陣列
//playercount是玩家數量
//shuffledcards是洗完後的一副牌
void dispatchcards(player** players,int playercount,const card** shuffledcards)
//輪流向每個玩家發牌
for(i=0;i//取當前玩家
player *curplayer = players[i%playercount];
//向玩家發牌
curplayer->cards[curplayer->cardscount] = shuffledcards[i];
//玩家手中實際的牌數增加
curplayer->cardscount++;
}}//排序函式
//cards是要排序的牌,每一項是牌的指標
//cardscount是牌的數量
//compare_func是比較函式
void sort(card** cards,int cardscount,compare compare_func)}}
}//比較函式,先比較點數再比較花色
int compare1(card* a,card* b)else
if(a->value < b->value)else
}//比較函式,先比較點數再比較花色
int compare2(card* a,card* b)else
if(a->value < b->value)else
}//獲取牌的名字
//返回牌的名字字串,呼叫者用完後需要free()之。
char* getcardname(const card* card);//0=='\0'
switch (card->suit)
//存放點數名字
char valuestr[16];
switch(card->value)
//動態分配足夠的空間
char * ret = malloc(16);
//將兩個名字合併到ret中
sprintf(ret,"%s%s",suitstr,valuestr);
return ret;
}
從零開始帶你成為MySQL實戰優化高手
從零開始帶你成為mysql實戰優化高手 中mysql架構和innodb儲存引擎,在本次分享開始前先嘗試思考如下幾個常見的面試題 1.undo log和redo log了解過嗎?它們的作用分別是什麼?2.redo log是如何保證事務不丟失的?3.mysql的事務是先提交還是先刷盤?4.更新操作為什麼...
c 快捷鍵(成為高手必備)
ctrl shift b生成解決方案 ctrl f7 生成編譯 ctrl o 開啟檔案 ctrl shift o開啟專案 ctrl shift c顯示類檢視視窗 f4 顯示屬性視窗 shift f4顯示專案屬性視窗 ctrl shift e顯示資源檢視 f12 轉到定義 ctrl f12轉到宣告 c...
精品C語言學習資料 教你成為程式設計高手
親愛的down友 的獲取優質學習資源。特此鳴謝!4.visual c 專案開發案例全程實錄 含原始碼 本專題從軟體工程的角度出發,按照專案的開發順序,系統 全面地介紹了程式 開發流程。從開發背景 需求分析 系統功能分析 資料庫分析 資料庫建模到 系統開發,每一過程都進行了詳細的介紹。合初學者學習 課...