投骰子游戏,还有未解决问题,寻帮助!
#include<iostream>#include<cstdlib>
using namespace std;
int rollDice()
{
int read1=1+rand()%6;
int read2=1+rand()%6;
int sum=read1+read2;
cout<<"poayer rolled "<<read1<<"+"<<read2<<"="<<sum<<endl;
return sum;
}
enum Zhuangtai{WIN,LOSE,PLAYING};
int main()
{
int mypoint;
Zhuangtai status;
unsigned seed;
cout<<"请输入随机数种子:";
cin>>seed;
srand(seed);[color=#CC3366][color=#FFFF00]//将种子传递给rand()[/color][/color]
int sum=rollDice();[color=#FFFF00]//第一轮投骰子,计算和数[/color]
switch(sum)
{
case 7: [color=#FFFF00] //如果和为7或11则为胜,状态为WIN[/color]
case 11:
status=WIN;
break;
case 2: [color=#FFFF00]//和数为2,3,12则为负,状态为LOSE[/color]
case 3:
case 12:
status=LOSE;
break;
default: [color=#FFFF00] //其他情况,游戏尚无结果,状态为PLAYING,记下点数,为下一轮做准备[/color]
status=PLAYING;
mypoint=sum;
cout<<"point is "<<mypoint<<endl;
break;
}
while(status==PLAYING) [color=#FFFF00]//只要状态为PLAYING,就继续下一轮[/color]
{
/*mypoint=sum;
srand(mypoint);*/
sum=rollDice();
if(sum=mypoint) [color=#FFFF00]//某轮的和数等于点数则取胜,状态为WIN[/color]
status=WIN;
else if(sum==7) [color=#FFFF00]//如果和数为7则为负,状态为LOSE[/color]
status=LOSE;
/* else
status=PLAYING;*/
}
[color=#FFFF00]//当状态不为PLAYING时上面的循环结束,以下程序段输出游戏结束[/color]
if(status==WIN)
cout<<"胜"<<endl;
else
cout<<"负"<<endl;
return 0;
}
此程序是用VC++ 6.0编译,下面是运行结果:
请输入随机数种子:8 换成23
poayer rolled 5+1=6 变成 6+3=9
point is 6 变成 9
poayer rolled 6+6=12 变成 5+4=9
胜 还是胜
但是如果加入/*....*/中的一段,运行结果为:
请输入随机数种子:8 换成23
poayer rolled 5+1=6 变成 6+3=9
point is 6 变成 9
poayer rolled 5+2=7 变成 3+2=5
胜 还是胜
请帮我修改下,谢谢!(在我的基础上)
还有一个问题,/*...*/之间的一段代码要不要都是正确的,虽然运行结果不同。
当然/*...*/中是我加上的;我的理解为:
既然如果第一轮胜负未分,且是将第一轮点数和sum作为下轮游戏的点数,哪肯定要将sum作为随机数种子通过srand传给rand;
如果去掉那段代码,应该怎样理解。谢谢
[ 本帖最后由 梦幻尘 于 2012-9-27 11:59 编辑 ]