投骰子的隨機遊戲
阿新 • • 發佈:2018-05-22
自帶 and 需要 AC rand() efault style ... pac
投骰子的隨機遊戲
每個骰子有六面,點數分別為1、2、3、4、5、6。遊戲者在程序開始時輸入一個無符號整數,作為產生隨機數的種子。
每輪投兩次骰子,第一輪如果和數為7或11則為勝,遊戲結束;和數為2、3或12則為負,遊戲結束;和數為其它值則將此值作為自己的點數,繼續第二輪、第三輪...直到某輪的和數等於點數則取勝,若在此前出現和數為7則為負。
投骰子需要一個能模擬產生隨機數的函數,#include <cstdlib> 中的 int rand(void) 函數是C++庫中自帶的產生並返回一個偽隨機數的函數。
所謂偽隨機數,即是指每當程序重新運行時產生的隨機數和上次程序運行時產生的隨機數相同,
比如在第一次程序運行時產生隨機數:1,8,6,4,9,3,2,在本次運行內的確為一組隨機數,但當關閉程序重新運行時,產生的隨機數仍為1,8,6,4,9,3,2,
#include <cstdlib> 中的 void srand(unsigned int seed) 函數則可以解決這一問題,通過輸入不同的參數 seed ,則可以為rand() 每次產生隨機數設置一個起始點,
使得每次產生的隨機數不同
C++代碼如下:
1 #include<iostream> 2 #include<cstdlib> 3 using namespacestd; 4 5 enum GameStatus {WIN,LOSE,PLAYING}; //枚舉遊戲狀態 6 7 int rollDice() { 8 int dice1, dice2,sum; 9 dice1 = 1 + rand() % 6; //將產生的隨機數轉成範圍1-6的骰子的點數 10 dice2 = 1 + rand() % 6; 11 sum = dice1 + dice2; 12 return sum; 13 } 14 15 int main() { 16 unsigned seed; 17 GameStatus status;18 int sum,MyPoint; 19 cin >> seed; 20 srand(seed); 21 sum = rollDice(); 22 switch (sum) 23 { 24 case 7: 25 case 11:status = WIN; 26 break; 27 case 2: 28 case 3: 29 case 12:status = LOSE; 30 break; 31 default:status = PLAYING; MyPoint = sum; 32 break; 33 } 34 while (status==PLAYING) 35 { 36 sum = rollDice(); 37 if (sum == MyPoint) 38 status = WIN; 39 else if (sum == 7) 40 status = LOSE; 41 } 42 if (status == WIN) 43 cout << "player win"; 44 else //此時只有輸和贏兩種狀態 45 cout << "player lose"; 46 return 0; 47 }
投骰子的隨機遊戲