1、 合肥工业大学计算机与信息学院 课程设计报告 设计题目: 猜数字及生命游戏 学生姓名: 李挺 专 业: 电子信息工程 班 级: 13级1班 学 号: 2013211732 指导教师: 于磊 完成日期: 2014年7月9日 目录 一 游戏说明 二 总体设计 三 程序代码 四 运行结果 五 附录文档 一
2、游戏说明(猜数字) 1使用说明 (1)开始功能键选择 (2)系统将提交的数与它自动产生的数进行比较,输出结果“*A*B”形式。其中A代表数字正确相应位置也正确,B代表数字正确但位置不正确。如:1A3B表示游戏者有1个数字的位置正确且数值也正确,除此以外,游戏者还猜对了3个数字,但位置不对,即游戏者已经猜出4位数据,但有3个数据位置不对 2程序说明书 (1)程序的功能说明:猜数字游戏是一个运行在Windows平台下的小型游戏软件,依据猜数字游戏的基本规则,给用户进行成绩排行,并可以随着玩家的游戏记录进行更新。游戏用户可以选择开始游、排行榜查看、帮助等主要功能。当用户选择开始
3、游戏时,系统会让用户逐次猜数字,用户每次猜数字后系统会给出本次猜数字的结果提示,如位置和数字都正确的数字个数、数字正确但位置不正确的数字个数。如果用户猜数字的次数超过10次,则提示用户游戏失败,如果在10次之内猜出4个数字和正确的顺序,则提示用户猜数字成功,并到排行榜中进行比较,如果排名在前一名,则计入排行榜中,以便其他用户查看。在排行榜查看功能中,用户可以查看当前的游戏排行,如有新的记录产生,则插入到排行榜中,并把排行榜中位次最末的记录挤出排行榜。在帮助模块,用户可以查看游戏规则,当熟悉规则后可以退出帮助模块。 3 软件可以实现的基本功能 (1)游戏区:玩家可以在游戏区逐次猜数字,系
4、统给出玩家每次猜数字后的提示,包括数值、位置均正确的数字个数和数值正确但位置不正确的数字个数。 (2)查看排行榜:玩家可以查看当前排行榜中的排名顺序,从而确定自己的游戏目标。排行榜的查看按一定顺序显示给用户,便于查看。 (5)帮助:玩家通过帮助功能了解游戏规则和排行榜设置规则。 (4)清除排行榜:玩家可以选择清除排行榜功能,使得排行榜上的玩家姓名和玩家游戏记录从系统中清除,只留下系统默认的玩家名(player)和系统默认记录10次。 二 总体设计 1 要求 (1)要求使用多文件方式实现设计; (2)要求在各个文件内实现结构化设计; (3)每个模块作为一个单独的文
5、件。 2 文件及函数组成 源文件 函数名或其他成分 功能 record.h ASK 宏定义 结构声明 结构声明 库函数及函数原型声明 record.h int choose_level 设置游戏等级 void show_explain 输出游戏说明 record.h bool check_num 检查数据 void show_tiptop 输出最佳排行 record.h void new_game 开始游戏中心 void get_num 获取系统随机数字 Game_in_out 获取游戏者数据和输出结果 Int t
6、ime 时间控制 Game_result 游戏结果处理输出 record.h int 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_g
7、ame();
void show_tiptop();
void show_explain();
void clean_data();
void display();
int choose_level();
void main(){
choose_menu();
}
#include
8、d; #pragma warning(disable:4996) struct data{ int goal; char name[20]; }; fstream iofile; void rand_num(int b[]){ int temp; int temp2; int c[10] = { 0 }; for (int i = 0; i < 10; i++) c[i] = i; srand((unsigned)time(0)); for (int j = 0; j < 4; j++){ temp = rand() % (10 - j)
9、 + j;
temp2 = c[temp];
c[temp] = c[j];
c[j] = temp2;
b[j] = c[j];
}
for (int k = 0; k < 4; k++)
cout << b[k] << " ";
cout << endl;
}
void get_num(int b[],int k)
{
cout << "\t\t\t请输入你猜的数字,还剩下"<
10、} bool check_num(int b[]) { for (int i = 0; i < 4; i++){ if (b[i]<0 || b[i]>9){ cout << "\t\t\t输入错误,请重新输入!\n"; return false; } } return true; } int choose_level(){ int x; cout << "\n\n\n\n"; cout << "\t****************************************************************\n";
11、 cout << "\t****************************************************************\n"; cout << "\t\t\t1.高级\t2.中级\t3.低级\n"; cout << "\t\t\t\t"; cin >> x; while (x > 2 && x < 1){ cout << "\t\t\t输入有误,重新输入!\n"; cout << "\t\t\t\t"; cin >> x; } if (x == 1)return 1; if (x == 2)return 2;
12、 if (x == 3)return 3; } int guess_num(int level){ system("cls"); int A ;int B ; int a[4] = { 0 }; int b[4] = { 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
13、 = 0; i < 4; i++){
if (a[i] == b[i])A++;
for (int j = 0; j < 4; j++){
if (i != j&&a[i] == b[j])B++;
}
}
cout << "\t\t\t\t"< 14、urn 0;
}
void goal(int times, int time,int level) {//计算分数并保存
int goal; char name[20]; 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 << 15、"\t\t\t您的得分是:" << goal<<"\t"<<"时间是"<






