收藏 分销(赏)

C++猜单词课程设计——猜单词游戏.doc

上传人:二*** 文档编号:4518320 上传时间:2024-09-26 格式:DOC 页数:34 大小:2.99MB
下载 相关 举报
C++猜单词课程设计——猜单词游戏.doc_第1页
第1页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、C+猜单词课程设计猜单词游戏(完整版)(文档可以直接使用,也可根据实际需要修改使用,可编辑 欢迎下载)VC+课程设计报告 猜单词游戏 VC+课程设计报告1 功能: 课程设计题目的功能:一个猜单词游戏。两人游戏时,由一个玩家给出一个单词,在人与计算机游戏时,由计算机给出一个单词,另一个玩家根据组成单词的字母个数猜出单词,猜的次数可以指定,若猜不中,显示一个上吊的人形。(1) 将猜单词的函数与相应的数据封装到类中,并改写主程序,使程序简化。(2) 根据所猜单词的字母个数,给出指定几率的提示字母,显示于单词中的正确位置。(3) 在进入猜单词的过程后,首先显示菜单询问是开始猜单词还是修改设置,默认的修

2、改次数为4,默认显示字符的几率为20%,若要修改这个设置,在显示菜单中选择设置选项进行修改。(4) 在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上,字符用“*”显示。(5) 猜单词时,输入一个单词,判断函数改为判断输入单词的字符是否与所猜单词一一对应,将猜中的字符显示出来。(6) 在人机对抗时,可以随机读取单词,也可以选择向单词库输入单词,同时,将单词库中单词的个数显示出来,并根据单词库中单词个数的多少决定随机选取的范围。 程序设计的思想和方法(1) 类的封装画上吊人形的类已经封装起来,这部分程序基本不用改了,主要是对人人对抗和人及对抗操作部分类的封装。可以定义一个类的两个对象,也可以定

3、义为一个基本类和一个派生类的对象,成员函数可根据对象的不同分别调用,数据结构如下:Class CGuessprivate:string Word; /欲猜的单词double Proba; /显示字符的概率01int GuessNum;/总共可猜的次数int WrongNum;/猜错的次数string DisplayWord;/欲显示的单词string GuessWord;/第二个玩家输入猜想的单词int nLen;/输入单词的长度public:CGuess();/构造函数void InitialSet();/修改设置值void InputWord();/输入单词并初始化成员函数void Inp

4、utGuess();/接收用户所猜的单词int Judge();/判断是否猜中,猜中返回0,猜不中返回1或-(death)int ShowDisplay();/显示单词及上吊人形,程序结束返回1int OpenWordFile();/打开单词库,随机取出一个单词赋给Word,成功返回1int SaveWordFile();/向单词库输入新单词,正确返回1(2) 程序主体结构的设置该设置基本上全部修改了原程序的结构,在main函数中分别定义人人对抗和人机对抗的对象。在键入对应的菜单选项后,进入操作函数,操作函数的参数即是对应对象的引用。同样,若有下级菜单的函数一样用该对象的引用参数,这样,可保证

5、对象的唯一性。主菜单:1. 人人对抗(以人人对抗对象的引用作为参数调用子程序)2. 人机对抗(以人机对抗对象的引用作为参数调用子程序)人人对抗菜单1. 开始猜单词2. 设置系统(即设置显示字符的概率和允许猜错的次数)3. 退出人机对抗1 开始猜单词2 设置系统(即设置显示字符的概率和允许猜错的次数)3 向单词库中添加单词4 退出(3) 人人对抗时输入欲猜单词的隐藏一个玩家给出单词时,单词不显示在屏幕上,字符用“*”号显示。本程序在基础上还要有些限制条件,就是接收的字符必须是字母,当字幕为大写时还要转化为小写。如果输入的不是字母要提示重新输入。(4) C+用于处理字符串变量的新的数据类型字符串类

6、型(string类型)在原程序字符串的操作中用了一种新的数据类型String,该类型是一个字符串类,可以定义对象。它在使用方法上和char,int类型一样,可以用来定义字符串变量,即用一个名字代表一个字符序列。程序设计的特点(1) 增设了单词库,并且输入50个单词,以便使用。(2) 人人对抗和人机对抗时显示是否有重复字母2 课程设计的详细设计:主菜单人人对抗人机对抗退出开始猜单词退出开始猜单词设置系统设置系统退出向单词库中添加单词程序主体结构图如下:程序详细结构:1.主菜单程序:void CGuess:GetChoice()coutendlendlendl;cout 猜单词游戏 endl en

7、dl;cout 制 刘健莹 endl endl; cout * endl;cout endl;cout 按1 人人对抗模式 endl;cout 按2 人机对抗模式 endl;cout 按3 退出 endl;cout endl;cout * endl endl;coutChoice;/ 得到用户选择while (!cin|Choice 3)/ 简查是否无效 cout 无效输入 endl Choice;/ 完成简查, 得到有效输入,m_Choice变量的值被修改,清屏system(cls);2.子菜单程序:int CGuess:InitialSet()int exit=0;if(Choice=1)

