猜数字游戏的分析与实现.doc_第1页
猜数字游戏的分析与实现.doc_第2页
猜数字游戏的分析与实现.doc_第3页
猜数字游戏的分析与实现.doc_第4页
猜数字游戏的分析与实现.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

合肥工业大学计算机与信息学院课程设计报告设计题目:猜数字及生命游戏学生姓名:李挺专 业:电子信息工程班 级:13级1班学 号:2013211732指导教师:于磊完成日期:2014年7月9日目录一 游戏说明二 总体设计三 程序代码四 运行结果五 附录文档一 游戏说明(猜数字)1使用说明(1)开始功能键选择 (2)系统将提交的数与它自动产生的数进行比较,输出结果“*A*B”形式。其中A代表数字正确相应位置也正确,B代表数字正确但位置不正确。如:1A3B表示游戏者有1个数字的位置正确且数值也正确,除此以外,游戏者还猜对了3个数字,但位置不对,即游戏者已经猜出4位数据,但有3个数据位置不对2程序说明书(1)程序的功能说明:猜数字游戏是一个运行在Windows平台下的小型游戏软件,依据猜数字游戏的基本规则,给用户进行成绩排行,并可以随着玩家的游戏记录进行更新。游戏用户可以选择开始游、排行榜查看、帮助等主要功能。当用户选择开始游戏时,系统会让用户逐次猜数字,用户每次猜数字后系统会给出本次猜数字的结果提示,如位置和数字都正确的数字个数、数字正确但位置不正确的数字个数。如果用户猜数字的次数超过10次,则提示用户游戏失败,如果在10次之内猜出4个数字和正确的顺序,则提示用户猜数字成功,并到排行榜中进行比较,如果排名在前一名,则计入排行榜中,以便其他用户查看。在排行榜查看功能中,用户可以查看当前的游戏排行,如有新的记录产生,则插入到排行榜中,并把排行榜中位次最末的记录挤出排行榜。在帮助模块,用户可以查看游戏规则,当熟悉规则后可以退出帮助模块。3 软件可以实现的基本功能(1)游戏区:玩家可以在游戏区逐次猜数字,系统给出玩家每次猜数字后的提示,包括数值、位置均正确的数字个数和数值正确但位置不正确的数字个数。(2)查看排行榜:玩家可以查看当前排行榜中的排名顺序,从而确定自己的游戏目标。排行榜的查看按一定顺序显示给用户,便于查看。(5)帮助:玩家通过帮助功能了解游戏规则和排行榜设置规则。(4)清除排行榜:玩家可以选择清除排行榜功能,使得排行榜上的玩家姓名和玩家游戏记录从系统中清除,只留下系统默认的玩家名(player)和系统默认记录10次。二 总体设计1 要求(1)要求使用多文件方式实现设计;(2)要求在各个文件内实现结构化设计;(3)每个模块作为一个单独的文件。 2 文件及函数组成源文件函数名或其他成分 功能record.h ASK宏定义结构声明结构声明库函数及函数原型声明record.hint choose_level设置游戏等级void show_explain输出游戏说明record.hbool check_num检查数据void show_tiptop输出最佳排行record.hvoid new_game开始游戏中心void get_num获取系统随机数字Game_in_out获取游戏者数据和输出结果Int time时间控制Game_result游戏结果处理输出record.hint main主函数void display()选择菜单int choose_menu处理菜单三程序代码1 主体游戏程序using namespace std;void rand_num( int );void get_num(int,int);bool check_num(int);int guess_num(int);void goal(int,int,int);void choose_menu();void new_game();void show_tiptop();void show_explain();void clean_data();void display();int choose_level();void main()choose_menu();#include#include#include#include#include#include#includeusing namespace std; #pragma warning(disable:4996)struct dataint goal;char name20;fstream iofile;void rand_num(int b)int temp; int temp2;int c10 = 0 ;for (int i = 0; i 10; i+)ci = i;srand(unsigned)time(0);for (int j = 0; j 4; j+)temp = rand() % (10 - j) + j;temp2 = ctemp;ctemp = cj;cj = temp2;bj = cj;for (int k = 0; k 4; k+)cout bk ;cout endl;void get_num(int b,int k)cout ttt请输入你猜的数字,还剩下k 机会n;cout tttt;for (int i = 0; i bi;bool check_num(int b)for (int i = 0; i 4; i+)if (bi9)cout ttt输入错误,请重新输入!n;return false;return true;int choose_level()int x;cout nnnn;cout t*n;cout t*n;cout ttt1.高级t2.中级t3.低级n;cout x;while (x 2 & x 1)cout ttt输入有误,重新输入!n;cout x;if (x = 1)return 1;if (x = 2)return 2;if (x = 3)return 3;int guess_num(int level)system(cls);int A ;int B ;int a4 = 0 ;int b4 = 0 ;rand_num(a);int times = 0;for (int k = level+7; k 0; k-)get_num(b,k);while (!check_num(b)k-;get_num(b,k);A = B = 0;for (int i = 0; i 4; i+)if (ai = bi)A+;for (int j = 0; j 4; j+)if (i != j&ai = bj)B+;cout ttttA A B Bn;times +;if (A = 4)return times;for (int k = 0; k 4; k+)cout bk;cout endl; return 0; void goal(int times, int time,int level) /计算分数并保存int goal; char name20; data temp,temp2;iofile.open(e:dataf.dat, ios:in | ios:app | ios:binary);if (!iofile)cerr 没有游戏最高分n;abort();goal = 500 - time * 0.002 - times * 10-level*10;cout ttt您的得分是: goalt时间是time/1000sn;iofile.seekg(0, ios:beg);/(level - 1)*sizeof(temp)iofile.read(char*)&temp, sizeof(temp); /cout goal)cout ttt最高分 ;if (temp.goal goal)cout name;temp.goal = goal;strcpy(,name);/endl;/iofile.flush();iofile.write(char*)&temp,sizeof(temp);/iofile.read(char*)&temp, sizeof(temp);cout ttt 保存成功n;iofile.close();void new_game() /开始新游戏system(cls);clock_t start, finish;int a; int b; int level;int time;level=choose_level();start = clock();a=guess_num(level);finish = clock(); time = (int)(finish - start);goal(a, time,level);cout ttt 是否继续?n endl;cout ttt1.继续 2.返回 endl;cout b;if (b = 1)new_game(); void show_tiptop() int x;data data13 = 500, ting ,400,qian,300,07161208;iofile.open(e:dataf.dat,ios:in|ios:app|ios:binary);if (!iofile)cerr 没有游戏最高分n;abort();for (int i=0; i 3; i+)iofile.write(char*)&data1i,sizeof(data1i);iofile.flush();cout ttt1.高级t2.中级t3.低级t4.返回n;cout x;while (x != 4)data datal1;if (x4)cout t输入有误,请重新输入!n;switch (x)case 1:iofile.seekg(x - 1)*sizeof(datalx - 1), ios:beg);iofile.read(char*)&datal0,sizeof(datal0);cout ttt 高级: datal0.goal endl;break;case 2:iofile.seekg(x - 1)*sizeof(data1x - 1), ios:beg);iofile.read(char*)&datal0,sizeof(datal0);cout ttt 中级: datal0.goal endl;break;case 3:iofile.seekg(x - 1)*sizeof(data1x - 1), ios:beg);iofile.read(char*)&datal0,sizeof(datal0);cout ttt 低级: datal0.goal endl;break;cout x;iofile.close(); void show_explain()/查看游戏说明system(cls);int a;couttttt游戏说明n;cout t*n;cout t*n;cout t:游戏开始,系统随机产生一位不重复的N位数字.N的大小与等级有关n;cout tt初级:N=3t中级:N=4t高级:N=5tn;cout t:游戏者输入所猜的不重复数字,并按回车提交,提交的数据位数应与n;cout tN的大小一致,当数据位数大于N时,只取前N位;n;cout t:系统将提交的数与它自动产生的数进行比较,输出结果“*A*B”形式.n;cout t其中A代表数字正确相应位置也正确,B代表数字正确但位置不正确.如:n;cout t1A3B表示有1个数字的位置正确且数值也正确,除此以外,还猜对了3个数n;cout t字但位置不对.即已经猜出4位数据,但有3个数据位置不对!n;cout t:游戏者有限定次数的猜测机会,在规定次数内完成,则游戏成功.n;cout t否则,游戏失败.其中.猜测次数与等级有关n;cout tt初级:10次t中级:9次t高级:8次。n;cout t:按完成游戏所用的时间和次数计算游戏者所得分数,游戏等级越高,n;cout t猜测所用的次数越少.得分越高!若游戏者得分比系统已经保存的分数n;cout t的高,将提示要求输入游戏者信息.并且保存在最佳排行之中.n;cout t:游戏者可以自行设置等级!n;cout t*n;cout t*n;cout t1.返回主菜单n a;void clean_data()data temp,temp2;iofile.open(dataf.dat, ios:in | ios:app | ios:binary);temp.goal=0;strcpy(, nothing);for (int i = 0; i 3; i+)iofile.write(char*)&temp, sizeof(temp);iofile.read(char*)&temp2, sizeof(temp2);cout t temp2.goal;iofile.close();void display()system(cls);cout nnnn;cout tttt 主菜单n;cout t*n;cout t*n;cout tttt1.新游戏nn ;cout tttt2.查看最高分nn;cout tttt3.游戏说明nn;cout tttt4.清空所有数据nn;cout tttt5.退出游戏nn;cout t*n;cout t*n;cout setw(10) endl; /清空所有数据void choose_menu()int x;display();cout x;while (x != 5)switch (x)case 1:new_game();break;case 2:show_tiptop();break;case 3:show_explain();break;case 4:clean_data();break;display();cout x;四 运行结果 一 游戏说明(生命游戏)而每一个格子都可以看成是一个生命体,每个生命都有生和死两种状态,如果该格子生就显示蓝色,死则显示白色。每一个格子旁边都有邻居格子存在,如果我们把3*3的9个格子构成的正方形看成一个基本单位的话,那么这个正方形中心的格子的邻居就是它旁边的8个格子。 每个格子的生死遵循下面的原则: 1) 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。 2) 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变; 3) 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案)。三程序代码#includeusing namespace std;#include#include struct Cellbool live;int others;void main()Cell cell4040;for (int i = 0; i40; i+)for (int j = 0; j40; j+)cellij.live = true;cellij.others = 0;while (1)for (int i = 0; i40; i+)for (int j = 0; j40; j+)cellij.others = 0;for (int i = 0; i40; i+)for (int j = 0; j40; j+)if (cellij.live)cout $ ;elsecout - ;cout endl;for (int i = 0; i40; i+)for (int j = 0; j= 0 & (j - 1) = 0 & celli - 1j - 1.live)cellij.others+;if (i - 1) = 0 & celli - 1j.live)cellij.others+;if (i - 1) = 0 & (j + 1)= 0 & cellij - 1.live)cellij.others+;if (j + 1)40 & cellij + 1.live)cellij.others+;if (i + 1)= 0 & celli + 1j - 1.live)cellij.others+;if (i + 1)40 & celli + 1j.live)cellij.others+;if (i + 1)40 & (j + 1)40 & celli + 1j + 1.live)cellij.others+;switch (cellij.others)case 2:break;case 3:cellij.live = true; break;default:cellij.live = false; break;Sleep(1000);system(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论