学习中,刚在网上找到一道题,不会做,请大家帮忙。
掷两个骰子,计算朝上的面的点数和,如果第一次掷的点数是7或11,玩家获胜,如果第一次掷的结果是2、3、或12,庄家获胜。如果第一次掷的结果是4、5、6、8、9或10,那么这个和就是该玩家的“点数”,为了获胜,就必须继续掷骰子,直到玩家“掷出了点数”,在掷出点数之前,如果玩家掷出了7,那么玩家就输(庄家胜)。 问题点数:0、回复次数:2Top
1 楼fvv(守护者)回复于 2003-11-01 01:41:00 得分 0
//dicegame.h 类声明头文件
#ifndef DICEGAME_H
#define DICEGAME_H
#include <stdlib.h>
class Dice
{ public:
Dice(){
point=rand()%6+1;}
int point;
};
class DiceGame
{
public:
DiceGame(int n); //构造函数
int RollDice(); //投骰子的函数
void FirstGame(); //第一次投后的处理函数
void ContinueGame(); //继续投的处理函数
void Play(); //运行函数
void ShowResult(); //显示最终结果的函数
private:
int PlayNum; //投掷次数
int WinPoint; //赢点
int WinCount; //统计赢的次数
int GameStatus; //记录输赢平的状态
};
#endif
//DiceGame.cpp 类成员函数的实现文件
#include <iostream.h>
#include <time.h>
#include "dicegame.h"
DiceGame::DiceGame(int n) //构造函数,n是外界定的投掷次数
{ time_t tic=time(NULL);
srand(tic); //设置随几种子
PlayNum=n; //根据n 给PlayNum赋值
WinCount=0; //赢的次数必须初始化为零
WinPoint=0;
GameStatus=0;
}
int DiceGame::RollDice()
{ //投掷骰子的函数,所投的点数由函数返回
Dice d1,d2;
return d1.point+d2.point;
}
void DiceGame::FirstGame() //首次投的处理函数
{
int sum=RollDice(); //投两个骰子,获得点数
switch(sum)
{ //根据点数,决定赢,输,平
case 7:
case 11: GameStatus=1; break; //赢
case 2:
case 3:
case 12: GameStatus=2; break; //输
default : GameStatus=0; //平
WinPoint=sum; //记录你的赢点
}
if(GameStatus==0)
ContinueGame(); //如果平,继续投,决出输赢
if(GameStatus==1)WinCount++; //如果赢,赢的次数加一
}
void DiceGame::ContinueGame() //继续投的处理函数
{ //如第一次投未分输赢,继续投,直到决出输赢
while(GameStatus==0)
{ int sum=RollDice(); //继续投
if(sum==WinPoint)GameStatus=1; //根据点数决定输赢
else if(sum==7)GameStatus=2;
} //如平再继续投,直到决出输赢才退出循环
}
void DiceGame::Play() //根据投掷次数进行游戏
{ for(int i=1; i<=PlayNum;++i)
FirstGame();
}
void DiceGame::ShowResult() //显示结果的函数
{ cout<<endl;
cout<<"总共投了"<<PlayNum<<" 次"<<endl;
cout<<"你赢了"<<WinCount<<" 次"<<endl;
cout<<"赢的百分比为:"<<100.0*WinCount/PlayNum<<"%"<<endl;
}
Top
2 楼Andy84920(你也不懂)回复于 2003-11-01 12:43:06 得分 0
没认真看.
不过楼上的态度很认真.
敬佩!Top




