C++撲克牌發牌游戲程序(包括C++隨機數的解釋)


C++產生隨機數

 1.C++中沒有自帶的random函數,要實現隨機數的生成就需要使用rand()srand()

 2.函數rand()是真正的隨機數生成器,而srand()會設置供rand()使用的隨機數種子。如果你在第一次調用rand()之前沒有調用srand(),那么系統會為你自動調用srand()。而使用同種子相同的數調用 srand()會導致相同的隨機數序列被生成。
srand((unsigned)time(NULL))則使用系統定時/計數器的值做為隨機種子。每個種子對應一組根據算法預先生成的隨機數,所以,在相同的平台環境下,不同時間產生的隨機數會是不同的,相應的,若將srandunsignedtime(NULL)改為srand(TP)TP為任一常量),則無論何時運行、運行多少次得到的隨機數都會是一組固定的序列,因此srand生成的隨機數是偽隨機數。

 3.rand函數產生一個0RAND_MAX的偽隨機數,這里的RAND_MAX因不同的實現而異,但RAND_MAX至少為32767有些時候,用戶需要獲取一定更小范圍中的一隨機數,如得到一組100以內的隨機數,就可以采用rand()%100這種方法,使得結果在100以內。
%是模運算,表示整除 右操作數 取余數
如果想得到【1100】之間的隨機數,則需要對上面的加法進行加工,寫成:(rand()%100+1; //先得到0-99的隨機數,然后加1,可得1-100區間內的數。
rand()%m這個函數是隨機產生0m-1的隨機數;比如rand()%10就是隨機產生09的隨機數。

 【實例】撲克牌發牌游戲程序。設計一個程序來給四個玩家發牌(不含大小王),要求每次發出的牌都不一樣。

分析:52張牌采用1~52代表,其中黑桃對應1~13,紅桃對應14~26,梅花對應27~39,方塊對應40~52例如:28是梅花2,29是梅花3。將52張牌(號) 依次隨機放入數組Deck中。方法是隨機產生在數組中放置的位置r(下標號),如果該位置已有牌(Deck(r\\=0)、則重新生成新的位置r,直到該位置無牌。

#include<iostream>

#include<cstdlib>

#include<ctime>using namespace std;int main() {

    int i, card, r, Deck[52];

    int tag = 0;

    char pock_c[4][5] = { "黑桃","紅桃","梅花","方塊" };

    char pock_n[13][3] = { "A","2","3","4","5","6","7","8","9","10" ,"J","Q","K" };

    srand((unsigned)time(0));

    for (i = 0; i < 52; i++)

    {
        Deck[i] = 0;
    }

    for (card = 1; card <= 52; card++)
    {
        r = rand ()% 52;

        while (Deck[r] != 0)//該位置Deck[r]已有牌,則重新產生位置r        {

            r = rand() % 52;

} Deck[r] = card;//牌card存入數組Deck } cout << "玩家\t玩家2\t玩家3\t玩家4\n"; cout << "--------------------------------------------\n"; for (i = 0; i < 52; i++) { cout << pock_c[(Deck[i] - 1) / 13] << pock_n[(Deck[i] - 1) % 13] << '\t'; if (i % 4 == 3) cout << endl;//使產生的隨機數按4列排列 } system("pause"); return 0; }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM