投骰子的隨機游戲


投骰子的隨機游戲

每個骰子有六面,點數分別為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 namespace std;
 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 }


免責聲明!

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



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