C课程设计报告猜数字游戏.docx
- 文档编号:8494585
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:23
- 大小:308.30KB
C课程设计报告猜数字游戏.docx
《C课程设计报告猜数字游戏.docx》由会员分享,可在线阅读,更多相关《C课程设计报告猜数字游戏.docx(23页珍藏版)》请在冰豆网上搜索。
C课程设计报告猜数字游戏
课程设计报告
课程设计名称:
C语言猜数字游戏
目录
一:
设计目的
二:
游戏规则及说明
三:
总体及函数设计
(1)总体
(2)主要流程图
(3)文件及函数组成
(4)函数描述
四:
源程序代码
五:
运行结果
一:
设计目的
1加强对C语言的基础知识的牢固,复习C语言的一些基本算法的设计
2通过对小型应用型C程序设计,了解程序设计的基本思路
3通过趣味性程序的设计,增强对C语言学习的兴趣
4通过编写程序发现C语言学习中存在的问题,以及找出解决问题的办法
二:
游戏规则以及说明
①游戏开始,系统随机产生一个数字不重复的N位数。
②您开始猜测数据填在正确位置按回车提交。
③系统会将您提交的数与它自动产生的数进行比较,结果显示成"*A*B"形式。
其中A代表数字正确相应位置也正确,B代表数字正确但位置不正确。
比如:
"2A2B"表示您有2个数字的位置正确且数值也正确,除此以外,您还猜对了2个数字,但位置不对,即您已经猜出所有数据,不过有两个数据位置对调了!
④您共有一定次数的猜测机会,在规定次数内之内完成,使结果为“4A0B”,则游戏成功。
否则游戏失败。
三:
总体及函数设计
(1)总体:
由多函数的形式实现程序的设计
(2)主要流程图:
A主函数流程图:
B开始游戏菜单的主要流程图:
(3)文件及函数组成
函数名或其他成分
功能
Main
总控函数
Menu_select
菜单选择
Handle_menu
菜单处理
Tiptop_register
最高分记录
Tiptop_out
输出最佳排行
Grade_amend
等级更换
Game_explain
游戏说明
Game_main
游戏
Build_number
生成数字
Course_in_out
游戏进程获取及输出
Time_control
时间控制
Game_result
游戏结果处理输出
ASK
宏定义申请内存
结构声明
结构声明
库函数及函数原型声明
引用库函数及函数
五:
源程序代码
#include
#include
#include
#include
#include
#include
//结构体
#defineMAXSIZE20
typedeflongintElemType;//定义结构体tiptop,存放游戏者的最高分等信息
typedefstructtiptop{
ElemTypedata;
charname[MAXSIZE];
chargrade[MAXSIZE];
intyear;
intmon;
intday;
charwday[MAXSIZE];
inthour;
intmin;
intsec;
}tiptop;
//全局变量
intD;//D为等级设置变量
//函数声明
voidMenu_select();//选择菜单函数
intHandle_menu();//处理菜单函数
voidTiptop_register(int);//记录最高分函数
voidTiptop_out();//输出最佳排行函数
voidGrade_amend();//设置游戏等级函数
voidGame_explain();//输出游戏说明函数
voidGame_main();//开始游戏中心函数
int*Build_number();//获取系统随机数字函数
voidCourse_in_out();//获取游戏者游戏数据和输出游戏进程结果函数
intTime_control();//时间控制函数
voidGame_result(int);//游戏结果处理输出函数
//************
//处理菜单函数
//************
intHandle_menu()
{
intn;
printf("\t**************************\n");
printf("\t**\t1:
开始游戏\t**\n");
printf("\t**\t2:
等级设置\t**\n");
printf("\t**\t3:
最佳排行\t**\n");
printf("\t**\t4:
游戏说明\t**\n");
printf("\t**\t5:
退出\t**\n");
printf("\t**************************\n");
printf("\t请输入相应序号选择相应菜单:
");
printf("\t");
scanf("%d",&n);
if(n<1||n>5)
n=0;
getchar();//屏蔽回车
system("cls");
returnn;
}
//****************
//设置游戏等级函数
//****************
voidGrade_amend()
{
FILE*fp;
printf("\t******************************\n");
printf("\t************1:
初级************\n");
printf("\t************3:
高级************\n");
printf("\t******************************\n");
printf("\t请输入相应序号,选择相应的等级:
\t");
loop:
scanf("%d",&D);
getchar();//屏蔽回车
if(D<1||D>3)
{
printf("\t设置输入有误!
请重新输入:
\t");
gotoloop;
}
if((fp=fopen("D.txt","w"))==NULL)
{
printf("打开D.txt文件失败!
");
exit
(1);
}
fwrite(&D,sizeof(int),1,fp);
fclose(fp);
if(D==1)
printf("\t等级设置为初级成功!
\n");
if(D==3)
printf("\t等级设置为高级成功!
\n");
}
//****************
//输出游戏说明函数
//****************
voidGame_explain()
{
printf("\t******************************************************\n");
printf("\t******************************************************\n");
printf("\t①:
游戏开始,系统随机产生一个数字不重复的N位数。
N的数\n");
printf("\t字大小与等级有关:
\n");
printf("\t②:
开始猜测数据填在相应位置按回车提交。
提交的数据应与\n");
printf("\tN的大小一致,当数据个数大于N时,只取前N位;并且不能填入\n");
printf("\t重复的数字。
\n");
printf("\t③:
系统会将您提交的数与它自动产生的数进行比较,结果显\n");
printf("\t示成“*A*B”形式。
其中A代表数字正确相应位置也正确,B代\n");
printf("\t表数字正确但位置不正确。
比如:
2A2B表示您有2个数字的位置\n");
printf("\t正确且数值也正确,除此以外,您还猜对了2个数字,但位置不\n");
printf("\t对,即您已经猜出所有数据,不过有两个数据位置对调了!
即\n");
printf("\t您已经猜中四个数字,其中有两个数字的位置错了。
\n");
printf("\t④:
您共有一定次数的猜测机会,在规定次数内之内完成,使\n");
printf("\t结果为“NA0B”,则游戏成功。
否则游戏失败。
其中猜测次数\n");
printf("\t⑤:
按完成游戏所用的时间和次数来计算你应当得到的分数,\n");
printf("\t若游戏者得分比系统已经保存的分数的最低分高,将提示要求\n");
printf("\t输入游戏者信息,并且会保存在最佳排行之中。
\n");
printf("\t******************************************************\n");
printf("\t******************************************************\n");
printf("\n");
}
//****************
//输出最佳排行函数
//****************
voidTiptop_out()
{
inti;
FILE*fp;
tiptopp,q,r;
if((fp=fopen("tiptop1.txt","r"))==NULL)
{
printf("打开tiptop1.txt文件失败!
");
exit
(1);
}
fread(&p,sizeof(structtiptop),1,fp);
fclose(fp);
if((fp=fopen("tiptop3.txt","r"))==NULL)
{
printf("打开tiptop3.txt文件失败!
");
exit
(1);
}
fread(&r,sizeof(structtiptop),1,fp);
fclose(fp);
if(p.data==0&&q.data==0&&r.data==0)
{
printf("\t暂无最高分信息!
");
printf("\n");
}
else
{
printf("\t猜数字游戏的最佳排行榜如下:
\n");
printf("\n\n");
printf("\t等级\t姓名\t分数\t游戏时间\n");
if(p.data!
=0)
{
printf("\t%s\t%s\t%d\t",p.grade,p.name,p.data);
}
if(q.data!
=0)
{
printf("\t%s\t%s\t%d\t",q.grade,q.name,q.data);
}
if(r.data!
=0)
{
printf("\t%s\t%s\t%d\t",r.grade,r.name,r.data);
}
if(p.data==0)
printf("\n初级暂无最高分信息!
\n");
if(r.data==0)
printf("\n高级暂无最高分信息!
\n");
}
}
//**************
//记录最高分函数
//**************
voidTiptop_register(intS)
{
FILE*fp;
tiptopn;
char*wday[]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
time_ttimep;
structtm*t;
printf("\t恭喜您!
\n");
printf("\t您获得本游戏的最高分\n");
//获取名字
printf("\t请输入你的姓名:
");
printf("\t");
scanf("%s",n.name);
//获取时间
time(&timep);
t=gmtime(&timep);
t->tm_year=1900+t->tm_year;
t->tm_mon=1+t->tm_mon;
t->tm_hour=8+t->tm_hour;
n.year=t->tm_year;
n.mon=t->tm_mon;
n.day=t->tm_mday;
strcpy(n.wday,wday[t->tm_wday]);
n.hour=t->tm_hour;
n.min=t->tm_min;
n.sec=t->tm_sec;
//获取等级
if(D==1)
strcpy(n.grade,"初级");
if(D==3)
strcpy(n.grade,"高级");
//获取分数
n.data=S;
if(D==1)
{
if((fp=fopen("tiptop1.txt","w"))==NULL)
{
printf("\t打开tiptop1.txt文件失败!
");
exit
(1);
}
fwrite(&n,sizeof(structtiptop),1,fp);
fclose(fp);
}
if(D==3)
{
if((fp=fopen("tiptop3.txt","w"))==NULL)
{
printf("\t打开tiptop3.txt文件失败!
");
exit
(1);
}
fwrite(&n,sizeof(structtiptop),1,fp);
fclose(fp);
}
}
//全局变量
int*c1;//产生的数保存在指针c中
intA,B;//AB均为游戏重要参数
intNUM;//NUM为需要猜测的数据个数
intTIME;//TIME为猜数字共有的次数
longintS;//S为游戏积分
//****************
//开始游戏中心函数
//****************
voidGame_main()
{
FILE*fp;
inttime;
if((fp=fopen("D.txt","r"))==NULL)
{
printf("打开D.txt文件失败!
");
printf("\n");
exit
(1);
}
fread(&D,sizeof(int),1,fp);
NUM=D+2;
TIME=11-D;
if(D==1)
{
printf("\t您本次游戏等级为:
初级!
\n");
}
if(D==3)
{
printf("\t您本次游戏等级为:
高级!
\n");
}
printf("\t需要猜测的数字个数为:
%d,共有%d次猜测机会!
",NUM,TIME);
printf("\n");
time=Time_control();
Game_result(time);
}
//********************
//获取系统随机数字函数
//********************
int*Build_number()
{
inti,j,m;
time_tt;
c1=(int*)malloc(NUM*sizeof(int));
if(c1==NULL)
{
printf("分配内存错误!
\n");
printf("\n");
exit
(1);
}
srand((unsigned)time(&t));
for(i=0;i { m=rand()%10;//产生一个数字 if(i==0) *c1=m; else { for(j=0;j { if(m==*(c1+j))//若原有数据之中已经有了与m相同的数字,则重新产生数字 { i--; break; } *(c1+i)=m; } } } printf("\n"); printf("\t您可以开始猜测了;\n"); printf("\t数字中间用空格隔开\n"); printf("\n"); returnc1; } //**************************************** //获取游戏者游戏数据和输出游戏进程结果函数 //**************************************** voidCourse_in_out() { inti,j,m; intn;//游戏者猜测的数字 inta[5];//游戏者猜测的数据构成的数组 intc[5]; int*p; p=Build_number(); for(i=0;i { c[i]=*(p+i); } for(m=0;m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 数字 游戏