關於部落格
我的信仰不是理論, 而是一種實踐
  • 122308

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

[C語言]隨機發撲克牌,並依點數及花色做簡單的排序

雖然晚上九點就要考電子了
可是我真的沒動力唸書XDD
就po一下之前學弟問我的程式作業吧
不然『程式語言』這個分類根本沒更新過XD


這個程式的目的是:
        模擬真實情況下,將一副撲克牌隨機發13張牌,同一張牌不能出現兩次。
        然後簡單的排序一下。

不過做得不是很完善
可以改進的方向:
1.亂數發牌還不夠亂,還缺了兩三行程式碼。
2.『顯示目前發牌結果』的程式碼可以改寫成函式,可以讓程式碼比較簡潔一點。
3.排序時『兩張牌互換』應該也可以用函式表示。
4.其實『顯示發牌結果』時,不一定要用圖形啦...XD


#include<stdio.h>
#include<stdlib.h>

int main()
{
        int card[13][4];        //儲存牌是否被發過了,
    //第一維是點數,第二維是花色,
    //1代表發過了,0代表還沒發過

        int player[13][2];      //儲存拿到的牌

        int i, j;               //用來跑回圈
        int n;                  //牌的點數
        int c;                  //牌的花色
        int color;              //花色的圖案
        int temp;  //做排序時的暫存變數


        for(c=0;c<4;c++)        //先把所有牌設定成還沒被發過
                for(n=0;n<13;n++)
                        card[n][c]=0;

        for(i=0;i<13;i++)       //開始發牌
        {
                do{
                        n=rand()%13+1;
                        c=rand()%4;
        }while(card[n-1][c]);
        player[i][0]=n;
        player[i][1]=c;
        card[n-1][c]=1;
        }

        //顯示一次目前的發牌結果
        printf("玩家的牌為n");
        for(i=0;i<13;i++)
        {
                n=player[i][0];
                c=player[i][1];

                switch(c)
                {
                        case 0:    //梅花
                        color=5;
                        break;

                        case 1:    //方塊
                        color=4;
                        break;

                        case 2:    //紅心
                        color=3;
                        break;

                        case 3:    //黑桃
                        color=6;
                        break;

                        default:
                        color='x';
                        break;
                }
                printf("第%d張%ct%dn",i,color,n);
        }

        //對牌的點數做由小到大的排序
        for(i=0; i<12; i++)
        {
                for(j=i+1; j<13; j++)
                {
                        if(player[i][0]>player[j][0])
                        {
                                temp = player[i][0];
                                player[i][0]=player[j][0];
                                player[j][0]=temp;
                                temp = player[i][1];
                                player[i][1]=player[j][1];
                                player[j][1]=temp;
                        }
                }
        }

        //顯示一次目前的發牌結果
        printf("對數字排序後玩家的牌為n");
        for(i=0;i<13;i++)
        {
                n=player[i][0];
                c=player[i][1];

                switch(c)
                {
                        case 0:    //梅花
                        color=5;
                        break;

                        case 1:    //方塊
                        color=4;
                        break;

                        case 2:    //紅心
                        color=3;
                        break;

                        case 3:    //黑桃
                        color=6;
                        break;

                        default:
                        color='x';
                        break;
                };

                printf("第%d張%ct%dn",i,color,n);
        }

        //在數字相同時, 對花色做一次由小到大的排序
        for (i=0; i<12; i++)
        {
                if(player[i][0]==player[i+1][0])  //數字相同
                {
                        if(player[i][1]>player[i+1][1]) // 第i個的花色比第i+1個大
                        {
                                temp = player[i][0];
                                player[i][0]=player[i+1][0];
                                player[i+1][0]=temp;
                                temp = player[i][1];
                                player[i][1]=player[i+1][1];
                                player[i+1][1]=temp;
                        }
                }
        }

        //顯示一次目前的發牌結果
        printf("對花色排序後玩家的牌為n");
        for(i=0;i<13;i++)
        {
                n=player[i][0];
                c=player[i][1];

                switch(c)
                {
                        case 0:    //梅花
                        color=5;
                        break;

                        case 1:    //方塊
                        color=4;
                        break;

                        case 2:    //紅心
                        color=3;
                        break;

                        case 3:    //黑桃
                        color=6;
                        break;

                        default:
                        color='x';
                        break;
                };

                printf("第%d張%ct%dn",i,color,n);
        }

        system("PAUSE");
}
 



好啦!
今天po過文章了
可以專心的唸書了吧XD
相簿設定
標籤設定
相簿狀態