W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在第13.6節(jié)我們編寫了一個洗牌算法的偽代碼。假設(shè)shuffleDeck函數(shù)實現(xiàn)洗牌功能,其參數(shù)為一個牌堆,我們就可以這樣創(chuàng)建牌堆并洗牌:
Deck deck; // 創(chuàng)建一個標(biāo)準(zhǔn)的52張牌的牌堆
deck.shuffle (); // 洗牌
然后,使用subdeck函數(shù)來分幾手牌:
Deck hand1 = deck.subdeck (0, 4);
Deck hand2 = deck.subdeck (5, 9);
Deck pack = deck.subdeck (10, 51);
這段代碼將前5張紙牌分到一個牌堆中,接下來的5張分到一個牌堆中,剩下的作為一個牌堆。
在考慮發(fā)牌的時候,你是不是認為我們應(yīng)該像實際游戲中常用的那樣輪流著每次給每個玩家發(fā)一張牌?我也這樣想過,但我意識到,對計算機程序而言這是不必要的。輪流發(fā)牌有兩個目的,一是為了降低洗牌缺陷帶來的問題,再就是使發(fā)牌者更難作弊。而這些對計算機而言都不是問題。
這個例子是個有益的提醒,那就是要小心工程隱喻的一點危險之處:有時我們給計算機施加了不必要的限制,或者期望計算機缺乏的功能,就是因為我們輕率地將隱喻擴展到了崩潰的邊緣。一定要小心誤導(dǎo)性的類比。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: