电视节目(面向对象版)
游戏介绍:
三扇门中,随机一扇门后是大奖,其他两扇门是安慰奖。参赛者做出最初选择。然后随即打开参赛者未选择的一扇门,后面是安慰奖,则询问参赛者是否更换选择。
本游戏主要有两组数据:关于奖品列表、以及门的状态
奖品管理者:PrizeManager类——包括大奖种类和安慰奖种类,奖品作为局部数据来维护。
class PrizeManage {
public:
PrizeManage() { srand(time(NULL)); }
string get_good_prize() {
static const string prize_list[] = { "car","money","travel" };
int sz = sizeof(prize_list) / sizeof(string);
return prize_list[rand() % sz];
};
string get_bad_prize() {
static const string prize_list[] = { "dog","cat","pig","fish","study" };
int sz = sizeof(prize_list) / sizeof(string);
return prize_list[rand() % sz];
};
};
门管理者:? ?DoorManager类——包括
判断哪扇门是大奖,其他是安慰奖???????start_new_game()??
根据参赛者的选择,判断开启哪扇门露出安慰奖,另一扇门作为备选????????set_sel_door(int n)
在做出最终选择后,判断参赛者是否中大奖????????bool query_door(int n)
class DoorManaer {
public:
DoorManaer() { srand(time(NULL)); }
void start_new_game() {
winDoor = rand() % 3;
};
void set_sel_door(int n) {
selDoor = n - 1;
if (selDoor == winDoor) {
if (rand() % 2) {
altDoor = (selDoor + 1) % 3;
badDoor = (selDoor + 2) % 3;
}
else {
badDoor= (selDoor + 1) % 3;
altDoor = (selDoor + 2) % 3;
}
}
else {
altDoor = winDoor;
badDoor = 3 - selDoor - altDoor;
}
}
int get_alt_door() { return altDoor + 1; }
int get_bad_door() { return badDoor + 1; }
bool query_door(int n) { return n == (winDoor + 1); }//判断是否中奖
private:
int winDoor;
int selDoor, altDoor, badDoor;//用户选择的门,备选门,坏门
};
知识点:
模运算(%3)就像一个特制的时针,可以从任意位置生成另外两数字
stoi:?实现字符串向整型数据类型的转换
随机数步骤:生成随机数种子,生成随机数
|