kaleidoscope 發問時間： 電腦與網際網路程式設計 · 1 0 年前

# 用C語言寫出21點遊戲

### 5 個解答

• 1 0 年前
最佳解答

#include <stdio.h>//printf

#include <stdlib.h>//srand,rand

#include <time.h>//time

#define NUMBER_OF_POKER 52

struct card {

const char *face; /* define pointer face */

const char *suit; /* define pointer suit */

}; /* end structure card */

typedef struct card Card; /* new type name for struct card */

/* prototypes */

void fillDeck( Card * const wDeck, const char * wFace[],

const char * wSuit[] );

void shuffle( Card * const wDeck );

void play( Card * const wDeck,int boilingPoint);

int getGrade(Card * const wDeck,int x);

int main( void ){

Card deck[ NUMBER_OF_POKER ]; /* define array of Cards */

/* initialize array of pointers */

const char *face[] = { "1", "2", "3", "4", "5","6", "7", "8", "9", "10","J", "Q", "K"};

const char *suit[] = { "黑陶", "愛心", "磚塊", "梅花"};

srand( time( NULL ) ); /* randomize *///time(NULL) is a integer changing with time.

fillDeck( deck, face, suit ); /* load the deck with Cards */

shuffle( deck ); /* put Cards in random order */

play( deck, 21 ); /* play */

return 0; /* indicates successful termination */

} /* end main */

/* place strings into Card structures */

void fillDeck( Card * const wDeck, const char * wFace[], const char * wSuit[] ){

int i; /* counter */

/* loop through wDeck */

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

wDeck[ i ].face = wFace[ i % 13 ];

wDeck[ i ].suit = wSuit[ i / 13 ];

} /* end for */

} /* end function fillDeck */

void shuffle( Card * const wDeck ){

int i; /* counter */

int j; /* variable to hold random value between 0 - 51 */

Card temp; /* define temporary structure for swapping Cards */

/* loop through wDeck randomly swapping Cards */

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

j = rand() % 52;

temp = wDeck[ i ];

wDeck[ i ] = wDeck[ j ];

wDeck[ j ] = temp;

} /* end for */

} /* end function shuffle */

2007-07-09 19:49:59 補充：

void play( Card * const wDeck,int boilingPoint){ //boiling point-沸點,explosion-爆炸

while(explosion==0&&cnt<NUMBER_OF_POKER&&(aWantToContinue==1||bWantToContinue==1)){//52可能有bug,正確來說,是一開始定義的數量才對

2007-07-09 19:51:35 補充：

if(cnt%2==0&&aWantToContinue==1){//換A抽牌(先讓A抽牌,這可能是設定上的缺點,缺少了點公平性)

scanf("%d",&aWantToContinue);

if(aWantToContinue==1){//a要繼續

printf("您(A)抽到%s\n",wDeck[cnt].face);

2007-07-09 19:52:12 補充：

printf("A輸了,B贏了\n");

explosion=1;

}

}

}else if(cnt%2==1&&bWantToContinue==1){//換B抽牌

scanf("%d",&bWantToContinue);

if(bWantToContinue==1){//b要繼續

printf("您(B)抽到%s\n",wDeck[cnt].face);

2007-07-09 19:53:21 補充：

printf("B輸了,A贏了\n");

explosion=1;

}

}

}

printf("\n");

cnt++;

}

//假設沒有爆炸,可能的情況如下.....

2007-07-09 19:53:59 補充：

printf("A輸了,B贏了\n");

printf("B輸了,A贏了\n");

}

int getGrade(Card * const wDeck,int x){//把牌上的號碼轉換成點數,假設抽到A,會提醒說要把A當作1還是11

if(wDeck[x].face=="1"){

2007-07-09 19:54:20 補充：

printf("A想變成1還是變成11呢?想變成1請輸入1,想變成11請輸入1以外的整數.\n");

scanf("%d",&userInput);

if(userInput==1)

else

}

2007-07-09 19:54:31 補充：

}

• 登入以對解答發表意見
• 匿名使用者
6 年前

＊ ***** http://*****

[電子遊戲]

拉霸、水果盤、7PK、5PK

[運彩遊戲]

棒球、籃球、足球、網球、冰球、各種體育經典賽事

[真人遊戲]

百家樂、21點、骰寶、輪盤、牌九、三公、輪盤、翻攤、牛牛、二八杠

[對戰遊戲]

台灣麻將、德州撲克、骰盅吹牛、四支刀、鬥地主、十三支、二八槓、暗棋、接龍

[彩球遊戲]

香港六合、台灣樂透、今彩539、樂合彩、大陸時時彩、基諾彩、北京賽車、賽狗、賽馬、指數

[優惠活動]

1. 新舊會員儲值就送500點

2. 真人百家樂彩金等你拿

***** http://*****

歡迎免費體驗試玩!!

線上影片直播、正妹圖、討論區免費註冊 ~

• 登入以對解答發表意見
• 6 年前

推薦您前往黃金俱樂部遊戲網！

提供您詳盡的說明

您可以先進行遊戲下載：

誠心服務！會員溫馨！永久服務！

第一：全程直播遊戲的公平與公正性【亞洲唯一直屬會員代理】

第二：點數儲值和託售皆在十分鐘之內完成【全台娛樂城速度最快24小時不分周末】

第三：二十四小時專業客服務線上服務全年無休【大大小小問題都可以馬上做詳細解答喔】

電子機台．真人遊戲和你一同玩樂

麻將 百家樂 5PK 德州撲克 水果盤 賓果

輪盤 21點 10點半 骰盅 牌九 鬥地主 13支

全年網站優惠活動不間斷！

快去註冊會員！免費：http://99點5888th點net

• 登入以對解答發表意見
• 匿名使用者
6 年前

7年保證公信力

線上百家樂娛樂城 ＧＯ．ＴＳＡ９９．ＮＥＴ

快加入會員 高返水! 贈點 12%

運動遊戲

實況棒球、籃球、足球、冰球、網球等多種經典賽事

即時遊戲

百家、21點、牌九、二八杠、骰寶、龍虎、輪盤、牛牛、番攤

對戰遊戲

麻將、德州撲克、二八杠、吹牛、鬥地主、13支、暗棋、接龍

電子遊戲

5PK、7PK、水果盤遊戲、5輪遊戲、極限飆速、趙雲救主、西遊戲、金瓶梅、中國美人、英雄

保證公信力 mobile01 PPT論壇網友推薦

線上百家樂娛樂城 ＧＯ．ＴＳＡ９９．ＮＥＴ

快加入會員 高返水! 贈點 12%

• 登入以對解答發表意見
• 您覺得這個回答如何？您可以登入為回答投票。
• 匿名使用者
7 年前

台灣首家合法娛樂城開幕囉!

體育博彩、真人對戰、現場遊戲、彩球

投注高賠率，歡迎您來體驗!

官方網站 aa777.net

• 登入以對解答發表意見