当前位置:文档之家› 猜数字游戏的分析与实现

猜数字游戏的分析与实现

课程设计名称:猜数字游戏的分析与实现目录一游戏说明二总体设计三程序代码四运行结果五附录文档一游戏说明1使用说明(1)开始功能键选择1:开始游戏2:查看排行榜3:查看帮助4:清除排行榜5 :等级设定(2)系统将提交的数与它自动产生的数进行比较,输出结果“*A*B”形式。

其中A代表数字正确相应位置也正确,B代表数字正确但位置不正确。

如:1A3B表示游戏者有1个数字的位置正确且数值也正确,除此以外,游戏者还猜对了3个数字,但位置不对,即游戏者已经猜出4位数据,但有3个数据位置不对2程序说明书(1)程序的功能说明:猜数字游戏是一个运行在Windows平台下的小型游戏软件,依据猜数字游戏的基本规则,给用户进行成绩排行,并可以随着玩家的游戏记录进行更新。

游戏用户可以选择开始游、排行榜查看、帮助等主要功能。

当用户选择开始游戏时,系统会让用户逐次猜数字,用户每次猜数字后系统会给出本次猜数字的结果提示,如位置和数字都正确的数字个数、数字正确但位置不正确的数字个数。

如果用户猜数字的次数超过10次,则提示用户游戏失败,如果在10次之内猜出4个数字和正确的顺序,则提示用户猜数字成功,并到排行榜中进行比较,如果排名在前一名,则计入排行榜中,以便其他用户查看。

在排行榜查看功能中,用户可以查看当前的游戏排行,如有新的记录产生,则插入到排行榜中,并把排行榜中位次最末的记录挤出排行榜。

在帮助模块,用户可以查看游戏规则,当熟悉规则后可以退出帮助模块。

(2)程序的设计说明:排行榜中存放玩家信息和成绩,排行榜对应record文件。

如删除该文件,则调用系统后,会初始化排行榜,重新建立该文件,并设置初始的玩家姓名和游戏记录。

3 软件可以实现的基本功能(1)游戏区:玩家可以在游戏区逐次猜数字,系统给出玩家每次猜数字后的提示,包括数值、位置均正确的数字个数和数值正确但位置不正确的数字个数。

(2)刷新排行榜:当玩家成功完成一轮猜数字游戏后,可通过和排行榜中相应记录的比较判断玩家是否可以进入排行榜,进入排行榜的资格游戏成绩在前五名的玩家。

(3)查看排行榜:玩家可以查看当前排行榜中的排名顺序,从而确定自己的游戏目标。

排行榜的查看按一定顺序显示给用户,便于查看。

(4)清除排行榜:玩家可以选择清除排行榜功能,使得排行榜上的玩家姓名和玩家游戏记录从系统中清除,只留下系统默认的玩家名(player)和系统默认记录10次。

(5)帮助:玩家通过帮助功能了解游戏规则和排行榜设置规则。

4模块设计说明(1).游戏区模块该模块为玩家提供猜数字游戏的主体功能,由系统自动产生4个随机排列的整数,并给用户10次机会猜测数字的数值和排列顺序。

如果用户在10次之内没有猜出正确的结果,则提示用户游戏失败,否则提示用户猜数字成功,并调用产生新记录模块对玩家游戏成绩进行处理。

流程图如下:系统模块结构图①产生原始数字:由系统产生4个随机数,并按任意顺序排列,作为游戏的原始数字供玩家进行猜数字游戏。

②游提示:提示用户数值和位置全对的数字个数,和只有数值但位置不对的数字个数。

③原始数字显示:当用户在10次之内仍未能猜出原始数字和顺序时,系统提示玩家失败,并给玩家显示出原始数字和顺序。

游戏区模块功能图(2)、排行榜模块该模块为玩家提供排行榜的浏览和清除功能,包括按玩家成绩顺序浏览、按玩家姓名浏览和清除排行榜3个子功能。

①按玩家成绩顺序浏览子功能中,将玩家的姓名、游戏成绩按猜数字次数从少到多的顺序列表显示,即将玩家记录从高到底显示。

