//By cananpeng
//枚举,随机数模型,函数功能分解,自定义函数。
#include <iostream>
#include <cstdlib>
using namespace std;
enum GAMESTATUS{ win,lose,playing};//类型 还要有对应的变量
int main(){
int sum,point;
GAMESTATUS status;
unsigned int seed;
int rolldice();
cout<<"plz enter an unsigned integer as seed : ";
cin>>seed;//输入随机数种子,一会要通过srand送进rand函数中。输入随机数相同时,rand得到的结果是一样的。
srand(seed);
sum=rolldice();
//第一轮
switch(sum){
case 7:
case 11:status=win;break;
case 2:
case 3:
case 12:status=lose;break;
default:
status=playing;
point=sum;
cout<<"point is "<<point<<endl;break;//default也会找break的标识符跳出选择。
}
//第二轮到结束,判别;第二轮的和等于第一轮的点数,因此要注意语句顺序。题中简化了难度,点数随着轮数增加不变,若点数发生了变化呢?也很简单,增加一条点数的赋值语句即可
while(status==playing){
sum=rolldice();//例如,计算第二轮的和
if(sum==point) status=win;
else if (sum==7) status=lose;
}//注意观察此处的逻辑,用的是else if ,而不是else(非你即我),用的是多分支。
if(status==win)
cout<<"player wins"<<endl;
if(status==lose)
cout<<"player loses"<<endl;
return 0;
}
int rolldice(){
//设计非常巧妙。因为随机的数字可以产生不受限,但是骰子的结果只有1-6,因此选择了除6取余(0-5)加1;
//不选择除7取余,0-6。多了一个0的情况。
int die1=1+rand()%6;
int die2=1+rand()%6;
int sum=die1+die2;
cout<<"player rolled"<<die1<<"+"<<die2<<"="<<sum<<endl;
return sum;
}