<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在最流行的博彩遊戲中有一種名為“擲雙骰”(craps)的骰子游戲,這種遊戲在世界各地的娛樂場所和大街小巷非常受歡迎。遊戲的規則很簡單:
玩家擲兩個骰子。每個骰子有六面,分別含有1、2、3、4、5和6個點。擲完骰子後,計算兩個朝上的面的點數之和。
1、如果首次投擲的點數總和是7或者11,那麼玩家贏;
2、如果首次投擲的點數只和事2、3或者12(稱為"craps"),那麼玩家輸(即莊家贏);
3、如果首次投擲的點數只和事4、5、6、7、8、9或者10,那麼這個和就成為玩家的“目標點數”。要想贏的話,玩家必須連續的擲骰子直到點數與這個目標點數相同為止,即“得到了點數”。但在得到點數前,如果擲到的是7,就會輸掉。
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; unsigned int rollDice(); int main() { enum Status {CONTINUE, WON, LOST}; //這個就是自定義一個變數型別,就類似於int,double這種,即這裡的說白了就是設定一個列舉類變數類 //而這個類的關鍵字就是Status,以這個型別定義的變數只能取列舉內的幾個值,而這幾個值又對應了數位。 srand(static_cast<unsigned int>(time(0))); unsigned int myPoint = 0; Status gameStatus = CONTINUE; unsigned int sumOfDice = rollDice(); switch (sumOfDice) { case 7: case 11: gameStatus = WON; break; case 2: case 3: case 12: gameStatus = LOST; break; default: gameStatus = CONTINUE; myPoint = sumOfDice; cout << "Point is " << myPoint << endl; break; }; while (gameStatus == CONTINUE){ sumOfDice = rollDice(); if (sumOfDice == myPoint) gameStatus = WON; else if (sumOfDice == 7) gameStatus = LOST; } if (gameStatus == WON) cout << "Player wins" << endl; else cout << "Player lose" << endl; } unsigned int rollDice(){ unsigned int die1 = 1 + rand() % 6; unsigned int die2 = 1 + rand() % 6; unsigned int sum = die1 + die2; cout << "Player rolled: " << die1 << " + " << die2 << " = " << sum << endl; return sum; }
這個是我拿來當作筆記的,主要是為了記住這麼個問題,當我要想回圈的實現博彩遊戲並且統計輸贏的時候,會自然而然的想到在外部套一個for迴圈去執行,但是這樣就會涉及到一個問題,即亂數的生成,按照我最開始的理解是隨著迴圈的進行,給srand提供的seed不同(也就是實參time(0))就會在每次迴圈都產生不同的隨機序列。即程式碼如下
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; unsigned int rollDice(); int main() { int winNum = 0; int loseNum = 0; enum Status {CONTINUE, WON, LOST}; //這個就是自定義一個變數型別,就類似於int,double這種,即這裡的說白了就是設定一個列舉類變數類 //而這個類的關鍵字就是Status,以這個型別定義的變數只能取列舉內的幾個值,而這幾個值又對應了數位。 for (int i = 0; i < 100000; ++i) { srand(static_cast<unsigned int>(time(0))); unsigned int myPoint = 0; Status gameStatus = CONTINUE; unsigned int sumOfDice = rollDice(); switch (sumOfDice) { case 7: case 11: gameStatus = WON; break; case 2: case 3: case 12: gameStatus = LOST; break; default: gameStatus = CONTINUE; myPoint = sumOfDice; // cout << "Point is " << myPoint << endl; break; }; while (gameStatus == CONTINUE) { sumOfDice = rollDice(); if (sumOfDice == myPoint) gameStatus = WON; else if (sumOfDice == 7) gameStatus = LOST; } if (gameStatus == WON) { // cout << "Player wins" << endl; winNum++; } else { // cout << "Player lose" << endl; loseNum++; } } cout << "WIN: " << winNum << endl; cout << "LOSE: " << loseNum << endl; } unsigned int rollDice(){ unsigned int die1 = 1 + rand() % 6; unsigned int die2 = 1 + rand() % 6; unsigned int sum = die1 + die2; // cout << "Player rolled: " << die1 << " + " << die2 // << " = " << sum << endl; return sum; }
然而統計執行結果是:
WIN: 0
LOSE: 100000
也就是說一旦第一次是輸了,那麼就一直都是輸的,為什麼?
原因在於程式執行太快,而time(0)提供的時間戳是以秒為單位提供的,而程式1s內就執行完了,自然就提供的seed是一樣的,那麼rand的序列也是一樣,所以就一直是贏或者輸,那麼我要是非要它不一直贏或者輸了?可以這樣,將回圈次數設定得更大,讓程式1s內執行不完,不就可以提供不同的時間戳了?而事實是這樣也是可行的,如圖,是我設定1000w次迴圈的統計結果。
WIN: 8703168
LOSE: 1296832
當然,治標不治本,這還是沒有達到每次迴圈都是無預測性的亂數,目前還要學習其他東西,等我有時間了再來思考這個問題~
以上就是基於C++實現擲雙骰遊戲的範例程式碼的詳細內容,更多關於C++擲雙骰遊戲的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45