8、cout 人人对抗endl; cout * endl; cout按1开始玩游戏endl;cout按2修改设置值endl;cout按3退出endl;coutendl;cout*endl;cout 你的选择:endlChoice2; else cout 人机对抗endl;cout * endl; cout按1开始玩游戏endl;cout按2修改设置值endl;cout按3向单词库输入单词endl;cout按4退出endl;coutendl;cout * endl;cout 你的选择:endlChoice2; while(!cin|Choice2 4) cout 无效输入 endl Choice2;

9、 system(cls); if(Choice2=1) coutGuessNumendl; if(Choice2=2)coutGuessNum;/输入猜词次数while (!cin|GuessNum 10)cout 无效输入 endlGuessNum; while(!cin|Choice2 4) cout 无效输入 endl Choice2; system(cls); if(Choice2=1) coutProbaendl; if(Choice2=2)coutProba;/输入显示字母百分数while (!cin|Proba 80)cout 无效输入 endlProba; if(Choice2

10、=3) if(Choice=1) exit=1; else SaveWordFile(); InitialSet(); if(Choice2=4) exit=1; return exit;3.修改默认设置程序: if(Choice2=1) coutGuessNumendl; if(Choice2=2)coutGuessNum;/输入猜词次数while (!cin|GuessNum 10)cout 无效输入 endlGuessNum; while(!cin|Choice2 4) cout 无效输入 endl Choice2; system(cls); if(Choice2=1) coutProb

11、aendl; if(Choice2=2)coutProba;/输入显示字母百分数while (!cin|Proba 80)cout 无效输入 endlProba;4.默认的游戏设置程序:Proba=20;/显示单词字母个数百分比GuessNum=4;/玩家猜词的机会5.将单词输入进单词库中的函数:void GuessGame:saveWordFile() int n=50,i,j; ofstream out; out.open(words.txt); if(!out) cout不能打开单词库endl; cout单词库中有50个单词endl; cout向单词库中输入多少个单词j; cout请向单

