模拟猜单词游戏
来源:互联网 发布:苹果手机开通4g网络 编辑:程序博客网 时间:2024/05/17 23:23
模拟实现猜单词游戏,纯模拟,不涉及图形界面,注释很详细,虽然本人代码写得丑,但是希望可以给大家提供帮助
#include<algorithm>#include<cstdlib>#include<cstring>#include<fstream>#include<ctime>#include<cmath>#include<iomanip>#include<windows.h>using namespace std;int times=10;//全局变量,默认猜测次数typedef struct save{char word[30];//存储单个单词}save;save a[100];//存储所有读入单词,最多100个typedef struct rank{int mc;//名次char name[20];//姓名double grade;//成绩char tmp[64];//创造纪录日期}rank;rank board[3];//排行榜,保存前三名//函数声明int readword();//从硬盘读入单词void readrank();//读入成绩记录void caidan();//打印菜单void setting();//菜单1设置猜测次数限制void toprecord();//打印排行榜void record();//将board排行写入硬盘void playgame(int n);//菜单0进行游戏int main(){system("color f0");int n;//存储单词总数,便于play随机选择单词编号printf(" 欢迎进入游戏!\n");n=readword();readrank();//读入成绩记录while(1){ int t;system("cls");//保持界面整洁caidan();scanf("%d",&t);switch(t){case 0:{playgame(n);break;}case 1:{setting();break;}case 2:{system("cls"); toprecord();printf(" ");system("pause");//暂停break;}case 3:{record();//退出之前将board中的数据写入硬盘printf(" *************大侠再见*************\n ");exit(0);}}}return 0;}int readword()//从硬盘读入单词{char character;//存储单个读入字符int i=0,j=0;//循环变量ifstream ifile("word.txt");//文件流if(!ifile){printf(" word.txt 不能打开!\n");return 0;}while(ifile.get(character))//将文件中的字符读入save结构体中,用于playgame随机选择{if(character!=' '){a[i].word[j]=character;j++;}else{i++;j=0;}}ifile.close();return i;//返回读入单词数}void readrank()//从硬盘读入排名{char character;//存储单个读入字符char temp[100];//临时将一行排名的所有信息存入,等待处理int i=0,j=0,k,l;//循环变量double xiaoshu;//处理temp[100]中成绩的小数ifstream ifile("rank.txt");//文件流if(!ifile){printf(" rank.txt 不能打开!\n");return;}while(ifile.get(character))//将文件中的字符按行读入到temp字符串中{if(character!=10){temp[i]=character;i++;}else{board[j].mc=(temp[0]-48);//读完一行对temp进行处理,将字符串转换为纪录的信息存储到board中for(k=2;temp[k]!=' ';k++){board[j].name[k-2]=temp[k];}k++;for(;k<i;k++){if(temp[k]=='.'){for(l=k-1;temp[l]!=' ';l--)//字符串转换成小数board[j].grade=((temp[l]-48)*pow(10,k-1-l));xiaoshu=((temp[k+1]-48)*0.1+(temp[k+2]-48)*0.01+(temp[k+3]-48)*0.001);board[j].grade+=xiaoshu;break;}}for(l=k+5;l<=(k+23);l++)board[j].tmp[l-k-5]=temp[l];//日期j++;i=0;}}ifile.close();}void caidan()//打印菜单{int i;printf(" ");//打印图形界面for(i=0;i<34;i++)printf("*");printf("\n");printf(" * *\n");printf(" * 菜单 *\n");printf(" * 0 Playing Game *\n");printf(" * 1 Setting *\n");printf(" * 2 Top Records *\n");printf(" * 3 Exit *\n");printf(" * *\n");printf(" ");for(i=0;i<34;i++)printf("*");printf("\n");printf(" ***********输入选项编号***********\n");printf(" ");}void setting()//菜单1设置猜测次数限制{printf(" **********请设置猜测次数**********\n");printf(" ");scanf("%d",×);}void toprecord()//打印排行榜{int i;//循环变量printf("\n\n ");//打印图形界面for(i=0;i<59;i++)printf("*");printf("\n");printf(" * *\n");printf(" * 大侠榜 *\n");for(i=0;i<3;i++){if (board[i].grade==0){ printf(" * %d %-10s %-8.3f",board[i].mc,board[i].name,board[i].grade); printf(" 0000/00/00 00:00:00 *\n");}else{ printf(" * %d %-10s %-8.3f %s",board[i].mc,board[i].name,board[i].grade,board[i].tmp); printf(" *\n");}}printf(" * *\n"); printf(" ");for(i=0;i<59;i++)printf("*");printf("\n\n\n");}void record()//将board排行写入硬盘{int i;//循环变量 ofstream ofile("rank.txt");//文件流if(!ofile){printf(" rank.txt 不能打开\n");}else{for(i=0;i<3;i++)//把board中的信息写入硬盘{ofile<<board[i].mc<<" "<<board[i].name<<" "<<fixed<<setprecision(3)<<board[i].grade<<" "<<board[i].tmp<<endl;}}}void playgame(int n)//菜单0进行游戏{int i,j;//i,j用于循环int flag;//flag标记是否猜对字母int temp;//存储随机单词编号int len;//所猜单词长度int correct,wrong;//统计对与错的次数char ch[30];//所猜单词char guess;//所猜字母char tt='Y';//是否继续猜double grade;//记录成绩char compare[50];//和原来单词对比while((tt=='Y')||(tt=='y'))//t为1是继续猜{ printf(" *************游戏开始*************\n");correct=0;wrong=0;//每次猜之前初始化对与错的次数srand((unsigned)time(NULL));temp=rand()%(n+1);//取随机值strcpy(ch,a[temp].word);len=strlen(ch);memset(compare,'-',sizeof(ch)+1);//初始化字符串为“-”printf(" ");for(j=0;j<len;j++)printf("-");printf("\n");for(i=0;i<times;i++)//未达次数限制循环猜测{flag=0;printf(" ");scanf("%s",&guess);for(j=0;j<len;j++){if(guess==ch[j]){compare[j]=guess;flag=1;}if(ch[j]==(guess+32)){compare[j]=(guess+32);flag=1;}}if(flag)//flag为1,猜测正确{ printf(" 猜测正确,还有%d次机会\n",times-i-1); printf(" ");for(j=0;j<len;j++)//输出已猜到的位置和对应字母printf("%c",compare[j]);printf("\n"); for(j=0;j<len;j++)//检验字母是否全部猜出if(compare[j]=='-')break;if(j==len)//字母全部猜出{ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED);printf(" 大侠你好厉害!\n");//输出颜色变为红色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);//输出变为原来颜色break;}}else{printf(" 猜测错误,还有%d次机会\n",times-i-1);wrong++;}}for(j=0;j<len;j++)//与正确答案对比if(compare[j]=='-')break;if(j>=len)correct=(i+1-wrong);//正确次数不方便直接统计,故用总数减错误次数elsecorrect=(i-wrong);printf(" 本轮结束!正确次数:%d 错误次数:%d\n",correct,wrong);if(i==times)//只有在最后一轮猜错的情况下才会满足此判断条件printf(" 胜败乃兵家常事,大侠请重新来过!\n");else{grade=(i+1.0)/len;printf(" 你的成绩为%.3f\n",grade);time_t t = time( 0 ); //获取造纪录时间char tmp[64];//存储时间strftime( tmp, sizeof(tmp), "%Y/%m/%d %X",localtime(&t) );if(grade<board[2].grade||board[2].grade==0)//board排行榜的更新{ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |FOREGROUND_RED);printf(" 恭喜您进入大侠榜,请输入您的姓名:\n ");//输出变为红色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);//输出还原if(grade<board[1].grade||board[1].grade==0)//个数较少,手工更新排行榜if(grade<board[0].grade||board[0].grade==0){board[2]=board[1];board[1]=board[0];board[0].grade=grade;scanf("%s",&board[0].name);strcpy(board[0].tmp,tmp);}else{board[2]=board[1];board[1].grade=grade;scanf("%s",&board[1].name);strcpy(board[1].tmp,tmp);}else{board[2].grade=grade;scanf("%s",&board[2].name);strcpy(board[2].tmp,tmp);}board[0].mc=1;board[1].mc=2;board[2].mc=3;}}printf(" 是否继续?(Y/N)\n ");scanf("%s",&tt);system("cls");//清屏}}
0 0
- 模拟猜单词游戏
- 猜单词游戏
- 【c++】猜单词游戏
- 猜单词的游戏
- 猜单词游戏
- 单词游戏
- 单词游戏
- 模拟猜数字游戏
- Hangman Judge 刽子手游戏----(猜单词)
- [NOIP模拟赛]单词
- 【单词游戏】解题报告
- 7.9 单词游戏 搜索
- 单词搜索迷宫游戏
- Boggle单词游戏求解
- 单词玩游戏
- 洛谷 P1278 单词游戏
- 洛谷P1278 单词游戏
- P1278 单词游戏
- 如何在Zynq-7000上烧写PL Image
- 我的2014
- java之jvm学习笔记四(安全管理器)
- wxWidgets 学习笔记
- PHP批量发起呼叫--呼叫中心性能测试
- 模拟猜单词游戏
- 怎样学习C语言
- 牛人主页
- java之jvm学习笔记五(实践写自己的类装载器)
- 算法与数据结构面试题(19)-统计字符串中的字符个数
- Android系统的进程,任务,服务的信息
- java+mysql 链接 插入 删除 更新
- Quartz 定时任务
- Sublime 3 破解 + emmet插件包安装 亲身安装测试