《程序设计课程设计》题目:《猜数字》游戏物联网工程学院计算机科学与技术专业学号:学生姓名:孙文佳班级:计科1305成绩:设计思路:猜数字是一个比较益智的游戏,游戏规则也很简单,真正自己实现游戏的运行也并不是什么难事,下面就主要讲讲自己的设计思路。
大的框架是把函数封装在类中,这样就可以应用所学的类。
首先是随机产生一个4位整数,根据要求,最高位不能为0,且每一位的数不能相同。
让系统随机产生4个个位数,这里就用到srand(time(NULL))获取系统的时间作为种子,防止每次运行的结果都是相同的。
time()函数包含在头文件time.h中。
用一个for语句,依次产生这四个数,因为要求最高位不能为0,这里就用一个while语句重新生成a[0],然后就是每位上的数不得相同,依然用while语句解决这个问题。
接着是提示用户输入一个四位数,把这个四位数各位上的数保存在数组b[4]中,然后就是比较b[4]和a[4],计算数字正确且位置正确的数的个数,还有数字正确但位置错误的数的个数(这应该是游戏的额核心),其实这一步也不难,就是利用一个for语句逐个比较b[j]与a[i],如果b[j]等于a[i],wrong++,然后判断i是否等于j,是的话right++,wrong--,如果猜了8次还不正确的话,提示用户是否继续,这里用一个switch语句就行了。
如果猜了15次还不正确的话,提示用户游戏失败,是否重新玩一局。
在此之前把这次的记录写入txt文件中,这里就用到c++的输入输出流,对于数据的保存只要学会格式,依葫芦画瓢即可。
还有就是数据的读取,在游戏结束时输出上一局的结果。
程序代码:#include<iostream>#include<time.h>#include<windows.h>#include<fstream>using namespace std;class game{public:void showfunction();void showfunction2();void target();void start();void tips();void selection();private:int a[4];};void gotoxy(int x, int y){HANDLE hCon;hCon = GetStdHandle(STD_OUTPUT_HANDLE);COORD setps;setps.X = x;setps.Y = y;SetConsoleCursorPosition(hCon,setps);}void data_load(){ifstream e;int count=0;int b[4],right,wrong;e.open("Data.txt",ios::binary|ios::in);if(e){e.seekg( (count++) * sizeof(int),ios::beg);e.read( (char *)&right,sizeof(int));e.seekg( (count++) * sizeof(int),ios::beg);e.read( (char *)&("A"),sizeof(int));e.seekg( (count++) * sizeof(int),ios::beg);e.read( (char *)&wrong,sizeof(sizeof(int)));e.seekg( (count++) * sizeof(int),ios::beg);e.read( (char *)&("B"),sizeof(int));cout<<"上一局结果是:"<<right<<"A"<<wrong<<"B"<<endl;}}void quit(){gotoxy(0,10);cout<<" "<<"* * * * * * * * * * * * * * * * * * * * * * *"<<endl;cout<<" "<<"* 正在退出游戏,请稍后(loading......) *"<<endl;cout<<" "<<"* * * * * * * * * * * * * * * * * * * * * * *"<<endl;Sleep(1500);system("cls");}void game::selection(){int n;cout<<" "<<"** * * * * * * * * * * * * **"<<endl;cout<<" "<<"*1:返回主菜单。
2:退出游戏.*"<<endl;cout<<" "<<"** * * * * * * * * * * * * **"<<endl;cout<<"输入你的选择:";cin>>n;switch(n){case 1 : system("cls");showfunction();break;case 2 : system("cls");quit();break;}}void game::tips(){gotoxy(0,6);cout<<" "<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;cout<<" "<<"* 游戏规则如下: *"<<endl;cout<<" "<<"* 系统会随机产生1个各位互相不相同的4位数,然后你有10次机会去猜。
当你*"<<endl;cout<<" "<<"* 猜错了,会自动提示你离答案的差距。
然后你再根据提示去猜,直到猜出或者*"<<endl;cout<<" "<<"* 10次机会用完为止。
*"<<endl;cout<<" "<<"* 这个游戏考1个人的逻辑推理能力。
祝你好运!*"<<endl;cout<<" "<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;selection();}void game::showfunction(){int f,t=1;gotoxy(0,5);cout<<" "<<"** * * * * * * * * * * * * * * * * * * *"<<endl;cout<<" "<<"* 游戏菜单*"<<endl;cout<<" "<<"** * * * * * * * * * * * * * * * * * * *"<<endl;cout<<" "<<"* 1、开始游戏*"<<endl;cout<<" "<<"* 2、查看游规则*"<<endl;cout<<" "<<"* 3、退出*"<<endl;cout<<" "<<"** * * * * * * * * * * * * * * * * * * *"<<endl;cout<<endl<<endl<<endl<<endl;cout<<" "<<"输入你的选择:";while(t){cin>>f;switch(f){case 1: system("cls");target();t=0;break;case 2: system("cls");tips();t=0;break;case 3: system("cls");data_load();quit();t=0;break;default:cout<<"============================"<<endl;cout<<" 按键无效!请重新输入!"<<endl;cout<<"============================"<<endl;break;}}}void game::showfunction2(){int f,t=1;gotoxy(0,7);cout<<" "<<"** * * * * * * * * * * * * **"<<endl;cout<<" "<<"*1:重玩游戏. 2:退出游戏.*"<<endl;cout<<" "<<"** * * * * * * * * * * * * **"<<endl;cout<<"输入你的选择:";while(t){cin>>f;switch(f){case 1: system("cls");target();t=0;break;case 2: system("cls");quit();t=0;break;default: cout<<"输入非法,重新输入!"<<endl;break;}}}void game::target(){srand((unsigned)time(NULL));for(int i=0;i<4;i++)a[i]=rand()%10;while(a[0]==0) a[0]=rand()%10;while(a[0]==a[1]) a[1]=rand()%10;while(a[0]==a[2]||a[1]==a[2]) a[2]=rand()%10;while(a[0]==a[3]||a[1]==a[3]||a[2]==a[3]) a[3]=rand()%10;start();}void game::start() {int i,j,times=0,t,b[4];cout<<" "<<"* * * * * * * * * * * * *"<<endl;cout<<" "<<"* 游戏开始!*"<<endl;cout<<" "<<"* * * * * * * * * * * * *"<<endl;for(i=0;i<4;i++)cout<<a[i]<<" ";cout<<endl;cout<<" "<<"* * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;cout<<" "<<"* 现在系统随机产生了1个各位互不相同的4位数*"<<endl;cout<<" "<<"* (如,1234).你猜它是什么?*"<<endl;cout<<" "<<"* * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;for(times=0;times<15;times++){int right=0,wrong=0,flag=1000,p=1;while(p){cout<<endl<<"你还有"<<15-times<<"次机会!";cout<<"请输入你猜测: ";cin>>t;if(t<1000||t>9999){cout<<"==================================================="<<en dl;cout<<" 输入错误咯哦。