C++實(shí)現(xiàn)投骰子的隨機(jī)游戲
本文實(shí)例為大家分享了C++實(shí)現(xiàn)投骰子的隨機(jī)游戲的具體代碼,供大家參考,具體內(nèi)容如下
每個(gè)骰子有六面,點(diǎn)數(shù)分別為1、2、3、4、5、6。游戲者在程序開(kāi)始時(shí)輸入一個(gè)無(wú)符號(hào)整數(shù),作為產(chǎn)生隨機(jī)數(shù)的種子。
每輪投兩次骰子,第一輪如果和數(shù)為7或11則為勝,游戲結(jié)束;和數(shù)為2、3或12則為負(fù),游戲結(jié)束;和數(shù)為其它值則將此值作為自己的點(diǎn)數(shù),繼續(xù)第二輪、第三輪…直到某輪的和數(shù)等于點(diǎn)數(shù)則取勝,若在此前出現(xiàn)和數(shù)為7則為負(fù)。
rand函數(shù)
函數(shù)原型:int rand(void);
所需頭文件:
功能和返回值:求出并返回一個(gè)偽隨機(jī)數(shù)
srand函數(shù)
void srand(unsigned int seed);
參數(shù):seed產(chǎn)生隨機(jī)數(shù)的種子
所需頭文件:
功能:為使rand()產(chǎn)生一序列偽隨機(jī)整數(shù)而設(shè)置起始點(diǎn)。使用1作為seed參數(shù),可以重新初化rand()。
#include <iostream> #include <cstdlib> using namespace std; enum GameStatus { WIN,LOSE,PLAYING }; ?int main() { ? ?int sum, myPoint; ? ?GameStatus status; ? ?unsigned seed; ? ?int rollDice(); ? ?cout<<"Please enter an unsigned integer:"; ? ?cin >> seed; //輸入隨機(jī)數(shù)種子 ? ?srand(seed); //將這個(gè)種子傳遞給rand() ? ?sum = rollDice(); //第一輪投骰子、計(jì)算和數(shù) ? ? switch (sum) { ? ? case 7: ?//如果和數(shù)為7或11則為勝,狀態(tài)為WIN ? ? case 11: ? ? ? status = WIN; ? ? ? break; ? ? ?case 2: ?//和數(shù)為2、3或12則為負(fù),狀態(tài)為L(zhǎng)OSE ? ? ?case 3: ? ? ?case 12: ? ? ? ? status = LOSE; ? ? ? ? break; ? ? ? default; ?//其他情況,尚無(wú)結(jié)果,狀態(tài)為PLAYING,記下點(diǎn)數(shù) ? ? ? ? status = PLAYING; ? ? ? ? myPoint = sum; ? ? ? ? cout << "point is " << myPoint <<endl; ? ? ? ? break; ? ? ? } ? ? ? while (status == PLAYING) { ?//只要狀態(tài)為PLAYING,繼續(xù) ? ? ? ? sum = rollDice(); ? ? ? ? if (sum == myPoint) ?//某輪的和數(shù)等于點(diǎn)數(shù)則取勝 ? ? ? ? ? status = WIN; ? ? ? ? else if(sum == 7) ?//出現(xiàn)和數(shù)為7則為負(fù) ? ? ? ? ? status = LOSE ? ? ? ? } ? ? ? ? //當(dāng)狀態(tài)不為PLAYING時(shí)循環(huán)結(jié)束,輸出游戲結(jié)果 ? ? ? ? if (status == WIN) ? ? ? ? ? cout ?<< "player wins" << endl; ? ? ? ? else ? ? ? ? ? cout << "player loses" << endl; ? ? ? ? ?return 0; ? ? ? ?} ? ?? ? ? ? ?//投骰子、計(jì)算和數(shù)、輸出和數(shù) ? ? ? ?int rollDice() { ? ? ? ? ?int die1 = 1 + rand() % 6; ?//讓一個(gè)在整個(gè)整數(shù)范圍內(nèi)的數(shù),取1至6之間。除以6取余數(shù),這個(gè)數(shù)則會(huì)在0到5之間,再加上1,這個(gè)數(shù)就移動(dòng)到1至6之間了。 ? ? ? ? ?int die2 = 1 + rand() % 6; ? ? ? ? ?int sum = die1 + die2; ? ? ? ? ?cout << "player rolled" << die1 << " + " << ? ? ? ? ?die2 << " = " << sum << endl; ? ? ? ? ?return sum; }
之前小編收藏了一段投骰子的相關(guān)代碼,分享給大家,也感謝原作者
#include<stdio.h> #include<stdlib.h> #include<time.h> ? ? int main() { ?? ?int winCount, lostCount;? ?? ?int first, second; ?? ?int target; ?? ?char input; ? ?? ?winCount=lostCount=0; ? ?? ?srand(time(0)); ?? ?first=rand()%6+1; ?? ?second=rand()%6+1; ? ?? ?printf("%d %d\n",first,second); ? ? ?? ?target=first+second; ? ?? ?if(target==7 || target==11) ?? ?{ ?? ??? ?printf("you win\n"); ?? ??? ?winCount++; ?? ?} ?? ?else ?? ?{ ?? ??? ?if(target==2 || target==3 || target==12) ?? ??? ?{ ?? ??? ??? ?printf("you lost\n"); ?? ??? ??? ?lostCount++; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?printf("proceed or not?"); ?? ??? ??? ?input=getchar(); ? ?? ??? ??? ?while(input=='Y' || input=='y') ?? ??? ??? ?{ ?? ??? ??? ??? ?first=rand()%6+1; ?? ??? ??? ??? ?second=rand()%6+1; ? ?? ??? ??? ??? ?printf("%d %d\n",first,second); ?? ? ?? ??? ??? ??? ?if(target==first+second){ ?? ??? ??? ??? ??? ?printf("you win\n"); ?? ??? ??? ??? ??? ?winCount++; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else ?? ??? ??? ??? ??? ?if (first+second==7){ ?? ??? ??? ??? ??? ??? ?printf("you lost\n"); ?? ??? ??? ??? ??? ??? ?lostCount++; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ? ?? ??? ??? ??? ?printf("proceed or not?"); ?? ??? ??? ??? ?getchar(); ?? ??? ??? ??? ?input=getchar(); ?? ??? ??? ?} ?? ??? ?} ?? ?} ? ?? ?printf("win=%d, lost=%d\n",winCount, lostCount); ?? ?return 0; ? }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言進(jìn)階輸入輸出重定向與fopen函數(shù)使用示例詳解
這篇文章主要為大家介紹了C語(yǔ)言進(jìn)階輸入輸出重定向與fopen函數(shù)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02Qt串口通信開(kāi)發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法
這篇文章主要介紹了Qt串口通信開(kāi)發(fā)之QSerialPort模塊Qt串口通信接收數(shù)據(jù)不完整的解決方法,需要的朋友可以參考下2020-03-03C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列隊(duì)列篇
本章我們將學(xué)習(xí) "隊(duì)列" ,首先介紹隊(duì)列的概念和結(jié)構(gòu),然后我們將著重講解棧的實(shí)現(xiàn)。我們從零開(kāi)始寫(xiě)隊(duì)列的接口,并從零開(kāi)始步步解讀。本章將繼續(xù)鞏固畫(huà)思路草圖的能力,只要思路草圖畫(huà)好了,就可以很輕松地將其轉(zhuǎn)換成代碼2022-02-02C語(yǔ)言實(shí)現(xiàn)獲取內(nèi)存信息并輸出的實(shí)例
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)獲取內(nèi)存信息并輸出的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03使用C語(yǔ)言來(lái)解決循環(huán)隊(duì)列問(wèn)題的方法
這篇文章主要介紹了使用C語(yǔ)言來(lái)解決循環(huán)隊(duì)列問(wèn)題的方法,來(lái)自ACM的練習(xí)題實(shí)例,需要的朋友可以參考下2015-08-08使用?Visual?Studio?2022?開(kāi)發(fā)?Linux?C++?應(yīng)用程序的過(guò)程詳解
Visual?Studio?2022?引入了用于?Linux?C++?開(kāi)發(fā)的本機(jī)?WSL2?工具集,可以構(gòu)建和調(diào)試?Linux?C++?代碼,并提供了非常好的?Linux?文件系統(tǒng)性能、GUI?支持和完整的系統(tǒng)調(diào)用兼容性,這篇文章主要介紹了使用Visual?Studio?2022?開(kāi)發(fā)?Linux?C++?應(yīng)用程序,需要的朋友可以參考下2021-11-11C語(yǔ)言編程實(shí)例之輸出指定圖形問(wèn)題
這篇文章主要介紹了C語(yǔ)言編程實(shí)例之輸出指定圖形問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)開(kāi)發(fā)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08