②按玩家姓名浏览的子功能中,为了玩家便于查找到自己的游戏成绩,将玩家的姓名和猜数字次数记录按照玩家姓名的字母顺序列表显示。

③清除排行榜:当用户选择清除排行榜功能时,系统会将所有玩家的历史游戏记录和玩家姓名一起从排行榜中清除,在排行榜中只留下默认的游戏记录和默认的玩家姓名,即系统默认玩家姓名player和系统默认记录10次。

游戏控制模块功能图(3)新记录模块该模块的功能是当玩家成功完成游戏时,判断用户可否进入排行榜,如果可以进入,则刷新排行榜中的记录,将当前玩家的游戏记录写入排行榜,并将排行榜目前结果显示给用户。

产生新记录模块功能图(4)读取最好记录模块读取最好记录模块的主要功能是当用户选择游戏开始选项时,首先提示用户目前排行榜中的最游戏记,如果目前没有排行的玩家记录,则初始化排行榜,给出系统默认的玩家姓名和默认的游戏记录。

如果目前排行榜中有玩家记录,则判断出最好记录显示给用户。

产生新记录模块功能图(5)帮助模块帮助模块提供的功能是当玩家选项为帮助功能对应的选项数字时,进入帮助模块,给出用户猜数字的游戏规则和游戏中相关提示的含义。

(6)系统总流程图:二总体设计1 要求(1)要求使用多文件方式实现设计;(2)要求在各个文件内实现结构化设计;(3)每个模块作为一个单独的文件。

2 文件及函数组成3函数设计(1)输出游戏说明函数函数原型:void Game_ explain()功能:输出游戏规则说明参数:void返回值:void要求:说明游戏相应的按键,保证游戏者按照说明。

(2)记录最高分函数:函数原型:void Tiptop_register(int)功能:把从Get_player函数得到的游戏者信息和游戏的积分信息一同保存到指定路径的Tiptop_register.dat文件中参数:int S;S为游戏积分返回值:void要求:要求把原来有的信息替换为现在的信息,并且只有积分大于原有信息的第十名,才会被以替换的方式记录;并且是降序的方式排列的。

(3)输出最佳排行函数:函数原型:void Tiptop_out()功能:输出最佳排行信息参数:void返回值:void要求:没有信息的时候输出提示,有信息时按降序排列输出全部信息。

(4)开始游戏中心函数函数原型:void Game_main()功能:调用Time_ control 、Build_number等函数,进行游戏的整体控制参数:void返回值:void要求:注意函数的完整性,保证游戏顺利进行,注意没有设置等级时候,默认C=1!(5)获取游戏者游戏数据和输出游戏进程结果函数函数原型:void Course_in_out()功能:把游戏者猜的数据读入内存,并且分析得出结果,并输出结果参数:void返回值:void要求:用A或B的代码表示本次的结果,其中A表示数值对位置也对,B表示数值对,但位置错了!每次得到游戏者的猜测数据都要分析得出结果并输出结果,以便游戏者的下一次猜测。

(6)游戏结果处理输出函数函数原型:void Game_result(int m )功能:计算,得出最后游戏积分参数:int m:整个游戏的时间返回值:void要求:按照游戏等级,设置不同的游戏积分方式。

(7)时间控制函数函数原型:int Time_ control()功能:利用<dos.h>和<time.h>文件,得到玩游戏的总时间,计算游戏积分。

参数:void返回值:int Time:游戏前后的时间差异要求:得到的时间是以秒为单位,数据是整型数据。

