c++猜单词课程设计猜单词游戏Word下载.docx
- 文档编号:19835226
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:44
- 大小:2.19MB
c++猜单词课程设计猜单词游戏Word下载.docx
《c++猜单词课程设计猜单词游戏Word下载.docx》由会员分享,可在线阅读,更多相关《c++猜单词课程设计猜单词游戏Word下载.docx(44页珍藏版)》请在冰豆网上搜索。
intJudge();
//判断是否猜中,猜中返回0,猜不中返回1或-(death)
intShowDisplay();
//显示单词及上吊人形,程序结束返回1
intOpenWordFile();
//打开单词库,随机取出一个单词赋给Word,成功返回1
intSaveWordFile();
//向单词库输入新单词,正确返回1
(2)程序主体结构的设置
该设置基本上全部修改了原程序的结构,在main函数中分别定义人人对抗和人机对抗的对象。
在键入对应的菜单选项后,进入操作函数,操作函数的参数即是对应对象的引用。
同样,若有下级菜单的函数一样用该对象的引用参数,这样,可保证对象的唯一性。
主菜单:
1.人人对抗(以人人对抗对象的引用作为参数调用子程序)
2.人机对抗(以人机对抗对象的引用作为参数调用子程序)
人人对抗菜单
1.开始猜单词
2.设置系统(即设置显示字符的概率和允许猜错的次数)
3.退出
人机对抗
1.开始猜单词
2.设置系统(即设置显示字符的概率和允许猜错的次数)
3.向单词库中添加单词
4.退出
(3)人人对抗时输入欲猜单词的隐藏
一个玩家给出单词时,单词不显示在屏幕上,字符用“*”号显示。
本程序在基础上还要有些限制条件,就是接收的字符必须是字母,当字幕为大写时还要转化为小写。
如果输入的不是字母要提示重新输入。
(4)C++用于处理字符串变量的新的数据类型——字符串类型(string类型)
在原程序字符串的操作中用了一种新的数据类型——String,该类型是一个字符串类,可以定义对象。
它在使用方法上和char,int类型一样,可以用来定义字符串变量,即用一个名字代表一个字符序列。
程序设计的特点
(1)增设了单词库,并且输入50个单词,以便使用。
(2)人人对抗和人机对抗时显示是否有重复字母
2.课程设计的详细设计:
程序主体结构图如下:
程序详细结构:
1.主菜单程序:
voidCGuess:
:
GetChoice(){
cout<
<
endl<
endl;
cout<
"
猜单词游戏"
<
endl<
endl;
"
制刘健莹"
cout<
***********************************************************"
按1人人对抗模式"
按2人机对抗模式"
按3退出"
请您选择:
;
cin>
>
Choice;
//得到用户选择
while(!
cin||Choice<
1||Choice>
3)//简查是否无效
{
无效输入"
endl
<
请再输入:
Flush(cin);
cin>
}//完成简查,得到有效输入,m_Choice变量的值被修改,清屏
system("
cls"
);
}
2.子菜单程序:
intCGuess:
InitialSet()
intexit=0;
if(Choice==1)
cout<
人人对抗"
按1开始玩游戏"
按2修改设置值"
按3退出"
*************************************************************"
你的选择:
Choice2;
}
else
人机对抗"
按3向单词库输入单词"
按4退出"
while(!
cin||Choice2<
1||Choice2>
4)
if(Choice2==1)cout<
GuessNum<
if(Choice2==2){
你要几次猜词机会(4-10):
GuessNum;
//输入猜词次数
cin||GuessNum<
4||GuessNum>
10)
endl
请再输入-你要几次猜词机会(4-10):
cin>
Proba<
你要百分之几的字母显示出来(10-80):
Proba;
//输入显示字母百分数
cin||Proba<
10||Proba>
80)
请再输入-你要百分之几的字母显示出来(10-80):
if(Choice2==3)
if(Choice==1)
{
exit=1;
}
else
SaveWordFile();
InitialSet();
if(Choice2==4)
exit=1;
returnexit;
}3.修改默认设置程序:
4.默认的游戏设置程序:
Proba=20;
//显示单词字母个数百分比
GuessNum=4;
//玩家猜词的机会
5.将单词输入进单词库中的函数:
voidGuessGame:
saveWordFile()
intn=50,i,j;
ofstreamout;
out.open("
words.txt"
if(!
out)
不能打开单词库"
单词库中有50个单词"
向单词库中输入多少个单词"
j;
请向单词库中输入"
j<
个单词"
for(i=0;
i<
j;
i++)
{stringword;
//输入单词
getline(cin,word);
n=n+1;
out<
word;
单词库中有"
n<
out.close();
6.显示猜对的单词:
test(stringword,charletter,int&
numwrong,string&
temp)
staticintm;
intcheck2=0;
//判断输入的字符是否为组成单词的字符,正确为1
if(letter==word.at(m))//若单词中有这一个字符
temp.replace(m,1,1,letter);
check2=1;
if(check2==0)//若单词中没有这一个字符
Wrongletter"
system("
pause"
numwrong++;
if(m<
(word.length()-1)){m++;
elsem=0;
7.输出给定几率的字母:
for(i=word.length()*Proba;
word.length();
temp.replace(i,1,1,'
*'
8.游戏程序主体运行:
Run(){
intexit=0;
//主循环是否退出的变量,1时退出
do{//主循环
//执行系统命令清屏
GetChoice();
//给出说明并得到选择
switch(Choice)
case1:
Game();
//与人对战
break;
case2:
//与电脑对战
case3:
cout<
再见"
endl<
//退出
exit=1;
default:
无效输入-请再输入"
//无效输入
}while(exit!
=1);
//退出主循环
//执行系统命令:
暂停
return0;
}9.在人人对抗时,一个玩家给出单词时,单词不显示在屏幕上,字符用“*”号显示。
#defineN13//为任意一个字符(包括空白字符)的ASC||码值
password()
{
charstr[20];
charch;
inti=0,a=0,j=0;
stringword,Word,worD;
请第二位玩家输入单词:
cout.flush();
//请输出缓冲区
ch=getch();
while(ch!
=13)
str[i]=ch;
if(str[i]>
=97&
&
str[i]<
=122)
'
j++;
cout.flush();
ch=getch();
elseif(str[i]>
=65&
=90)
str[i]=str[i]+32;
elseif(str[i]<
=65||(str[i]>
=90&
=97)||str[i]>
=112)
*"
i++;
}a=j;
for(i=0;
i<
a;
i++)
word.replace(i,1,1,str[i]);
Word=word;
word=worD;
intwordcheck;
do{//检查用户输入单词是否有误
wordcheck=0;
for(inti=0;
Word.length();
i++)
if(!
isalpha(Word.at(i)))//isalpha();
word.at();
{
wordcheck=1;
}
if(wordcheck==1){
无效-请第二位玩家重新输入:
password();
Word=word;
}while(wordcheck==1);
w=ch;
UserWord()
人人对战"
---------------------------------------"
猜词机会:
显示字母:
%'
password();
Length=Word.length();
return1;
10.主体的类的定义
classCGuess{
private:
stringWord,word,worD;
//要猜的单词
stringDisplayWord;
//用户所见的单词
char*pWord1;
char*pWord2;
intProba;
intGuessNum;
intWrongNum;
//玩家猜错的次数
intChosenCounter;
//玩家猜过的字母个数
stringLetterChosen;
//玩家已经猜过的字母
intChoice;
//玩家的选择
intShowNum;
//显示字母个数
intLength;
//所猜单词的长度
intLetterNum;
//单词中的字母个数
inti;
//循环的记数变量,使每次游戏都不一样
intCheck;
//用户输入字母是否正确
intChoice2;
intw;
public:
CGuess();
intInitialSet();
intSaveWordFile();
intUserWord();
//玩家出词
intRndWord();
//电脑出词
voidReplaceWord();
voidisChosen(char);
voidJudge(char);
intRun();
//运行
voidGetChoice();
//得到选择
voidGame();
//游戏主要函数
voidSet();
//设置
voidpassword();
};
3.调试程序的过程:
1.主函数若出现在前面,应将其他函数先定义,或将主函数后置。
2.在程序开头须将所用函数的文件包含,否则函数不得使用。
3.人人对抗时,输入单词未显示*,应先设置显示部分,然后输入单词。
4.当使用getch()时,应先加头文件conic.h,否则无法使用。
5.人机对抗程序会出现不出现单词,直接显示猜词正确,随机函数rand()应除50求余。
6.保密部分无法识别大小写,用ASCII码将大写字母转化为小写字母。
7.人人对抗过程中输入单词,输出*,但是无论退格还是回车都输出*,在保密函数中没有设置输入回车或空格就跳出函数的部分。
8.运用保密函数时出现输出无效输入。
9.人人对抗中输入单词后显示*,但是单词没有返回原程序,造成没有猜单词的过程,只有最后结果“恭喜你,猜对了!
”
10.人机对抗无法找到words..txt文件,需要先将words文档转化为文件格式,才能应用。
4.输入输出数据:
以人人对抗模式输入love为例:
1.运行程序,出现主菜单,输入1
2,.出现人人对抗模式菜单栏,输入2
3.修改默认设置
4.第二个玩家输入单词love
5.出现猜单词程序
6.输出上吊人形
7.出现正确答案
附:
猜单词过程:
正确输入
错误输入
向单词库中输入单词:
5.课程设计总结:
通过这次课程设计,我懂得了如何将所学的知识运用起来,与实际相结合,也让我能够在以后的学习中能够想有所学,学有所用,多多联系实际,用知识帮助他人。
课程设计中,我掌握了类的定义和调用,数组的运用,菜单栏的设置等等,同时,程序设计过程中,懂得了如何将不会的知识学会,如何将会的知识灵活熟练地应用,也懂得了以后的学习也要勤动脑思考,把知识转化为自己的,提高了自己的创新能力,动手能力,思考能力,为我今后的学习打下良好的基础。
6.程序源代码附录
#include<
iostream>
//标准输入输出[cin;
cout]
string>
//字符串处理[string.length();
at();
]
cctype>
//字符处理和检测
fstream>
//文件流
cstdlib>
//使用随机函数用
time.h>
//得到更好的随机数用
conio.h>
//draw类定义
#ifndefDRAW_H//检测是否已经包含
#defineDRAW_H
classdraw
draw();
//构造函数
//成员函数
voidrope();
//绳子
voidhead();
//头
voidneck();
//颈
voidleftarm();
//左臂
voidrightarm();
//右臂
voidwaisttop();
//腰
voidleftleg();
//左腿
voidrightleg()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 单词 课程设计 游戏