亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++實現洗牌發牌排序功能的示例代碼

2020-05-23 13:38:12
字體:
來源:轉載
供稿:網友

在內存中模擬出一副牌,然后模擬洗牌,發牌等動作。

流程是這樣的:構建一副牌保存到一個數組中—洗牌—創建玩家—向玩家發牌–輸出每個玩家的牌。

#include <stdio.h>#include <stdlib.h>#include <time.h>//定義撲克的花色enum Suit{  heart,  spade,  diamond,  club,  joker1,  joker2};//一副牌的數量#define CARD_COUNT 54//定義撲克typedef struct Card{  int value;//牌的點數從1開始  enum Suit suit;//花色}Card;//定義玩家typedef struct Player{  char name[64];//玩家的名字  Card ** cards;//玩家分到的牌。每項是一個指針,指向原始一副牌數組中的一項,這樣可以節省空間  int cardsCount;//玩家分到的牌的數量}Player;//分牌完成后調用的函數的類型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){  //初始化一副牌  initOnePack();    //洗牌,shuffledPokers保存洗后的牌們  Card** shuffledPokers = shuffle(pokers);    //構建三個玩家  Player player1;  strcpy(player1.name,"隔壁老王");  player1.cards=NULL;  player1.cardsCount=0;  Player player2;  strcpy(player2.name,"小明");  player2.cards=NULL;  player2.cardsCount=0;  Player player3;  strcpy(player3.name,"田中龜孫");  player3.cards=NULL;  player3.cardsCount=0;  //把三放到一個數組中,以傳入發牌函數中  Player* players[]={&player1,&player2,&player3};    //發牌  dispatchCards(players,sizeof(players)/sizeof(Player*),shuffledPokers);    //洗后的牌用完了,釋放之  free(shuffledPokers);  int i;    //打印出每個玩家手中的牌  for(i=0;i<sizeof(players)/sizeof(Player*);i++){        //先打印玩家的名字    printf("%s/n",players[i]->name);        //需要對玩家手中的牌排序    sort(players[i]->cards,players[i]->cardsCount,compare1);        //打印玩家手中所有的牌    int j;    for(j=0;j<players[i]->cardsCount;j++){      char * name = getCardName(players[i]->cards[j]);      printf("%s ",name);      free(name);    }    //每個玩家都需要換一次行    printf("/n");  }    //釋放玩家手中牌的數組  for(i=0;i<sizeof(players)/sizeof(Player*);i++){    free(players[i]->cards);  }  return 0;}//構造一副牌void initOnePack(){  int i=0;  //前52張  for(;i<CARD_COUNT-2;i++){    pokers[i].value=i/4+1;    pokers[i].suit = i%4;  }  //剩下的兩張:大王和小王  //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){  int i;    //分牌返回牌數組的內存空間  Card** retPokers = malloc(CARD_COUNT*sizeof(Card*));  //為了不改動原始的一副牌,另建一個數組,保存原始牌的指針(注意每項不是牌,而是牌的指針)  Card** pokers2 = malloc(CARD_COUNT*sizeof(Card*));  for(i=0;i<CARD_COUNT;i++){    pokers2[i] = &pokers[i];  }    //種下隨機種子。種子取的是當前時間,    //所以保證了每次運行程序時,產生的隨機數序列不同  srand(time(NULL));    //取得隨機序號,從pokers2取出序號所指的項,把它依次加到retPokers中。  for(i=0;i<CARD_COUNT;i++){    unsigned int index = rand()%CARD_COUNT;    if(pokers2[index] != NULL){      retPokers[i] = pokers2[index];      pokers2[index]=NULL;    }else{      i--;    }  }  free(pokers2);    //返回洗完后的數組  return retPokers;}//發牌//players是玩家數組//playerCount是玩家數量//shuffledCards是洗完后的一副牌void dispatchCards(Player** players,int playerCount,const Card** shuffledCards){  //計算每個玩家手中牌的數組的容量,如果每個玩家手中的牌不一樣,  //最多就差一張,加1是為了保證數組分配的空間足夠容納分到的牌。  int numberCards = CARD_COUNT/playerCount+1;  //為每個玩家的牌數組分配空間  int i;  for(i=0;i<playerCount;i++){    Card* cards = malloc(numberCards*sizeof(Card*));    players[i]->cards = cards;  }  //輪流向每個玩家發牌  for(i=0;i<CARD_COUNT;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 i;  for(i=0;i<cardsCount-1;i++){    int j;    for(j=0;j<cardsCount-i-1;j++){        if(compare_func(cards[j],cards[j+1])){          int tmp=cards[j];          cards[j]=cards[j+1];          cards[j+1]=tmp;        }    }  }}//比較函數,先比較點數再比較花色int compare1(Card* a,Card* b){  if(a->value > b->value){    return 1;  }else if(a->value < b->value){    return 0;  }else{    if(a->suit > b->suit)      return 1;    else      return 0;  }}//比較函數,先比較點數再比較花色int compare2(Card* a,Card* b){  if(a->value > b->value){    return 0;  }else if(a->value < b->value){    return 1;  }else{    if(a->suit > b->suit)      return 0;    else      return 1;  }}//獲取牌的名字//返回牌的名字字符串,調用者用完后需要free()之。char* getCardName(const Card* card){  //存放花色名字  char suitStr[16]={0};//0=='/0'  switch (card->suit) {  case heart:    strcpy(suitStr,"紅桃");    break;  case spade:    strcpy(suitStr,"黑桃");    break;  case diamond:    strcpy(suitStr,"方塊");    break;  case club:    strcpy(suitStr,"梅花");    break;  }  //存放點數名字  char valueStr[16];  switch(card->value){  case 1:    strcpy(valueStr,"A");    break;  case 11:    strcpy(valueStr,"J");    break;  case 12:    strcpy(valueStr,"Q");    break;  case 13:    strcpy(valueStr,"K");    break;  case 14:    strcpy(valueStr,"小王");    break;  case 15:    strcpy(valueStr,"大王");    break;  default:    sprintf(valueStr,"%d",card->value);    break;  }  //動態分配足夠的空間  char * ret = malloc(16);  //將兩個名字合并到ret中  sprintf(ret,"%s%s",suitStr,valueStr);  return ret;}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av视频在线免费观看| 欧美色视频日本高清在线观看| 久久久精品一区| 国产一区二区日韩| 日韩电影中文字幕一区| 亚洲欧洲黄色网| 亚洲精品不卡在线| 97在线免费视频| 日本乱人伦a精品| 国产日韩欧美成人| 亚洲网站在线观看| 亚洲综合中文字幕在线| 国产精品久久久久久久久久久久久久| 色婷婷综合成人| 日韩电影中文字幕| 久久综合伊人77777| 欧美日韩中文字幕综合视频| 欧美激情视频给我| 懂色av影视一区二区三区| 高潮白浆女日韩av免费看| 国产偷亚洲偷欧美偷精品| 成人精品福利视频| 欧美最顶级的aⅴ艳星| 亚洲国产黄色片| 日韩美女福利视频| 成人黄色av播放免费| 欧美在线观看日本一区| 日韩欧美国产视频| 欧美性受xxxx黑人猛交| 亚洲精品视频网上网址在线观看| 在线精品国产欧美| 亚洲国产女人aaa毛片在线| 欧亚精品中文字幕| 欧美精品电影免费在线观看| 国产精品自拍小视频| 国产成人极品视频| 国产精品永久免费在线| 欧美性高潮床叫视频| 日韩在线视频免费观看| 亚洲免费av电影| 国产精品日本精品| 欧美日韩国产精品专区| 国产一区二区三区视频| 日韩国产欧美精品在线| 日韩国产欧美精品一区二区三区| 色悠久久久久综合先锋影音下载| 亚洲美女在线看| 久久精品影视伊人网| 国产婷婷色综合av蜜臀av| 国产在线观看一区二区三区| 欧美性猛交xxxx乱大交| 国产精品爱久久久久久久| 久久精彩免费视频| 欧美国产日韩二区| 九九久久综合网站| 久久久久久高潮国产精品视| 欧美有码在线观看| 欧美精品久久一区二区| 亚洲第一网站免费视频| 国产精品对白刺激| 免费99精品国产自在在线| 91在线免费网站| 另类美女黄大片| 5566日本婷婷色中文字幕97| 国产午夜精品免费一区二区三区| 热99精品里视频精品| 欧美理论电影在线播放| 欧美高清视频在线| 国产精品视频最多的网站| 亚洲在线视频福利| 欧美另类极品videosbest最新版本| 91九色视频导航| 国产精品爽黄69天堂a| 热久久这里只有| 国产精品一区二区三区久久| 日韩av一区在线观看| 日韩av在线影院| 亚洲综合国产精品| 亚洲国产福利在线| 国色天香2019中文字幕在线观看| 欧美中文在线观看国产| 欧美成人精品在线视频| 91网在线免费观看| 在线观看精品国产视频| 日韩电影免费在线观看| 国产在线999| 亚洲一区二区三区在线免费观看| 亚洲成人黄色在线观看| 欧美wwwxxxx| 色黄久久久久久| 久久影院资源网| 91在线观看免费高清| 一夜七次郎国产精品亚洲| 亚洲精品电影在线| 欧美电影第一页| 日韩不卡在线观看| 久久久人成影片一区二区三区观看| 亚洲欧洲视频在线| 亚洲一区999| 神马久久桃色视频| 日韩美女免费观看| 国产精品一久久香蕉国产线看观看| 日韩电视剧在线观看免费网站| 欧美午夜影院在线视频| 91精品视频在线看| 欧美性猛交xxxx富婆| 午夜精品免费视频| 九九热这里只有精品免费看| 国产精品爽爽ⅴa在线观看| 91精品国产高清自在线| 欧洲美女7788成人免费视频| 欧洲成人性视频| 久久精品国产电影| 狠狠躁夜夜躁人人爽天天天天97| 亚洲精品www久久久| 亚洲免费av网址| 久久综合免费视频| 在线看片第一页欧美| 国产精品美女视频网站| 国产精品成av人在线视午夜片| 欧美一区二粉嫩精品国产一线天| 国产色综合天天综合网| 亚洲欧美国产一区二区三区| 国产精品久久久久免费a∨大胸| 91九色单男在线观看| 亚洲综合中文字幕68页| 在线看日韩av| 国产69久久精品成人看| 欧美亚洲国产精品| 97在线免费观看| 国产日韩综合一区二区性色av| 深夜精品寂寞黄网站在线观看| 日韩精品视频免费专区在线播放| 日韩中文av在线| 国产一区二区三区在线免费观看| 欧洲成人在线观看| 日韩av免费一区| 欧美激情videoshd| 久久久噜噜噜久久中文字免| 一区二区三区四区在线观看视频| 亚洲视频专区在线| 97色在线观看免费视频| 亚洲精品v欧美精品v日韩精品| 亚洲欧美激情视频| 欧美一区二区大胆人体摄影专业网站| 亚洲美女黄色片| 精品少妇v888av| 国产成人久久久精品一区| 亚洲精品久久久久久久久久久久| 亚洲天堂av在线播放| 久久久中文字幕| 亚洲欧美一区二区三区四区| 亚洲成年人影院在线| 亚洲免费电影在线观看| 欧美中在线观看| 亚洲专区国产精品| 92国产精品视频| 97精品久久久中文字幕免费| 久久婷婷国产麻豆91天堂| 成人亚洲激情网| 亚洲欧美精品中文字幕在线| 亚洲在线免费观看| 91精品国产91久久久久久| 成人精品视频99在线观看免费|