4补充:函数说明void Menu_select(); //选择菜单函数void Tiptop_record(int); //记录最高分函数void Tiptop_output(); //输出最佳排行函数void Game_explain(); //输出游戏说明函数void Game_main(); //开始游戏中心函数void Game_in_out(); //获取游戏数据和输出游戏进程结果函数int Time_command(); //时间控制函数void Game_result(int); //游戏结果处理输出函数3程序代码1 主体游戏程序#include <stdio.h>#include <conio.h>#include <stdlib.h>#define N 4#define MAX_TIMES 10/* 随机出要猜的数字,四个数字都不相同 */void create_rand_num ( int * rand_num ){int num[10]={0,1,2,3,4,5,6,7,8,9};/* 每位数的范围 */int i;int rand_n; /* 产生的随机数 */int temp; 整形变量randomize(); /* 随机种子发生器 *//* 产生四个不同随机数 */for(i=0 ;i < N; i++){/* 对数组的下标来随机,而不是对它的元素,请仔细思考 */rand_n = rand()%(10-i) + i;*(rand_num + i) = num[ rand_n ];temp = num[i]; /* 随机到了的数字往前推,以后的随机中它不再出现 */ num[i] = num[ rand_n ];num[ rand_n ] = temp;}}/* 判断输入数据的合法性 */int input_check ( int * guess ){int i=0;for(;i < N; i++){if(*(guess + i)>9 || *(guess + i)<0){printf("Error! Input the right number!\n");return 0;}}return 1;}/* 判断玩家猜的数字,返回猜的次数,超10次返回0 */int guess_num ( int * rand_num ){int guess[N]; /* 玩家猜的数字 */int times = 1;int i, j;int A, B; /* A表示数值且位置正确的个数,B只表示数值正确的个数 */ for(;times <= MAX_TIMES; times++)/* 最多猜可以10次 */{printf("\t%d:", times);for(i=0 ;i < N; i++) /* 输入要猜的4个数字 */scanf("%d", &guess[i]);if( !input_check(guess) ){ times --; continue;} /* 非法输入,重输 *//* 判断用户所猜的数字 */A =B = 0;for(i=0 ;i < N; i++){for(j=0 ;j < N; j++){if(i==j && guess[j] == *(rand_num+i)) /* 数值和位置正确 */ {A ++; break; }else if( guess[j] == *(rand_num+i) ) /* 数值正确 */{B ++; break; }}if( i == N-1 ) /* 猜对了,返回猜的次数 */if( A==N ) {printf("\n\t\t\tRight!\n"); return times;}}printf("\t\t\t%dA %dB\n", A, B);}return 0; /* 10次内没猜对 */}/* 统计结果 */void result( int times , int * score ){switch( times ){case 1:case 2:case 3:printf("\tVery Good!");printf("\tScore +%d", 110-times*10 );*score += 110-times*10; break;case 4:case 5:case 6:printf("\tGood!");printf("\tScore +%d", 100-times*10 );*score += 100-times*10; break;case 7:printf("\tPass!");printf("\tScore +%d",20 );*score += 20; break;default: printf("\tCome On!");}}/* 是否继续游戏 */int go_on (){char c;printf("\n\n\tContinue game?(\'y\'or\'n\'):");getchar();if((c=getchar()) == 'y' || c == 'Y')return 1;return 0;}main(){int rand_num[N]; /* 产生的四个随机数 */int times; /* 猜对结果所用的次数 */int score = 0; /* 得分 */int flag = 1 ; /* 继续游戏 */while( flag ){clrscr();printf("\tGUESS NUM GAME\tscore=%d\n", score); create_rand_num ( rand_num );times = guess_num(rand_num );result( times , &score );flag = go_on ();}}2 游戏控制#include"record.h"//**********************// 设置游戏等级函数//**********************void Game_rank(){FILE *fp;printf("\t******************************\n");printf("\t************1:初级************\n");printf("\t************2:中级************\n");printf("\t************3:高级************\n");printf("\t******************************\n");printf("\t请选择游戏等级:\t");loop:scanf("%d",&C);if(C<1||C>3){printf("\t输入有误!请重新输入:\t");goto loop;}if((fp=fopen("C.txt","w"))==NULL){printf("打开C.txt文件失败!");exit(1);}fwrite(&C,sizeof(int),1,fp);fclose(fp);if(C==1)printf("\t等级设置为初级!\n");if(C==2)printf("\t等级设置为中级!\n");if(C==3)printf("\t等级设置为高级!\n");printf("\n");}//****************//输出游戏说明函数//****************void Game_explain(){printf("游戏说明:\n");printf("\t**********************************************************\n");printf("\t**********************************************************\n");printf("\t①:游戏开始,系统随机产生一位不重复的N位数字。

相关主题