close
// C RunTime 標頭檔 #include <stdlib.h> #include <iostream> #include <time.h> #include <string.h> //撲克牌結構 typedef struct { char suit[10]; int face; }pockcard; //玩家結構 typedef struct { char name[20]; int value; int win; pockcard card[2]; }player; //副程式 //交換牌 void swap(pockcard pock[52],int a, int b); //拿一付新牌 void TakeNew(int iDeck[][13],pockcard pock[52]); //洗牌 void wash(pockcard pock[52]); //亮出所有牌 void show(int iDeck[][13], const char *ccFace[],pockcard pock[52]); //亮每個人的牌 void showEachone(player *Pman,int iPeoplenum, const char *ccFace[]); //發牌 int shffle(player *Pman, int iPeoplenum,pockcard *pock,int now); //算分 int countgrade(player *Pman, int iPeoplenum); //主程式 int main() { using namespace std; const char *face[13]={"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; int iPeoplenum,t,now = 0; int pockpie[4][13] = {0}; char ch = '\0'; pockcard pock[52] = {0}; cout << "How many people want to play?:> "; cin >> iPeoplenum; //得到人數 player *PM = new player[iPeoplenum]; //初始化每個人的資料 for (int i = 0;i < iPeoplenum;i++) { cout << "Player" << i + 1 << "'s name:>"; cin >> PM[i].name; PM[i].value = 0; PM[i].win = 0; } srand(time(0)); //拿一付新牌 TakeNew(pockpie, pock); //洗牌 wash(pock); //亮出所有牌 show(pockpie, face, pock); printf("\n\n"); for (;ch != 'n';) { //發牌 now = shffle(PM, iPeoplenum, pock ,now); cout << "=============================\n"; //亮每個人的牌 showEachone(PM, iPeoplenum, face); t = countgrade(PM, iPeoplenum); //輸出這回合的成績 cout << PM[t].name << " win!\n"; for (int i = 0;i < iPeoplenum;i++) cout << PM[i].name << " has " << PM[i].value << " value. "; cout << "\n"; for (int i = 0;i < iPeoplenum;i++) printf("%5s : %3d\n",PM[i].name,PM[i].win); //看牌用完了沒?來繼續 if (!(now + iPeoplenum*2 < 53)) { now = 0; //洗牌 wash(pock); //亮牌 show(pockpie, face, pock); printf("\n\n"); } for (int i = 0;i < iPeoplenum;i++) PM[i].value = 0; cout << "Play again?(y/n):"; cin >> ch; } system("PAUSE"); return 0; } /拿一付新牌 void TakeNew(int iDeck[][13],pockcard pock[52]) { int row, column, card = 0; //照順序做出張牌 for (row = 0;row < 4;row++) { for (column = 0;column < 13;column++) { ++card; switch (row) { case 0: strcpy(pock[row*13+column].suit,"Spades"); pock[row*13+column].face = column; break; case 1: strcpy(pock[row*13+column].suit,"Hearts"); pock[row*13+column].face = column; break; case 2: strcpy(pock[row*13+column].suit,"Diamonds"); pock[row*13+column].face = column; break; case 3: strcpy(pock[row*13+column].suit,"Clubs"); pock[row*13+column].face = column; break; } iDeck[row][column] = card; } } } //洗牌 oid wash(pockcard *pock) { int r1, r2; //取兩個數字交換做次 for (int times= 0; times < 100; times++) { r1 = rand() % 52; r2 = rand() % 52; swap(pock,r1,r2); } } //亮出所有牌 void show(int iDeck[][13], const char *ccFace[],pockcard pock[52]) { int card, g = 0; //從結構中取牌,把張牌依序亮出 for (card = 0; card < 52; card++) { ++g; printf("%2d : %2s of %s\n",g, ccFace[pock[card].face],pock[card].suit); } } /發牌 int shffle(player Pman[], int iPeoplenum,pockcard *pock,int now) { int j = 0; for (int i = now;i < now + iPeoplenum * 2;i++) { Pman[j].card[0] = pock[i]; ++i; Pman[j].card[1] = pock[i]; ++j; } return now + iPeoplenum * 2; } //亮每個人的牌 void showEachone(player *Pman,int iPeoplenum, const char *ccFace[]) { int g = 0; ; for (int i = 0;i < iPeoplenum;i++) { std::cout << Pman[i].name << "'s card :" << "\n"; printf("1: %2s of %s ",ccFace[Pman[i].card[0].face],Pman[i].card[0].suit); printf("2: %2s of %s\n",ccFace[Pman[i].card[1].face],Pman[i].card[1].suit); } } //算分 int countgrade(player *Pman, int iPeoplenum) { int max,index = 0,i; for (i = 0;i < iPeoplenum;i++) { if (0 == Pman[i].card[0].face) Pman[i].value += 14; else Pman[i].value += (Pman[i].card[0].face+1); if (0 == Pman[i].card[1].face) Pman[i].value += 14; else Pman[i].value += (Pman[i].card[1].face+1); } max = Pman[0].value; for (i = 0;i < iPeoplenum;i++) if (max < Pman[i].value) { max = Pman[i].value; index = i; } Pman[index].win++; return index; } //交換牌 void swap(pockcard pock[52],int a, int b) { pockcard t = pock[a]; pock[a] = pock[b]; pock[b] = t; }
arrow
arrow
    全站熱搜

    讓地獄深紅的天亮 發表在 痞客邦 留言(0) 人氣()