程序设计猜单词汇总.docx
- 文档编号:10045739
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:21
- 大小:262.96KB
程序设计猜单词汇总.docx
《程序设计猜单词汇总.docx》由会员分享,可在线阅读,更多相关《程序设计猜单词汇总.docx(21页珍藏版)》请在冰点文库上搜索。
程序设计猜单词汇总
程序设计报告
(2014/15学年第一学期)
题目:
猜字游戏
专业
组长学号姓名
组员学号姓名
指导教师
指导单位
日期
成员分工
组长()
调试程序
程序代码(选择等级的功能、记录排名的功能)
组员()
编辑报告
程序报告(实现进行游戏的功能、显示菜单的功能)
组员()
评分细则
评分项
优秀
良好
中等
差
遵守机房规章制度
上机时的表现
学习态度
程序准备情况
程序设计能力
团队合作精神
课题功能实现情况
算法设计合理性
用户界面设计
报告书写认真程度
内容详实程度
文字表达熟练程度
回答问题准确度
简短评语
教师签名:
年月日
评分等级
备注
评分等级共五种:
优秀、良好、中等、及格、不及格
猜单词
一、课题内容和要求
这是一个简单的智力游戏,游戏者每次只能猜一个字母,如果游戏者猜的字母在单词中,单词中所有的该字母将被视为已猜出,例如:
如果原单词是apple,游戏者猜出了p,则程序应显示当前猜出的残缺单词为-pp--;设置选择时间限制或猜错次数限制,超过限制则游戏失败。
1-5个字母为初级;5-9个字母为中级;10个字母以上为高级,猜错次数限制自定。
1.设计游戏者信息格式,记录用户名、成绩,并保存,下次开始时可选择用户继续游戏,用户信息存放
2.在user.txt中。
建立积分排行榜,保留不同级别前五名的成绩。
3.根据单词长度设置不同级别的游戏。
4.游戏过程中,猜错的字母将被记录下来,每次猜测后,游戏应显示出当前猜出的残缺单词,以及当前猜错的所有字母,和剩下的机会。
5.提供相应安全机制,保证程序的健壮性,如选择单词长度时,应避免非数字字符的输入造成程序出错等。
6.提供选择一次求助机会。
如显示单词一秒钟,或给出指定位置上的一个字母
二、需求分析
功能框架图如图1所示。
图1功能框架图
(1)新游戏:
提供进入游戏的功能。
(3)排行:
提供建立成绩积分表,保留不同级别前五名成绩的功能。
(3)设置:
提供选择猜测次数和难度等级的功能。
(4)帮助:
提供游戏说明的功能。
(5)退出:
提供退出游戏的功能。
三、概要设计
1主要结构体
typedefstructPlayer
{
intranker;
charname[20];//玩家姓名
intright;//猜对的字母
intwrong;//猜错的字幕
inttime;//猜单词的时间
}Player;
2主要函数流程图
用VoidPlayGame()作为主体来进行游戏。
如图2
图2函数结构图
四、源程序代码
#include
#include
#include
#include
#include
intrank=7,tot=0,guesstime=10;
doublestart_time,end_time;
typedefstructPlayer
{
intranker;
charname[20];
intright;
intwrong;
inttime;
}Player;
Playerp[5]={{1,"unknown",0,0,0},{2,"unknown",0,0,0},{3,"unknown",0,0,0},{4,"unknown",0,0,0},{5,"unknown",0,0,0}};
Playertemp;
intright=0,wrong=0;
inttimes;
charwordlist[1000][20];
voidget_word();
voidchooose_len();
voidchoose_guesstime();
voidinput_name();
voidCompare();
voidRecord();
voidPlayGame();
voidMenu();
intmain(intargc,char*argv[])
{
get_word();
while
(1)//使得猜完单词或查看完排行榜后返回主菜单
{
Menu();
}
return0;
}
voidget_word()
{
FILE*fp;
if((fp=fopen("d:
//word.txt","r+"))==NULL)//读文件
{
printf("单词库无法打开!
\n");
exit(0);
}
else
{
while(fscanf(fp,"%s",wordlist[tot++])!
=EOF);
}
}
voidchooose_len()
{
ag:
printf("请选择最大单词长度:
(范围5-15)");
scanf("%d",&rank);
if(rank<1)gotoag;
}
voidchoose_guesstime()
{
printf("请输入你想猜的次数:
");
scanf("%d",&guesstime);
}
voidinput_name()
{
printf("请先输入您的大名:
");
scanf("%s",temp.name);
}
voidStartGame()
{
while
(1)
{
inti;
charplay;
printf("请输入你要猜的字母,每次一个,祝你好运哦!
\n");
PlayGame(wordlist);
temp.time=times;
temp.right=right;
temp.wrong=wrong;
Compare();
Record();
printf("是否再玩一次?
(Y/N)\n");
scanf("%c",&play);
if(play!
='n')
continue;
else
break;
printf("\n");
}
}
voidCompare()
{
inti;
for(i=0;i<6;i++)
{
if(temp.right>p[i].right)
{
strcpy(p[i].name,temp.name);
p[i].right=temp.right;
p[i].wrong=temp.wrong;
p[i].time=temp.time;
break;
}
}
}
voidRecord()
{
inti;
FILE*fp;
fp=fopen("d:
//record.txt","w+");
if(!
fp)
{
printf("游戏记录无法打开!
");
exit
(1);
}
fprintf(fp,"111名次\t姓名\t\t成绩:
猜对or猜错)\t时间(s)\n");
for(i=0;i<5;i++){
fprintf(fp,"%d\t%s\t\tRight:
%dWrong:
%d\t%d\n",i+1,p[i].name,p[i].right,p[i].wrong,p[i].time);
}
fclose(fp);
}
voidShow()
{
inti;
FILE*fp;
charous[200];
fp=fopen("d;//record.txt","r+");
if(!
fp)
{
printf("游戏记录无法打开!
\n");
exit
(1);
}
while(fgets(ous,256,fp))puts(ous);
fclose(fp);
}
voidPlayGame()
{
charguess;//存用户打入的字母
charplay;
charguessword[20],WrongGuess[20];
intc=1,l,j,f,k=0;
intq;
intx=0,t=0;
intflag=0;
while
(1)
{
guess=play=l=j=f=k=q=x=t=flag=0;
for(c=0;c<20;++c)
{
guessword[c]=WrongGuess[c]='\0';
}
c=1;
start_time=(double)clock()/CLOCKS_PER_SEC;//开始时间
ag2:
srand(time(NULL));
q=rand()%tot;
//printf("TheTrueLetteris%s\n",worldlist[q]);//查看程序随机选到的单词,调试时使用
l=strlen(wordlist[q]);
if(l>rank)gotoag2;
//求单词长
for(f=0;f guessword[l]='\0';//字符串结尾 printf("%s",guessword);//打印与词长相同的"-" for(k=1;k<=guesstime&&c! =0;)//判断是否猜完 { flag=0; printf("你有%d次机会! \n",guesstime-k+1); scanf("%c",&guess); for(j=0;j { if(guessword[j]=='-')//判断是否猜过这个字母 { if(wordlist[q][j]==guess||wordlist[q][j]-guess==-32)//如果单词中有这个字母 { guessword[j]=wordlist[q][j];//在空单词中打入这个字母 x++; flag=1; } } elseif(guessword[j]==guess||guessword[j]-guess==32)//如果猜过这个字母则提示(仅提示猜过的正确的字母) { printf("你已经输入过这个字母了.\n"); break; } } if(flag==0)//如果单词中没有这个字母 { WrongGuess[t]=guess; t++; k++; } printf("%s",guessword); c=strcmp(guessword,wordlist[q]); } if(c==0) { printf("你真聪明! 你猜出了这个单词! \n正确单词就是: %s",wordlist[q]); right++; } else { printf("你已经超过了规定的次数,你失败了! \n正确单词是: %s",wordlist[q]); wrong++; } printf("你猜对了%d个字母。 \n",x); printf("你猜错了%d个字母。 \n",k-1); WrongGuess[t]='\0'; printf("错误单词是%s\n",WrongGuess); end_time=(double)clock()/CLOCKS_PER_SEC; printf("Timeused=%.2lfs\n",end_time-start_time); printf("是否再玩一次? (y/n)\n"); scanf("%c",&play); if(play! ='n') continue; else exit(0); } } voidMenu() { intchoice; system("title猜字母游戏---Asmallgametoguessacertainword"); system("colorf2"); printf("\n"); printf("********************猜单词游戏********************\n"); printf("Asmallgametoguessacertainword.GoodLuck! \n"); printf("\n"); printf("**************************************\n"); printf(">>>>>>>>>>1.开始游戏<<<<<<<<<<\n"); printf(">>>>>>>>>>2.设置游戏<<<<<<<<<<\n"); printf(">>>>>>>>>>3.成绩排行<<<<<<<<<<\n"); printf(">>>>>>>>>>4.帮助<<<<<<<<<<\n"); printf(">>>>>>>>>>5.退出游戏<<<<<<<<<<\n"); printf("**************************************\n"); printf() printf("请输入你的选择: "); scanf("%d",&choice); while(choice<1||choice>5) { printf("Pleasechoice1--5again\n"); scanf("%d",&choice); } switch(choice)//选择 { case2: chooose_len(); case1: input_name(); StartGame();//调用游戏函数 break; case3: Show(); break; case4: printf("游戏规则: \n"); printf("这是一个简单的智力游戏,游戏者每次只能猜一个字母\n"); printf("如果游戏者猜的字母在单词中,单词中所有的该字母将被视为已猜出\n"); printf("例如: 如果原单词是apple,游戏者猜出了p,则程序应显示当前猜出的残缺单词为-pp--\n"); printf("设置选择时间限制或猜错次数限制,超过限制则游戏失败\n"); printf("1-5个字母为初级;5-9个字母为中级;10个字母以上为高级,猜错次数限制自定\n"); break; case5: printf("欢迎下次来玩\n"); exit(0); } } 五、测试数据及其结果分析 结果分析: 1)在输入菜单选项时如果输入的内容不是1-0之间的数字,而是其他数字,系统将继续执行等待下次正确的输入 2)要建立word还有record文件才可以正常运行。 六、调试过程中的问题 1)是时间函数的添加,先在没有猜之前提取一次时间,然后再在猜完之后提取一次时间然后,两次的时间差为猜单词所需要的时间。 一定要先定义doublestart_time,end_time; 然后才可以应用的,while (1) { guess=play=l=j=f=k=q=x=t=flag=0; for(c=0;c<20;++c) { guessword[c]=WrongGuess[c]='\0'; } c=1; start_time=(double)clock()/CLOCKS_PER_SEC;//开始时间 ag2: srand(time(NULL)); q=rand()%tot; //printf("TheTrueLetteris%s\n",worldlist[q]);//查看程序随机选到的单词,调试时使用 先提取开始的时间 l=strlen(wordlist[q]); printf("错误单词是%s\n",WrongGuess); end_time=(double)clock()/CLOCKS_PER_SEC; printf("Timeused=%.2lfs\n",end_time-start_time); printf("是否再玩一次? (y/n)\n"); scanf("%c",&play); if(play! ='n') continue; else exit(0); 然后再提取后来的时间 七、课程设计总结 21世纪是科技飞速发展的时代,而计算机技术的发展起到了决定性作用。 生活中的一切与计算机有着千丝万缕的联系。 也许是教室里老师必不可少的教学用具,也许是吃个饭都愿意揣着的通讯设备,也许是各式人看万千网络文件的智能神器。 21世纪时代发展是计算机技术发展的成果,一个美好的时代是计算机技术给我们最好的礼物。 所以组员们虽然不是计算机专业的学生,但是都必须进行这一次关于计算机程序设计的实习,这是学校为我们敞开的一次领悟计算机魅力的旅行。 在整个实习中,组员间相互分配任务,展开寻找实现各项功能程序代码的工作。 我们重新翻开c++课本,回忆,探索,思考,为了找到满意的代码而苦恼。 运行,更改,运行,更改,再运行,再更改,不希望看到error的心情到达极致,没有捷径来实现计算机程序苛刻的要求。 或许这是计算机给我们的警戒,我们享有的一切便利,背后都是所有密集的思考和创新。 其实在实践过程中,“原来如此啊”也许是最常印刻在心里的心情,原来如此啊,我们手上的高科技产品是这样的,原来如此啊,这些乱七八糟的代码都有他们存在的意义,原来如此啊,一整个程序也可能就败在一个小小的字符上。 总而言之,在完成这份报告时,以想努力克服的心态面对所有的不足,也希望两周的实践不会是学习计算机最后的步伐,希望会更好的学习计算机。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 单词 汇总