




免费预览已结束,剩余10页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#ifndefGLOBAL_H /条件编译#define GLOBAL_H#include / 标准输入输出cin;cout#include / 字符串处理string.length();at();#include / 字符处理和检测#include / 文件流#include / 使用随机函数用#include / 得到更好的随机数用/ draw类定义#ifndef DRAW_H/ 检测是否已经包含#define DRAW_Hclass drawpublic:draw();/ 构造函数/ 成员函数 void rope(); / 输出上吊绳void head();/ 头void neck();/ 颈void leftarm();/ 左 armvoid rightarm();/ 右armvoid waisttop();/ 腰部void leftleg(); / 左腿void rightleg();/ 右腿; #endif#ifndef GUESS_H#defineGUESS_H#includeglobal.h /文件包含using namespace std;/程序类定义class CGuessprivate:string p_Word;/要猜的单词string p_DisplayWord;/用户所见的单词char*p_pWord1;char*p_pWord2;int p_Proba;/显示单词字母个数百分比int p_GuessNum;/玩家猜词的机会int p_WrongNum;/玩家猜错的次数intp_ChosenCounter;/玩家猜过的字母个数stringp_LetterChosen;/玩家已经猜过的字母intp_Choice;/玩家的选择intp_ShowNum;/显示字母个数int p_Length;/所猜单词的长度intp_LetterNum;/单词中的字母个数intp_i;/循环的记数变量,使每次游戏都不一样intp_Check;/用户输入字母是否正确public:CGuess(); /构造函数voidInitialSet();/修改设置值/intOpenWordFile();voidSaveWordFile(); /向单词库输入新单词,正确返回1intUserWord();/玩家出词-ok-Game()intRndWord();/电脑出词-ok-Game()voidReplaceWord();/Game()-voidisChosen(char);/voidJudge(char); /判断是否猜中,猜中返回0,猜不中返回1intRun();/运行-okvoidGetChoice();/得到选择-okvoidGame();/游戏主要函数-void jiemian1();/人人对抗界面void jiemian2();/人机对抗界面/intPrintHelp();/用来给出帮助-ok;#endif/自定义的头文件#endifusing namespace std;#include global.husing namespace std;/构造函数draw:draw()void draw:rope() / 上吊绳cout |; void draw:head() /头cout O;void draw:neck()/颈cout |; void draw:leftarm()/左 armcout /; void draw:rightarm()/右 armcout ; void draw:waisttop()/腰部cout ; void draw:leftleg()/左腿cout /; void draw:rightleg()/右腿cout in_avail();return stream.ignore(chars_to_skip);void drawman(int numguess, int numwrong, int i) /根据设定的次数numguess及猜错的次数numwrong画上吊的人draw d;/ 类的对象for (i = 0; i = numwrong; i+)if (numguess = 4)switch(i)case 1: d.rope();cout endl;d.head();cout endl;d.neck(); break;case 2:cout endl;d.leftarm();d.rightarm();break;case 3: cout endl; d.waisttop();break;case 4: cout endl;d.leftleg();d.rightleg();cout endl endl 死翘翘了! endl;break;else if (numguess = 5)switch(i)case 1:d.rope();break;case 2:cout endl;d.head();cout endl;d.neck();break;case 3:cout endl;d.leftarm(); d.rightarm(); break;case 4:cout endl;d.waisttop();break;case 5:cout endl;d.leftleg();d.rightleg();cout endl endl 死翘翘了! endl;break;else if (numguess = 6)switch(i)case 1:d.rope();break;case 2: cout endl;d.head(); cout endl;d.neck(); break;case 3:cout endl;d.leftarm();d.rightarm();break;case 4:cout endl;d.waisttop();break;case 5:cout endl;d.leftleg();break;case 6:d.rightleg();cout endl 死翘翘了! endl;break;else if (numguess = 7)switch(i)case 1:d.rope();break;case 2:cout endl;d.head();cout endl;d.neck();break;case 3:cout endl;d.leftarm();break;case 4:d.rightarm();break;case 5:cout endl;d.waisttop();break;case 6:cout endl;d.leftleg();break;case 7:d.rightleg();cout endl 死翘翘了! endl;break;else if (numguess = 8)switch(i)case 1:d.rope();break;case 2:cout endl;d.head(); break;case 3:cout endl;d.neck();break;case 4:cout endl;d.leftarm();break;case 5:d.rightarm(); break;case 6:cout endl;d.waisttop();break;case 7:cout endl;d.leftleg();break;case 8:d.rightleg();cout endl 死翘翘了! endl;break;else if (numguess = 9)switch(i)case 1:d.rope();break;case 2:cout endl;d.head();break;case 3:cout endl;d.neck();break;case 4:cout endl;d.leftarm();break;case 5:d.rightarm();break;case 6:cout endl; d.waisttop();break;case 7: break;case 8:cout endl;d.leftleg();break;case 9:d.rightleg(); cout endl 死翘翘了! endl;break;else if (numguess = 10)switch(i)case 1:d.rope();break;case 2:cout endl;d.head();break;case 3:cout endl;d.neck();break;case 4:cout endl;d.leftarm();break;case 5:d.rightarm();break;case 6:cout endl;d.waisttop();break;case 7:break;case 8:cout endl;d.leftleg();break;case 9: d.rightleg();cout t最后一次机会,难道您想躺在坟墓里吗?;break;case 10:cout endl 死翘翘了! endl;break;#includeglobal.husing namespace std;int main()CGuess Pguess;return Pguess.Run();/成员函数声明CGuess:CGuess()string p_Word;/要猜的单词string p_DisplayWord;/用户所见的单词p_pWord1=NULL;p_pWord2=NULL;p_Proba=20;/显示单词字母个数百分比p_GuessNum=4;/玩家猜词的机会p_WrongNum=0;/玩家猜错的次数p_ChosenCounter=0;/玩家猜过的字母个数p_LetterChosen= ;/玩家已经猜过的字母p_Choice=0;/玩家的选择p_ShowNum=0;/显示字母个数p_Length=0;/所猜单词的长度p_LetterNum=0;/单词中的字母个数p_i=0;/循环的记数变量,使每次游戏都不一样p_Check=0;/用户输入字母是否正确int CGuess:Run()int exit = 0;/主循环是否退出的变量,1时退出do /主循环system(cls);/ 执行系统命令清屏GetChoice();/ 给出说明并得到选择switch(p_Choice)case 1:Game();/ 与人对战break;case 2: Game();/ 与电脑对战break;case 3:cout 再见 endlendl;/ 退出exit = 1;break;default:cerr 无效输入 - 请再输入 endl; / 无效输入 while (exit != 1);/退出主循环system(pause);/ 执行系统命令:暂停return 0;void CGuess:GetChoice()cout 猜 单 词 游 戏 endl endl;cout 作者:储维坤 endl ;cout * endl;cout endl;cout 1. 猜玩家给出单词 endl;cout 2. 猜电脑给出单词 endl;cout 3. 退出 endl;cout endl;cout * endl endl;cout p_Choice;/ 得到用户选择while (!cin)/ 简查是否无效 cerr 无效输入 endl p_Choice;/ 完成简查, 得到有效输入,m_Choice变量的值被修改,清屏system(cls); /系统清屏 void CGuess:Game()int end = 0;/ 循环结束标示符,记录游戏结果的变量,1时表示结束int chosencounter = 0;/ A counter to tell the replace function where to put the letter chosen in the letterchosen stringchar letter;/ 用户输入字母string temp;/ 用户所见的单词string letterchosen = ;/ 选择过的字符集 /InitialSet();/进行设置if(p_Choice=1) jiemian1();else jiemian2();system(cls);p_WrongNum=0;int isok;p_LetterNum=0;if(p_Choice=1)isok=UserWord();elseisok=RndWord();/得到单词p_DisplayWord =p_Word;/ 得到有效输入,把m_DisplayWord长度设为m_Word的长度/ 用星号替换m_DisplayWord,此处修改,20%的字母要给出ReplaceWord();/m_LetterNum记录单词不重复字母的个数system(cls);if(p_Choice=1)cout 人人对战endl;cout * endl endl;cout猜词机会:p_GuessNumendl;cout显示字母:p_Proba%endl;cout 提示:第二位玩家输入了一个有p_LetterNum个不重复字母的单词endl;elsecout 人机对战endl;cout * endl endl;cout猜词机会:p_GuessNumendl;cout显示字母:p_Proba%endl;cout 提示:电脑给出了一个有p_LetterNum个不重复字母的单词endl;system(pause);system(cls);/执行系统命令,清屏/ 游戏主循环do drawman(p_GuessNum, p_WrongNum, p_i);/画出要吊死的人/ 检查玩家是否猜中的单词if (p_Word = p_DisplayWord)cout endl endl;cout 你猜对了 p_Word endl endl;p_LetterChosen= ;system(pause);end = 1;/ 检查玩家是否没有猜中单词if (p_WrongNum = p_GuessNum)cout endl endl;cout 你没有猜出 endl endl;cout 正确的单词是 p_Word endl endl; p_LetterChosen= ; /清空所猜过的字符system(pause);end = 2;if (end = 0)/ 上面两情况都不对时cout endl endl endl;cout 已猜字母: letterchosen endl;cout 还剩机会: p_GuessNum-p_WrongNum endl endl; cout p_DisplayWord endl endl;cout letter;while (!isalpha(letter)/ 检测无效输入Flush(cin);cout letter;isChosen(letter);/if (p_Check = 0) Judge(letter);else;system(cls);system(cls);/清空游戏界面while(end != 1 & end != 2);/人人对抗界面void CGuess:jiemian1()int number1;cout 人人对抗endl;cout*endl;cout 1.开始游戏endl;cout 2.设置系统endl;cout*endl;coutnumber1; if (number1=2) system(CLS);InitialSet();/人机对抗界面void CGuess:jiemian2()int number2; cout 人机对抗endl;cout*endl;cout 1.开始游戏endl;cout 2.设置系统endl; cout 3.向单词库增加单词endl;cout*endl; coutnumber2; switch(number2)case 2: system(CLS);InitialSet();break;case 3: system(cls); SaveWordFile();break;/判断输入的字符是否为以前选取过的字符void CGuess:isChosen(char letter)p_Check = 0; for (int i = 0; i p_LetterChosen.length(); i+)if (letter = p_LetterChosen.at(i) p_Check = 1; /如果以前选过,check为1 if(p_Check!=1)p_LetterChosen.replace(p_ChosenCounter, 1, 1, letter);/如果字母还没有猜过,用输入字母替p_ChosenCounter+;else coutendl;coutLetter already chosenendl;system(pause);/判断输入的字符是否为组成单词的字符void CGuess:Judge(char letter)int check2 = 0; /判断字符是否为正确字符的标示符,正确为1for (int i = 0; i p_Word.length(); i+)if (letter = p_Word.at(i)p_DisplayWord.replace(i, 1, 1, letter);check2 = 1;if (check2 = 0)coutendl;coutWrong letterendl;system(pause);p_WrongNum+;void CGuess:InitialSet()if(p_Choice=1)cout 人人对战endl;elsecout 人机对战endl;cout * endl endl;coutp_GuessNum;/此处原程序有漏洞,已修改while (!cin|p_GuessNum 10)/输入猜词次数cerr 无效输入 endlp_GuessNum;coutp_Proba;while (!cin|p_Proba 100)/输入猜词次数cerr 无效输入 endlp_Proba;int CGuess:UserWord()cout 人人对战endl;cout * endl endl;cout猜词机会:p_GuessNumendl;cout显示字母:p_Proba%endl;cout p_Word;int wordcheck;do / 检查用户输入单词是否有误wordcheck = 0;for (int i = 0; i p_Word.length(); i+)if (!isalpha(p_Word.at(i)/isalpha();word.at();wordcheck = 1;if (wordcheck = 1)cout p_Word; while (wordcheck = 1);p_Length=p_Word.length();return 1;int CGuess:RndWord()cout 人机对战endl;cout * endl endl;cout猜词机会:p_GuessNumendl;cout显示字母:p_Proba%endl;int x;/ 记录随机数的变量ifstream ins;/ 文件流srand(time(NULL);/ 根据时间得到一个随机数ins.open(words.txt);/ 打开文件if (ins.fail()/若找不到文件,处理cerr Words.txt不在相同目录下, endl 请放入正确文件再重启程序 endl;system(pause);return 0;elsex = rand()%10;/ 得到一个随机数 for (int i = 0; i (x+1); i+)getline(ins, p_Word);p_Length=p_Word.length();ins.clo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《成本规制管理办法》
- 2025年医保知识竞赛题库及答案(医保目录解读与医疗政策试题)
- 2024年医保政策培训试题及答案
- 2025年商务部国际贸易公务员招录考试模拟试题
- 2025静脉治疗技术试题及答案
- 呼吸危重症试题及答案
- 造口护理考试题及答案
- (2024)红十字初级急救员证考试题及答案
- 东北林业苗圃管理办法
- 2025年人力资源管理师PHR考试要点及模拟题集
- 2025年湖南水利水电职业技术学院单招职业技能测试题库附答案
- 第四章药品调剂质量控制第二节用药错误管理课件
- 幼儿园酸奶牛奶采购合同
- 高中化学拔尖创新人才早期培养路径
- 2025年四川宽窄实业有限责任公司招聘笔试参考题库含答案解析
- 《中药提取物生产技术》课件-中药常用的粉碎方法
- Unit 1 完形填空训练8篇-2023-2024学年英语八年级上册单元冲刺满分题型训练(人教版)
- DB32/T 1086-2022 高速公路建设项目档案管理规范(修订)
- 教师资格证《教育知识与能力》中学-必背知识点
- 配料保密协议
- 特种设备安全管理实施细则
评论
0/150
提交评论