C++ 洗牌與發(fā)牌

2023-03-20 16:24 更新

在第13.6節(jié)我們編寫了一個(gè)洗牌算法的偽代碼。假設(shè)shuffleDeck函數(shù)實(shí)現(xiàn)洗牌功能,其參數(shù)為一個(gè)牌堆,我們就可以這樣創(chuàng)建牌堆并洗牌:

Deck deck;       // 創(chuàng)建一個(gè)標(biāo)準(zhǔn)的52張牌的牌堆
deck.shuffle (); // 洗牌

然后,使用subdeck函數(shù)來(lái)分幾手牌:

Deck hand1 = deck.subdeck (0, 4);
Deck hand2 = deck.subdeck (5, 9);
Deck pack = deck.subdeck (10, 51);

這段代碼將前5張紙牌分到一個(gè)牌堆中,接下來(lái)的5張分到一個(gè)牌堆中,剩下的作為一個(gè)牌堆。

在考慮發(fā)牌的時(shí)候,你是不是認(rèn)為我們應(yīng)該像實(shí)際游戲中常用的那樣輪流著每次給每個(gè)玩家發(fā)一張牌?我也這樣想過(guò),但我意識(shí)到,對(duì)計(jì)算機(jī)程序而言這是不必要的。輪流發(fā)牌有兩個(gè)目的,一是為了降低洗牌缺陷帶來(lái)的問(wèn)題,再就是使發(fā)牌者更難作弊。而這些對(duì)計(jì)算機(jī)而言都不是問(wèn)題。

這個(gè)例子是個(gè)有益的提醒,那就是要小心工程隱喻的一點(diǎn)危險(xiǎn)之處:有時(shí)我們給計(jì)算機(jī)施加了不必要的限制,或者期望計(jì)算機(jī)缺乏的功能,就是因?yàn)槲覀冚p率地將隱喻擴(kuò)展到了崩潰的邊緣。一定要小心誤導(dǎo)性的類比。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)