| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1158 人关注过本帖
标题:[求助]关于投色子游戏的疑问
只看楼主 加入收藏
bleach1983
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2006-5-22
收藏
 问题点数:0 回复次数:2 
[求助]关于投色子游戏的疑问
我在《大学C++(第二版)》上看到一个有关投色子的例子.
题目大致是这样的:投2个色子,如果2个色子的和为7或11时,游戏者赢;如果2个色子的和为2,3,12时,游戏者输;
如果2个色子的和为3、4、5、6、8、9、10的其中一个时,将这个和作为游戏者的点数,再给
游戏者7次机会,如果在7次内能够投出刚才投出的数字和时,游戏者赢,反之,输。

下面是书上给的程序例子:

#include<iostream.h>

#include<stdlib.h>

#include<time.h>

int rollDice(void);//因为rollDice函数不取参数,所以在参数表中用void来声明。

int main()

{

enum Status {CONTINUE,WON,LOST};

int sum,

myPoint;

Status gameStatus;//给game注释

srand(time(NULL));

sum=rollDice();//第一次投色子

switch (sum)

{

case 7:

case 11:

gameStatus=WON;//第一次投就赢

break;

case 2:

case 3:

case 12:

gameStatus=LOST;//第一次投就输

break;

default: //记住除上述外所投的点数

gameStatus=CONTINUE;

myPoint=sum;

cout<<"Point is"<<myPoint<<endl;

break;

}

while(gameStatus==CONTINUE) //继续投色子

{

sum=rollDice();

if (sum==myPoint) //当符合点数时,赢

gameStatus=WON;

else if (sum==7) //投到7时,输;而题意是投7次,我保证题目是这么说的。

gameStatus=LOST;

}

if (gameStatus==WON)

cout<<"Player wins!"<<endl;

else

cout<<"Player loses!"<<endl;

return 0;

}

int rollDice (void)

{

int die1,

die2,

workSum;

die1=1+rand()%6;

die2=1+rand()%6;

workSum=die1+die2;

cout<<"Player rolled"<<die1<<"+"<<die2<<"="<<workSum<<endl;

return workSum;

}

我觉得是编程者的失误。否则这么判断的话,意图好像前后有矛盾。

我自己用计数器改了一下:

#include<iostream.h>

#include<stdlib.h>

#include<time.h>

int rollDice(void);//因为rollDice函数不取参数,所以在参数表中用void来声明。

int count=0;

int main()

{

enum Status {CONTINUE,WON,LOST};

int sum,

myPoint;

Status gameStatus;//给game注释

srand(time(NULL));

sum=rollDice();

switch (sum)

{

case 7:

case 11:

gameStatus=WON;

break;

case 2:

case 3:

case 12:

gameStatus=LOST;

break;

default:

gameStatus=CONTINUE;

myPoint=sum;

cout<<"Point is"<<myPoint<<endl;

break;

}

while(gameStatus==CONTINUE)

{

sum=rollDice();

if (sum==myPoint)

gameStatus=WON;

else if (count==8)\\这里应该是用7还是8,用7的话,只有6次投色子

gameStatus=LOST;

}

if (gameStatus==WON)

cout<<"Player wins!"<<endl;

else

cout<<"Player loses!"<<endl;

return 0;

}

int rollDice (void)

{

int die1,

die2,

workSum;

die1=1+rand()%6;

die2=1+rand()%6;

workSum=die1+die2;

++count;

cout<<"Player rolled"<<die1<<"+"<<die2<<"="<<workSum<<endl;

return workSum;

}

[此贴子已经被作者于2006-5-29 15:06:18编辑过]

搜索更多相关主题的帖子: 色子 游戏 疑问 STRONG 
2006-05-29 14:44
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
你在干什么?

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-05-29 16:37
bleach1983
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2006-5-22
收藏
得分:0 

这么改行吗~~,但是count在这里计数的问题我有点把握不准


动感超人~~动感光波~~HOHO~~小白,你也是男孩子,所以你也要努力~~
2006-05-30 08:43
快速回复:[求助]关于投色子游戏的疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.082605 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved