promotion image of download ymail app
Promoted

用C語言寫出21點遊戲

請幫我用C語言寫出21點遊戲要會給牌,A可以當1or11點,JQK都當10點,超過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-爆炸

    int cnt=0,explosion=0,aWantToContinue=1,bWantToContinue=1,aGrade=0,bGrade=0;

    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抽牌,這可能是設定上的缺點,缺少了點公平性)

    printf("A目前的點數:%d\n請問是否要抽牌呢?要的話請輸入1,部要的話請輸入0.\n",aGrade);

    scanf("%d",&aWantToContinue);

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

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

    aGrade=aGrade+getGrade(wDeck,cnt);

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

    if(aGrade>boilingPoint){//大於42點的話,就爆炸嚕,A出局

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

    explosion=1;

    }

    }

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

    printf("B目前的點數:%d\n請問是否要抽牌呢?要的話請輸入1,部要的話請輸入0.\n",bGrade);

    scanf("%d",&bWantToContinue);

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

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

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

    bGrade=bGrade+getGrade(wDeck,cnt);

    if(bGrade>boilingPoint){//大於42點的話,就爆炸嚕,B出局

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

    explosion=1;

    }

    }

    }

    printf("\n");

    cnt++;

    }

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

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

    if(explosion==0&&aGrade<bGrade)

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

    else if(explosion==0&&aGrade>bGrade)

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

    if(explosion==0&&aGrade==bGrade) printf("和局\n");//都沒有人爆掉&&點數都相同,那就是和局嚕

    }

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

    int grade=0,userInput=1;

    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)

    grade=1;

    else

    grade=11;

    }

    if(wDeck[x].face=="2") grade=2;

    if(wDeck[x].face=="3") grade=3;

    if(wDeck[x].face=="4") grade=4;

    if(wDeck[x].face=="5") grade=5;

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

    if(wDeck[x].face=="6") grade=6;

    if(wDeck[x].face=="7") grade=7;

    if(wDeck[x].face=="8") grade=8;

    if(wDeck[x].face=="9") grade=9;

    if(wDeck[x].face=="10") grade=10;

    if(wDeck[x].face=="J") grade=10;

    if(wDeck[x].face=="Q") grade=10;

    if(wDeck[x].face=="K") grade=10;

    return grade;

    }

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

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

    [電子遊戲]

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

    [運彩遊戲]

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

    [真人遊戲]

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

    [對戰遊戲]

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

    [彩球遊戲]

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

    [優惠活動]

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

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

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

    歡迎免費體驗試玩!!

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

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

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

    提供您詳盡的說明

    您可以先進行遊戲下載:

    網址:http://99點5888th點net

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

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

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

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

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

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

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

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

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

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

    7年保證公信力

    線上百家樂娛樂城 GO.TSA99.NET

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

    運動遊戲

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

    即時遊戲

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

    對戰遊戲

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

    電子遊戲

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

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

    線上百家樂娛樂城 GO.TSA99.NET

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

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

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

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

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

    官方網站 aa777.net

    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。