成语接龙问题
问题描述:
题目描述:成语接龙是中华民族传统的文字游戏。它有着悠久的历史,也有广泛的社会基础,是老少皆宜的民间文化娱乐活动。请设计四字成语接龙游戏。
功能需求:
(1) 计一个四字成语类Idiom,包含成语内容,首字母的拼音,末尾字母 的拼音。
(2) 设计一个成语接龙游戏类Game,系统可以判断用户的回答是否是成语,并且可以按照前一个成语,判断是否接龙成功。如果回答的成语接龙正确,则以新的成语作为新的起点,继续接龙;如果不成功,继续为原有的成语接龙。
(3) 设计提示功能,引导用户接龙成功。
(4) 使用外部文件存储相关数据。
Dev C++
void Game::gameStart()//开始游戏 { string idiom;//玩家成语 string lastidiom;//储存上一次的成语(从第二个成语开始) int tag1=0;//标记从第二个开始 cout<<"***********功能面板***********"<<endl <<"* *"<<endl <<"* 途中若想退出游戏输入——1 *"<<endl <<"* 若想要提示输入 ——2 *"<<endl <<"* *"<<endl <<"******************************"<<endl; cout<<"游戏开始,请输入一个四字成语。"<<endl; do{ cin>>idiom;//用户输入成语 tag1++;//标记--从第二个成语开始储存 if(idiom.compare("1")==0) //退出游戏 { break; } if(idiom.compare("2")==0)//提示功能 { idiom=lastidiom; string end_in=idiom.substr(6,8);//截取最后的字符 idiom=pointOut(end_in); if(idiom.compare("Endgame")!=0 ) cout<<idiom<<endl; else { cout<<"接龙完毕。"; break; } } printOut(idiom); if(tag1>=2&&!matchIfcatch(lastidiom,idiom)) { idiom=lastidiom;//若接龙失败,则为原来的成语接龙 cout<<"接龙失败,以上一个的成语继续"<<endl; } exist.append(idiom); if(tag2) lastidiom=idiom; }while(1); } void Game::printOut(string idiom)//输出是否为四字成语 { int tag=0; ifstream eachIdiom; string eachidiom; //每行的单个成语 string idiom1; //缓存的整行成语 eachIdiom.open("1.txt"); while(getline(eachIdiom,idiom1)) { eachidiom=idiom1.substr(0,8); if(matchIfidiom(idiom,eachidiom)&&!matchIfexist(idiom)) //matchIfidiom()检查是否为四字成语。matchIfexist()检查是否重复。 { cout<<"==>"; tag=1; tag2=1; break; } continue; } if(tag!=1) { cout<<"非成语或出现重复,请重新输入。"<<endl; tag2=0; } eachIdiom.close(); } string Game::pointOut(string end_in) //提示功能 { ifstream eachIdiom1; string idiom1; string eachidiom; //暂存读取到的四字成语 string eachidiom_first; //存取当前成语的第一个字 int tag=0; //通过tag的值判断是否成功找到满足条件的成语。 string Pidiom; //返回的提示成语 eachIdiom1.open("1.txt"); while(getline(eachIdiom1,idiom1)) { eachidiom=idiom1.substr(0,8); eachidiom_first=eachidiom.substr(0,2);//首字 if(end_in.compare(eachidiom_first)==0) //如果 end_in == eachidiom_first则为0 { Pidiom=eachidiom; if(matchIfexist(Pidiom)) //判断该成语前是否出现 如果之前出现则直接重新执行while语句 continue; tag=1; break; } } eachIdiom1.close(); if(tag==1) return Pidiom; // 此时 Pidiom为满足所有条件的的成语。 return "Endgame"; //没有找到成语只能结束游戏 } int main() { Game a; a.gameStart(); system("pause"); return 0; }