C++
Primer Plus(第六版) 中文版
教材案例 自定义编程练习
#include
#include
#include
#include
std::string shujuku_dongwu[15] = {
"lion","tiger","panda","squirrel","raccoon",
"Dog","cat","birds","elephant","giraffe","wolf"
"rhinoceros","Horse","ostrich","snake"
};
std::string shujuku_suiguo[15] = {
"apple","orange","banana","grape","watermelon",
"strawberry","mango","coconut","nut","blueberry",
"cherry","lemon","pomegranate","peach","pitaya"
};
std::string shujuku_renwu[8] = {
"Spongebob","mickey","teletubbies","tom","jerry",
"smurf","haierbrothers","nezha"
};
std::string shujuku_guojia[15] = {
"china","britain","japan","thailand","india",
"egypt","myanmar","canada","russia","france",
"italy","sovietunion","brazil","sweden","switzerland"
};
std::string* fanhui_shujulei();
void leixing_h(int i);
void tishi_1(int i, const std::string& daan);
int main()
{
using std::cout;
using std::endl;
using std::cin;
using std::string;
std::srand(std::time(0));
cout << "猜字游戏-1.0.0,应用程序EXE准备就绪!!!.\n"
<< "您是否准备好了?键盘输入 y 开始游戏!!" ;
char play;
cin >> play;
play = tolower(play);
while (play == 'y')
{
int leixing;
string* daan_zhizheng = fanhui_shujulei();
if (*daan_zhizheng == shujuku_dongwu[0])
{
daan_zhizheng = &shujuku_dongwu[std::rand() % 15];
cout << "本次解密游戏的答案类型为-------【动物】.\n";
leixing = 0;
}
else if (*daan_zhizheng == shujuku_guojia[0])
{
daan_zhizheng = &shujuku_guojia[std::rand() % 15];
cout << "本次解密游戏的答案类型为------【国家】.\n";
leixing = 1;
}
else if (*daan_zhizheng == shujuku_suiguo[0])
{
daan_zhizheng = &shujuku_suiguo[std::rand() % 15];
cout << "本次解密游戏的答案类型为-------【水果】.\n";
leixing = 2;
}
else
{
daan_zhizheng = &shujuku_renwu[std::rand() % 8];
cout << "本次解密游戏的答案类型为-------【动画人物】.\n";
leixing = 3;
}
int daan_size = daan_zhizheng->length();
string yonghu_daan(daan_size, '-');
string bad_daan;
int cuowu_cishu_max = 6;
cout << "接下来开始输入您的猜测,一次输入一个字母,当输入正确的时候系统会提示您,一直到正确答案全部出现,您赢得了游戏\n"
<< "有" << cuowu_cishu_max << "次错误的机会噢.\n"
<< "祝您好运.\n"
<< "提示:本次答案类型为; ";
leixing_h(leixing);
cout << "它由 " << daan_size << "个字母组成!.\n";
while (cuowu_cishu_max > 0 && yonghu_daan != *daan_zhizheng)
{
char caice;
cout << "请输入您的猜测; ";
cin >> caice;
if (bad_daan.find(caice) != std::string::npos || yonghu_daan.find(caice) != std::string::npos)
{
cout << "噢,你已经猜过这个字母了,尝试换一个字母把.\n";
continue;
}
int loc = daan_zhizheng->find(caice);
if (loc == string::npos)
{
--cuowu_cishu_max;
cout << "噢,不,这居然是一个错误的答案,只能怪游戏设计者太笨了!!!.\n";
bad_daan += caice;
if (cuowu_cishu_max == 4)
{
if (leixing == 0)
{
cout << "答案类型为; 【动物】.\n";
cout << "提示; ";
tishi_1(leixing, *daan_zhizheng);
cout << "加油加油加油!!!.\n";
}
if (leixing == 1)
{
cout << "答案类型为; 【国家】.\n";
cout << "提示; ";
tishi_1(leixing, *daan_zhizheng);
cout << "加油加油加油!!!.\n";
}
if (leixing == 2)
{
cout << "答案类型为; 【水果】.\n";
cout << "提示; ";
tishi_1(leixing, *daan_zhizheng);
cout << "加油加油加油!!!.\n";
}
if (leixing == 3)
{
cout << "答案类型为; 【动画人物】.\n";
cout << "提示; ";
tishi_1(leixing, *daan_zhizheng);
cout << "加油加油加油!!!.\n";
}
}
}
else
{
cout << "答对啦!!!!.\n";
yonghu_daan[loc] = caice;
loc = daan_zhizheng->find(caice, loc + 1);
while (loc != string::npos)
{
yonghu_daan[loc] = caice;
loc = daan_zhizheng->find(caice, loc + 1);
}
}
cout << "目前猜测进度为; " << yonghu_daan << endl;
if (yonghu_daan != *daan_zhizheng)
{
if (bad_daan.length() > 0)
cout << "错误的字母为; " << bad_daan << endl;
cout << "还剩下 " << cuowu_cishu_max << " 错误机会!.\n";
}
}
if (cuowu_cishu_max > 0)
cout << "恭喜你!成功通过了游戏!.\n马上开始新的一轮游戏!!!\n";
else
{
cout << "噢,其实正确答案是; " << *daan_zhizheng << ".\n";
cout << "就差一点点就猜到了噢,是否开始新的一轮猜测?" ;
cin >> play;
play = tolower(play);
}
}
cout << "Bye...\n";
cin.get();
cin.get();
return false;
}
std::string* fanhui_shujulei()
{
int i = std::rand() % 4;
switch (i)
{
case 0:return shujuku_dongwu;
break;
case 1:return shujuku_suiguo;
break;
case 2:return shujuku_renwu;
break;
case 3:return shujuku_guojia;
break;
}
}
void leixing_h(int i)
{
if (i == 0)
std::cout << "动物";
else if (i == 1)
std::cout << "国家";
else if (i == 2)
std::cout << "水果";
else if (i == 3)
std::cout << "人物";
}
void tishi_1(int i, const std::string& daan)
{
if (i == 0)
{
if (daan == shujuku_dongwu[0])
std::cout << "它是大型猫科类动物.食肉动物,是一种生存在非洲与亚洲的大型猫科动物,是现存平均体重最大的猫科动物,也是在世界上唯一一种雌雄两态的猫科动物.\n";
if (daan == shujuku_dongwu[1])
std::cout << "它是哺乳纲动物,食肉动物,大型猫科动物,毛色浅黄或棕黄色,满身黑色横纹;头圆、耳短,耳背面黑色,中央有一白斑甚显著,四肢健壮有力,尾粗长,具黑色环纹,尾端黑色.\n";
if (daan == shujuku_dongwu[2])
std::cout << "它是哺乳动物,生活在海拔2600-3500米的茂密竹林里,那里常年空气稀薄,云雾缭绕,气温低于20℃.有充足的竹子,地形和水源的分布利于该物种建巢藏身和哺育幼仔.\n";
if (daan == shujuku_dongwu[3])
std::cout << "它是脊索动物门哺乳纲啮齿目松鼠科动物,与大多数人的印象不同,生活在树上、有毛茸茸的大尾巴.\n";
if (daan == shujuku_dongwu[4])
std::cout << "它是一种哺乳动物,属哺乳纲食肉目浣熊科的一种动物。源自北美洲,因其食前要将食物在水中洗濯.\n";
if (daan == shujuku_dongwu[5])
std::cout << "它是属于脊索动物门、脊椎动物亚门、哺乳纲、真兽亚纲、食肉目、裂脚亚目、犬科动物.\n";
if (daan == shujuku_dongwu[6])
std::cout << "它的祖先据推测是起源于古埃及,波斯,已经被人类驯化了3500年(但未像狗一样完全地被驯化).头圆、颜面部短,前肢五指,后肢四趾,趾端具锐利而弯曲的爪,爪能伸缩。夜行性\n";
if (daan == shujuku_dongwu[7])
std::cout << "它是体表被覆羽毛的卵生脊椎动物,胸肌发达;直肠短,食量大消化快,即消化系统发达,有助于减轻体重.\n";
if (daan == shujuku_dongwu[8])
std::cout << "它是哺乳纲动物,据史料记载,它很早就成了人类的朋友,并能为人类提供帮助。它非常聪明,能开辟场地,还能把死去的同伴安埋在落叶枯枝之中.\n";
if (daan == shujuku_dongwu[9])
std::cout << "生活于非洲稀树草原地带,是草食动物,以树叶及小树枝为主食。在野外长颈鹿的寿命为27年左右,动物园里的能活超过29年。主要分布在非洲的南非、埃塞俄比亚、苏丹、肯尼亚、坦桑尼亚和赞比亚等国。是南非的国兽.\n";
if (daan == shujuku_dongwu[10])
std::cout << "它体型中等、匀称,四肢修长,趾行性,利于快速奔跑头腭尖形,颜面部长,鼻端突出,耳尖且直立。犬齿及裂齿发达;上臼齿具明显齿尖,下臼齿内侧具一小齿尖及后跟尖:臼齿齿冠直径大于外侧门齿高度.\n";
if (daan == shujuku_dongwu[11])
std::cout << "是哺乳纲、犀科的总称, 有4属5种。是世界上最大的奇蹄目动物,犀类动物腿短、体肥笨拙,体长2.2-4.5米,肩高1.2-2米,体重2800-3000千克.\n";
if (daan == shujuku_dongwu[12])
std::cout << "它被人类驯化以来,在漫长的发展过程中,由于各地区自然环境的影响和不同时期社会经济发展的需要,它的用途经历了肉用、乳用、农业生产、交通运输、军事和运动娱乐等多个阶段交替或互相融合的过程.\n";
if (daan == shujuku_dongwu[13])
std::cout << "它是世界上最大的一种鸟类,成鸟身高可达2.5米,雄鸵鸟体重可达150千克.\n";
if (daan == shujuku_dongwu[14])
std::cout << "它是是脊索动物门、爬行纲下的一类动物。体细长,分为头、躯干和尾三部分.\n";
}
else if (i == 2)
{
if (daan == shujuku_suiguo[0])
std::cout << "它的营养价值很高,富含矿物质和维生素,含钙量丰富,有助于代谢掉体内多余盐分.\n";
if (daan == shujuku_suiguo[1])
std::cout << "它果实外皮肥厚,内藏瓤瓣,由汁泡和种子构成.\n";
if (daan == shujuku_suiguo[2])
std::cout << "它又指其果实,热带地区广泛种植、富含营养,植株为大型草本,从根状茎发出,由叶鞘下部形成高3~6米(10~20尺).\n";
if (daan == shujuku_suiguo[3])
std::cout << "它优良品种较多,适合东北栽培的鲜食品.\n";
if (daan == shujuku_suiguo[4])
std::cout << "它一年生蔓生藤本;茎、枝粗壮,具明显的棱。卷须较粗壮,具短柔毛,叶柄粗,密被柔毛;叶片纸质,轮廓三角状卵形,带白绿色,两面具短硬毛,叶片基部心形.\n";
if (daan == shujuku_suiguo[5])
std::cout << "它是蔷薇目蔷薇科植物,多年生草本植物。高10-40厘米,茎低于叶或近相等,密被开展黄色柔毛。叶三出,小叶具短柄,质地较厚,倒卵形或菱形,上面深绿色,几无毛,下面淡白绿色,疏生毛,沿脉较密;叶柄密被开展黄色柔毛.\n";
if (daan == shujuku_suiguo[6])
std::cout << "它是果是一种原产印度的漆树科常绿大乔木,叶革质,互生;花小,杂性,黄色或淡黄色,成顶生的圆锥花序.\n";
if (daan == shujuku_suiguo[7])
std::cout << "它植株高大,乔木状,高15-30米,茎粗壮,有环状叶痕,基部增粗,常有簇生小根,果卵球状或近球形,果腔含有胚乳(即“果肉”或种仁),胚和汁液,花果期主要在秋季.\n";
if (daan == shujuku_suiguo[8])
std::cout << "它是干果类果实,是闭果的一个分类,果皮坚硬,内含1粒或者多粒种子.\n";
if (daan == shujuku_suiguo[9])
std::cout << "它是杜鹃花科越橘属植物,又名笃斯、黑豆树(大兴安岭)、都柿(大小兴安岭、伊春)、甸果、地果、龙果、蛤塘果(吉林)、讷日苏(蒙古族语)、吉厄特、吾格特(鄂伦春语)等,为杜鹃花科越橘属多年生低灌木./n";
if (daan == shujuku_suiguo[10])
std::cout << "它主要分布于欧洲、亚洲及北美等地。生于山坡林中、林缘、灌丛中或草地。适宜的土壤pH值为6.5-7.5的中性环境,在土层深厚、土质疏松、通气良好的砂壤土上生长较好.\n";
if (daan == shujuku_suiguo[11])
std::cout << "它果椭圆形或卵形,果皮厚,通常粗糙,为黄色,果汁酸至甚酸,种子小,卵形,端尖;种皮平滑,子叶乳白色,通常单或兼有多胚。花期4-5月,果期9-11月.\n";
if (daan == shujuku_suiguo[12])
std::cout << "它的浆果为球形,顶端有宿存花萼裂片,果皮厚;种子多数,浆果近球形,果熟期9-10月。外种皮肉质半透明,多汁;内种皮革质.\n";
if (daan == shujuku_suiguo[13])
std::cout << "它表面有毛茸,肉质可食,为橙黄色泛红色,直径7.5厘米,有带深麻点和沟纹的核,内含白色种子.\n";
if (daan == shujuku_suiguo[14])
std::cout << "它是是仙人掌科,浆果红色,长球形,果脐小,果肉白色、红色。种子倒卵形,黑色,种脐小。7-12月开花结果.\n";
}
else if (i == 1)
{
if (daan == shujuku_guojia[0])
std::cout << "它是世界上历史最悠久的国家之一,有着光辉灿烂的文化和光荣的革命传统 ,世界遗产数量全球领先 。1949年新它成立后,进入社会主义革命和建设时期,1956年实现向社会主义过渡,此后社会主义建设在探索中曲折发展.\n";
if (daan == shujuku_guojia[1])
std::cout << "它是由大不列颠岛上的英格兰、威尔士和苏格兰以及爱尔兰岛东北部的北爱尔兰以及一系列附属岛屿共同组成的一个西欧岛国.\n";
if (daan == shujuku_guojia[2])
std::cout << "它是一个太平洋西岸的岛国,也是是一个高度发达的资本主义国家,世界第三大经济体,G7、G20等成员.\n";
if (daan == shujuku_guojia[3])
std::cout << "它是是东南亚国家联盟成员国和创始国之一,同时也是亚太经济合作组织、亚欧会议和世界贸易组织成员。在20世纪90年代跻身为“亚洲四小虎”之一,但在1998年经济危机中受重大挫折。它是是世界的新兴工业国家和世界新兴市场经济体之一、亚洲唯一的粮食净出口国、世界五大农产品出口国之一、东南亚汽车制造中心和东盟最大的汽车市场.\n";
if (daan == shujuku_guojia[4])
std::cout << "它是是四大文明古国之一,也是一个由100多个民族构成的统一多民族国家,它位于南亚,是南亚次大陆最大的国家.\n";
if (daan == shujuku_guojia[5])
std::cout << "它位于非洲东北部,地处欧亚非三大洲的交通要冲,是大西洋与印度洋之间海上航线的捷径,是世界四大文明古国之一,也是世界上最早的王国.\n";
if (daan == shujuku_guojia[6])
std::cout << "它是东南亚的一个国家,也是东南亚国家联盟的成员国。西南临安达曼海,西北与印度和孟加拉国为邻,东北靠中国,东南接泰国与老挝,首都为内比都.\n";
if (daan == shujuku_guojia[7])
std::cout << "它是位于北美洲北部的北美海陆兼备国,东临大西洋,西濒太平洋,西北部邻美国阿拉斯加州,南接美国本土,北靠北冰洋。它的面积有998万平方千米,居世界第二位,其中淡水覆盖面积89万平方千米,气候大部分为副极地大陆性气候和温带大陆性湿润气候,北部极地区域为极地长寒气候.\n";
if (daan == shujuku_guojia[8])
std::cout << "它是由22个自治共和国、46个州、9个边疆区、4个自治区、1个自治州、3个联邦直辖市组成的联邦共和立宪制国家,拥有世上最大的核武器库,在“一超多强”的国际体系中,它是有较大影响力的强国,其军工实力雄厚,特别是高等教育、航空航天技术,居世界前列.\n";
if (daan == shujuku_guojia[9])
std::cout << "它是一个本土位于西欧的半总统共和制国家,海外领土包括南美洲和南太平洋的一些地区,也是一个高度发达的资本主义国家,欧洲四大经济体之一,其国民拥有较高的生活水平和良好的社会保障制度,是联合国安理会五大常任理事国之一,也是欧盟和北约创始会员国、申根公约和八国集团成员国,和欧洲大陆主要的政治实体之一.\n";
if (daan == shujuku_guojia[10])
std::cout << "它是一个欧洲国家,主要由南欧的亚平宁半岛及两个位于地中海中的岛屿西西里岛与萨丁岛所组成。国土面积为301333平方公里,人口6080万,它是一个发达的资本主义国家 ,欧洲四大经济体之一,也是欧盟和北约的创始会员国,还是申根公约、八国集团和联合国等重要国际组织的成员.\n";
if (daan == shujuku_guojia[11])
std::cout << "它是一个存在于1922年至1991年的联邦制社会主义国家,也是当时世界上土地面积最大的国家,它涵盖东欧的大部分,与挪威、芬兰、波兰、捷克斯洛伐克、匈牙利、罗马尼亚、土耳其、伊朗、阿富汗、中国、蒙古及朝鲜接壤;与瑞典、日本、美国及加拿大隔海相望,最终,随着美国拖垮它的经济,以及它的领导人失误而解体.\n";
if (daan == shujuku_guojia[12])
std::cout << "古代它为印第安人居住地,它拥有丰富的自然资源和完整的工业基础,国内生产总值位居南美洲第一,为世界第七大经济体,金砖国家之一,是南美洲国家联盟成员.\n";
if (daan == shujuku_guojia[13])
std::cout << "它作为国家,形成于11世纪,即海盗时期末叶(约1050年前后)。在历经近千年的历史变迁中,它先后共有69位国王(女王)登上了御座,这也包括当今国王卡尔十六世·古斯塔夫.\n";
if (daan == shujuku_guojia[14])
std::cout << "它是一个高度发达的资本主义国家,也是全球最富裕、社会最安定、经济最发达和拥有最高生活水准的国家之一,全球创新指数位列第一 。其旅游资源丰富,有世界公园的美誉;其人均GDP一直居世界前列,在欧洲仅次于卢森堡.\n";
}
else if (i == 3)
{
if (daan == shujuku_renwu[0])
std::cout << "它是一部由舍曼·科恩、沃特·杜赫、山姆·亨德森、保罗·蒂比特等导演,汤姆·肯尼、比尔·法格巴克、罗杰·布帕斯等配音的美国喜剧动画,它的故事情节主要围绕着主角和他的好朋友XXX、邻居XXX、上司X老板等人展开,场景设定于太平洋海底,一座被称为比奇堡的城市.\n";
if (daan == shujuku_renwu[1])
std::cout << "它是华特·迪士尼集团代表人物形象,迪士尼代表角色形象,是一只有着圆滚滚的大脑袋、圆滚滚的大耳朵、梨形的身体与像橡胶软管一样柔软、没有明显的关节、可以自由拉伸仿佛没有骨骼的四肢的小老鼠.\n";
if (daan == shujuku_renwu[2])
std::cout << "它是英国广播公司(BBC)与Rag Doll公司制作的幼儿节目,发行于1997年到2001年,主要观众对象是一到四岁的儿童.\n";
if (daan == shujuku_renwu[3])
std::cout << "它是米高梅公司制作的经典动画片《猫和老鼠》中的主角之一,70年代老动画中的著名卡通明星角色,是一只蓝灰和白色混合的英国短毛猫.\n";
if (daan == shujuku_renwu[4])
std::cout << "它是米高梅公司制作的的美国经典动画片《猫和老鼠》中的两大主角之一,70年代老动画中的著名卡通明星角色,是一只古灵精怪的棕毛老鼠.\n";
if (daan == shujuku_renwu[5])
std::cout << "它是一部由美国的翰纳-芭芭拉工作室出品的动画片,最早源于比利时,带有很多的“法国元素”。1958年,化名贝约(Peyo)的比利时漫画家皮埃尔·库利福德创造了“它”这个艺术形象.\n";
if (daan == shujuku_renwu[6])
std::cout << "它是是由海尔集团、北京红叶电脑动画制作技术有限公司联合出品的系列动画片。其由刘左锋、戴福林执导,张经平编剧,1995年起播放,于2001年完结,共212集.\n";
if (daan == shujuku_renwu[7])
std::cout << "它是中国古代神话人物,主要记载源于元代宗教神话典籍《三教搜神大全》,活跃于明代神魔系列小说名著《封神演义》、《西游记》、《南游记》等多部古典文学作品.\n";
}
}
<知识点/核心代码块>#1
if (bad_daan.find(caice) != std::string::npos || yonghu_daan.find(caice) != std::string::npos)
{
cout << "噢,你已经猜过这个字母了,尝试换一个字母把.\n";
continue;
}
记录每次出入错误答案,判断是否本次输入与,错误/正确答案重叠,提示用户,重新输入.\n
bad_daan.find(caice) != std::string::npos
如果在bad_daan(坏的答案)中没有找到用户输入的字符(caice),则find返回nops,做的了检查输入的值是否与错误值重叠,|| 后的的判断式检查值是否与正确答案重叠
int loc = daan_zhizheng->find(caice);
if (loc == string::npos)
判断输入的值是否在正确答案中
自己在家里写着玩儿,所以就偷懒用拼音了0.0,不会英语,这就很难受0.0.\n