12、词库中输入j个单词endl;for ( i = 0; i j; i+) string word; / 输入单词getline(cin,word); n=n+1; out word; cout单词库中有n个单词endl; out.close();6.显示猜对的单词:void GuessGame:test(string word, char letter, int& numwrong, string& temp)static int m;int check2 = 0;/ 判断输入的字符是否为组成单词的字符,正确为1if (letter = word.at(m) /若单词中有这一个字符temp.re

13、place(m, 1, 1, letter);check2 = 1;if (check2 = 0) /若单词中没有这一个字符cout endl;cout Wrong letter endl;system(pause);numwrong+;if(m(word.length()-1)m+;else m=0;7.输出给定几率的字母:for (i = word.length() * Proba; i word.length(); i+)temp.replace(i, 1, 1,*); 8.游戏程序主体运行:int CGuess:Run()int exit = 0;/主循环是否退出的变量,1时退出do

14、/主循环system(cls);/ 执行系统命令清屏GetChoice();/ 给出说明并得到选择switch(Choice)case 1:Game();/ 与人对战break;case 2: Game();/ 与电脑对战break;case 3:cout 再见 endlendl;/ 退出exit = 1;break;default:cout 无效输入 - 请再输入 endl; / 无效输入 while (exit != 1);/退出主循环system(pause);/ 执行系统命令:暂停return 0;9.在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上,字符用“*”号显示。#defi

15、ne N 13 /为任意一个字符(包括空白字符)的ASC|码值void CGuess:password() char str20;char ch;int i=0,a=0,j=0;string word,Word,worD;cout请第二位玩家输入单词: =97&stri=122)cout=65&stri=90)stri=stri+32;j+;cout*;cout.flush();ch=getch();else if(stri=90&stri=112) cout*;cout.flush();ch=getch(); i+;a=j;for(i=0;ia;i+)word.replace(i, 1, 1

16、, stri);Word=word;word=worD; int wordcheck;do / 检查用户输入单词是否有误wordcheck = 0;for (int i = 0; i Word.length(); i+)if (!isalpha(Word.at(i)/isalpha();word.at();wordcheck = 1;if (wordcheck = 1)cout 无效 - 请第二位玩家重新输入: ;password();Word=word;word=worD; while (wordcheck = 1);w=ch; int CGuess:UserWord() cout 人人对战

17、endl;cout - endl endl;cout 猜词机会:GuessNumendl;cout 显示字母:Proba%endl; password();Length=Word.length();return 1;10.主体的类的定义class CGuessprivate:string Word,word,worD;/要猜的单词string DisplayWord;/用户所见的单词char*pWord1;char*pWord2; int Proba;/显示单词字母个数百分比int GuessNum;/玩家猜词的机会int WrongNum;/玩家猜错的次数intChosenCounter;/

18、玩家猜过的字母个数stringLetterChosen;/玩家已经猜过的字母intChoice;/玩家的选择intShowNum;/显示字母个数int Length;/所猜单词的长度intLetterNum;/单词中的字母个数inti;/循环的记数变量,使每次游戏都不一样intCheck;/用户输入字母是否正确int Choice2;int w; public:CGuess();intInitialSet();intSaveWordFile();intUserWord();/玩家出词intRndWord();/电脑出词voidReplaceWord();voidisChosen(char);v

19、oidJudge(char);intRun();/运行voidGetChoice();/得到选择voidGame();/游戏主要函数void Set(); /设置 void password();3 调试程序的过程:1 主函数若出现在前面,应将其他函数先定义,或将主函数后置。2 在程序开头须将所用函数的文件包含,否则函数不得使用。3 人人对抗时,输入单词未显示*,应先设置显示部分,然后输入单词。4 当使用getch()时,应先加头文件conic.h,否则无法使用。5 人机对抗程序会出现不出现单词,直接显示猜词正确,随机函数rand()应除50求余。6 保密部分无法识别大小写,用ASCII码将大

20、写字母转化为小写字母。7 人人对抗过程中输入单词,输出*,但是无论退格还是回车都输出*,在保密函数中没有设置输入回车或空格就跳出函数的部分。8 运用保密函数时出现输出无效输入。9 人人对抗中输入单词后显示*,但是单词没有返回原程序,造成没有猜单词的过程,只有最后结果“恭喜你,猜对了!”10 人机对抗无法找到words.txt文件,需要先将words文档转化为文件格式,才能应用。4 输入输出数据:以人人对抗模式输入love为例:1.运行程序,出现主菜单,输入12,.出现人人对抗模式菜单栏,输入23.修改默认设置4.第二个玩家输入单词love5.出现猜单词程序6.输出上吊人形7.出现正确答案附:猜

21、单词过程:正确输入错误输入向单词库中输入单词:5 课程设计总结:通过这次课程设计,我懂得了如何将所学的知识运用起来,与实际相结合,也让我能够在以后的学习中能够想有所学,学有所用,多多联系实际,用知识帮助他人。课程设计中,我掌握了类的定义和调用,数组的运用,菜单栏的设置等等,同时,程序设计过程中,懂得了如何将不会的知识学会,如何将会的知识灵活熟练地应用,也懂得了以后的学习也要勤动脑思考,把知识转化为自己的,提高了自己的创新能力,动手能力,思考能力,为我今后的学习打下良好的基础。6. 程序源代码附录#include / 标准输入输出cin;cout#include / 字符串处理string.le

22、ngth();at();#include / 字符处理和检测#include / 文件流#include / 使用随机函数用#include / 得到更好的随机数用#include / draw类定义#ifndef DRAW_H/ 检测是否已经包含#define DRAW_Hclass drawpublic:draw();/ 构造函数/ 成员函数 void rope(); / 绳子void head();/ 头void neck();/ 颈void leftarm();/ 左臂 void rightarm();/ 右臂void waisttop();/ 腰void leftleg(); / 左

23、腿void rightleg();/ 右腿; #endif#ifndef GUESS_H#defineGUESS_Husing namespace std;/程序类定义class CGuessprivate:string Word,word,worD;/要猜的单词string DisplayWord;/用户所见的单词char*pWord1;char*pWord2; int Proba;/显示单词字母个数百分比int GuessNum;/玩家猜词的机会int WrongNum;/玩家猜错的次数intChosenCounter;/玩家猜过的字母个数stringLetterChosen;/玩家已经猜

24、过的字母intChoice;/玩家的选择intShowNum;/显示字母个数int Length;/所猜单词的长度intLetterNum;/单词中的字母个数inti;/循环的记数变量,使每次游戏都不一样intCheck;/用户输入字母是否正确int Choice2; public:CGuess();voidInitialSet();intSaveWordFile();intUserWord();/玩家出词intRndWord();/电脑出词voidReplaceWord();voidisChosen(char);voidJudge(char);intRun();/运行voidGetChoic

25、e();/得到选择voidGame();/游戏主要函数void Set(); /设置 void password();#endifusing namespace std; / 用名字空间std /构造函数draw:draw()void draw:rope() / 输出上吊绳cout |; void draw:head() /头cout O;void draw:neck()/颈cout |; void draw:leftarm()/左臂cout /; void draw:rightarm()/右臂cout ; void draw:waisttop()/腰cout ; void draw:left

26、leg()/左腿cout /; void draw:rightleg()/右腿cout in_avail();return stream.ignore(chars_to_skip);/根据设置的次数和实际猜错的次数画上吊人形void drawman(int numguess, int numwrong, int i)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;

27、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;ca

28、se 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;c

29、ase 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

30、.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)

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服