c语言程序设计猜数字课题

C语言课程设计任务书
设计课题4:猜数字游戏系统
问题描述:
猜数字游戏系统主要模拟实现一个猜数字游戏,仿真再现玩游戏的过程。用户根据互动提示,实现游戏任务。
1、 功能设计要求:
1)本系统采用数组或变量进行数据存储,通过模块选择进行游戏。
2)设计主菜单界面,确定函数个数。设计菜单应包含以下功能:
 界面登录(核对密码登陆游戏)
 开始游戏(互动提示答案)
 再次游戏(提供新一次的游戏)
 退出系统
3)要求:建立相应的数据,游戏测试至少3次,能对登陆数据进行补充、修改。执行一个具体的功能之后,程序将重新显示菜单。
3、要求:
1)用C语言实现系统;
2)函数功能要划分好(结构化程序设计);
3)界面友好(良好的人机交互),加必要的注释;
4)提供程序测试方案。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<windows.h>
#include<string.h>

#define MAX 5

struct record
{
char name[10];
int sorce;
}rec[MAX],Rec;

int n; //记录行数
int num; //输入的数字

void display(); //开始界面
void xuanze(); //选择函数
void sys(int a); //操作函数
void newgame(); //新游戏
void vdisplay(); //浏览记录界面
void vxuanze(); //浏览选择函数
void help(); //帮助说明
void vsys(int a); //浏览操作函数
void viewsorce(); //按记录的顺序浏览
void viewname(); //按记录的姓名浏览
void viewsname(); //按记录和姓名浏览
void delrec(); //删除记录
int qushu(); //取数函数
int tishi(int aa); //提示函数
void addrec(int a); //判断并且增加记录
void recread(); //读取记录文件
void recwrite(); //写入记录文件

///////////////////////////////////////////////////////////////////////////////////////////////
////////////////////函数定义//////////////

void display() //开始界面
{
system("cls"); //清屏

printf(" ============================================\n");
printf(" ================数字竞猜游戏================\n");
printf(" ============================================\n");
printf("\n");
printf(" 1: 新游戏\n");
printf("\n");
printf(" 2: 浏览记录\n");
printf("\n");
printf(" 3: 帮助说明\n");
printf("\n");
printf(" 4: 清除记录\n");
printf("\n");
printf(" 5: 退出\n");
printf("\n");
printf(" ============================================\n");
xuanze();
}
void xuanze() //选择函数
{
int a;
printf("请输入你所选择的操作数:\n");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4||a==5)
{
sys(a);
}//选择相应的操作数执行函数
else
{
printf("错误的操作数!\n");;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}
void sys(int a) //操作函数
{
switch(a)
{
case 1:newgame();break;
case 2:vdisplay();break;
case 3:help();break;
case 4:delrec();break;
case 5:exit(0);break; //退出
}
}
void newgame() //新游戏
{
recread();
system("cls"); //清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf(" <---空记录--->\n");
else
printf(" 第 %d 名: 姓名: %s 分数 %d\n",i+1,rec[i].name,rec[i].sorce);
}

printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();//////////////上面列出记录文件中的记录

/////////////////////////////////////////////////////////////////////////////
int snum; //输入的数字
int sn=10; //机会次数
num=qushu(); //取数
L: system("cls"); //清屏

printf(" ============================================\n");
printf(" ================数字竞猜游戏================\n");
printf(" ============================================\n");
printf("\n");
printf(" 1: 显示答案\n");
printf(" ============================================\n");
printf("\n");
printf("请输入你猜想的四个数字(格式为9999样式)你还有 %d 次机会:\n",sn);
scanf("%d",&snum);
if(snum<10000 && snum>1000 || snum==1)
{
if(snum==1)
{
printf("你放弃了本局游戏!该四个数字是: %d\n",num);
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
else
{
int flag=tishi(snum);
if(flag!=0 && sn!=0)
{
sn--;
if(sn==0)
{
printf("真是遗憾!十次机会没有了!没有关系!下次继续!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
printf("请按任意键继续猜...\n");
getchar();
getchar();
goto L;
}
else
{
if(sn!=0)addrec(sn);
else
{
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}
}
}
else
{
printf("错误的操作数!\n");;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
goto L;
}
}

void help() //帮助说明
{
system("cls"); //清屏
printf(" ============================================\n");
printf(" ==============数字竞猜游戏帮助==============\n");
printf(" ============================================\n");
printf("\n");
printf("1.新游戏中,你可以输入四位数,来竞猜系统自动生成的四个数字!,只有十次的机会,\n");
printf(" 每次机会都有相对应的提示,十次的机会利用完了还没有猜对的话就算失败!四个数字的\n");
printf(" 相应格式在游戏中会有提示!当成功猜出系统给定的数字时候,就会统计你的成绩.当你的\n");
printf(" 成绩比记录文件中的记录好的时候就会提示你是否把记录记录到记录文件中,当你选择是\n");
printf(" 的时候就会接着提示你输入你的名字.再按回车.没有意外就会提示保存成功!\n");
printf(" 还有要说明的是记录中的分数是越低就代表成绩越好!\n");
printf("2.浏览记录有三种方式!第一种只是列出记录中的姓名;第二种是列出记录中的成绩次序\n");
printf(" 第三种是姓名跟成绩一起列出来!\n");
printf("3.清除记录就是把记录文件初始化.即是让记录文件为空!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}

void vdisplay() //浏览记录界面
{
system("cls"); //清屏

printf(" ============================================\n");
printf(" ================数字竞猜游戏================\n");
printf(" ============================================\n");
printf("\n");
printf(" 1: 按记录的顺序浏览\n");
printf("\n");
printf(" 2: 按记录的姓名浏览\n");
printf("\n");
printf(" 3: 姓名记录全部浏览\n");
printf("\n");
printf(" 4: 返回上级\n");
printf("\n");
printf(" ============================================\n");
vxuanze();
}
void vxuanze() //浏览选择函数
{
int a;
printf("请输入你所选择的操作数:\n");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4)
{
vsys(a);
}//选择相应的操作数执行函数
else
{
printf("错误的操作数!\n");;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
vdisplay();
}
}
void vsys(int a) //浏览操作函数
{
switch(a)
{
case 1:viewsorce();break;
case 2:viewname();break;
case 3:viewsname();break;
case 4:display();break; //返回上级
}
}

void viewname() //按记录的顺序浏览
{
recread();
system("cls"); //清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf(" <---空记录--->\n");
else
printf(" 第 %d 名: 姓名: %s\n",i+1,rec[i].name);
}

printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
vdisplay();
}
void viewsorce() //按记录的姓名浏览
{
recread();
system("cls"); //清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf(" <---空记录--->\n");
else
printf(" 第 %d 名: 分数 %d\n",i+1,rec[i].sorce);
}

printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
vdisplay();
}
void viewsname() //按姓名和记录浏览
{
recread();
system("cls"); //清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(int i=0;i<MAX;i++)
{
if(rec[i].sorce==0)printf(" <---空记录--->\n");
else
printf(" 第 %d 名: 姓名: %s 分数 %d\n",i+1,rec[i].name,rec[i].sorce);
}

printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
vdisplay();
}
void delrec() //删除记录
{
recread();
for(int i=0;i<MAX;i++)
{
rec[i].sorce=0;
}
recwrite();
printf("删除成功!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}

int qushu() //取数函数
{
int a=0;
int i=0;

srand( (unsigned)time( NULL ) ); //随机数种子设置

while(i==0)
{
i=rand(); //这样做就是为了增加随机性
i=i%100;
}

L: for(int j=0;j<i;j++)
{
a=a+rand(); //判断随机数是否是四位数 如果不是继续取数
}
a=(a/i+rand())%10000;
if(a<1000)goto L;

return(a);
}

int tishi(int aa) //提示函数
{
int a,b,c,d;
int af,bf,cf,df;
if(aa==num)
{
printf("恭喜!你猜对了!四个数就是:%d\n",num);
return(0);
}
else
{
a=(num-num%1000)/1000;
b=(num%1000-(num%1000)%100)/100;
c=((num%1000)%100-((num%1000)%100)%10)/10; //获取默认四个数字
d=((num%1000)%100)%10;

af=(aa-aa%1000)/1000;
bf=(aa%1000-(aa%1000)%100)/100;
cf=((aa%1000)%100-((aa%1000)%100)%10)/10; //获取输入的四个数字
df=((aa%1000)%100)%10;

if(af>a)printf("\n第一个数应该比 %d 小一点!\n",af);
if(af==a)printf("恭喜!第一个数字对了!应该是: %d\n",af); //数字比较
if(af<a)printf("第一个数应该比 %d 大一点!\n",af);

if(bf>b)printf("第二个数应该比 %d 小一点!\n",bf);
if(bf==b)printf("恭喜!第二个数字对了!就是: %d\n",bf); //数字比较
if(bf<b)printf("第二个数应该比 %d 大一点!\n",bf);

if(cf>c)printf("第三个数应该比 %d 小一点!\n",cf);
if(cf==c)printf("恭喜!第三个数字对了!就是: %d\n",cf); //数字比较
if(cf<c)printf("第三个数应该比 %d 大一点!\n",cf);

if(df>d)printf("第四个数应该比 %d 小一点!\n",df);
if(df==d)printf("恭喜!第四个数字对了!就是: %d\n",df); //数字比较
if(df<d)printf("第四个数应该比 %d 大一点!\n\n",df);

return(1);
}
}

void addrec(int a) //判断并且增加记录
{
char c;
int flag=0; //标志位
a=11-a;
recread();
for(int i=0;i<MAX;i++)
{
if(a<rec[i].sorce || rec[i].sorce==0)
{
if(i==4 || rec[i].sorce==0)
{
printf("\n");
printf("恭喜!你的成绩 %d 分已经达到了前五名!\n",a);
printf("确认要保存记录请按'y',任意键返回...!\n");
scanf("%s",&c);
if(c!='y')display();
rec[i+1].sorce=rec[i].sorce; //记录后移
strcpy(rec[i+1].name,rec[i].name);
printf("请输入你的名字\n");
scanf("%s",&rec[i].name);
rec[i].sorce=a;
recwrite(); //写入
printf("恭喜!添加成功!\n",a);
flag++;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
else
{
printf("\n");
printf("恭喜!你的成绩 %d 分已经达到了前五名!\n",a);
printf("确认要保存记录请按'y',任意键返回...!\n");
scanf("%s",&c);
if(c!='y')display();
for(int j=i;j<MAX-1;j++)
{
rec[j+1].sorce=rec[j].sorce; //记录后移
strcpy(rec[j+1].name,rec[j].name);
if(rec[j+2].sorce==0)break;
}
printf("\n");
printf("请输入你的名字\n");
scanf("%s",&rec[i].name);
rec[i].sorce=a;
recwrite(); //写入
printf("恭喜!添加成功!\n",a);
flag++;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}
}
if(flag==0)
{
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}

void recread() //读取记录文件
{
FILE *fp;
L: fp=fopen("E:\\rec.rec","rb");
if(fp==NULL)
{
recwrite();
goto L; //初始化
}
if(fread(&rec,sizeof(record),MAX,fp)==MAX)
{
}
else
{
printf("文件读取失败!");
}
fclose(fp);
}
void recwrite() //写入记录文件
{
FILE *fp;
fp=fopen("E:\\rec.rec","wb");
if(fp==NULL)
printf("写入失败!\n");
fwrite(rec,sizeof(record),MAX,fp);
fclose(fp);
}

void main()
{
display();
}
温馨提示:内容为网友见解,仅供参考
无其他回答

用C语言编写一段猜数字游戏,跟一般的不一样,规则如下
printf("答案是:%d\\n你猜对了,接受惩罚。",k);return 0;}

用C语言编写一个猜数字游戏的程序(最好能够解释一下)
已经改正,如下:include<stdio.h> include<stdlib.h> include void circle(int i){ int n ;printf("请输入您所猜的数字(0-100) \\n");scanf("%d",&n);if(i<n){ printf("the number is larger,input agine.\\n");circle(i);} if(i>n){ printf("the number is smaller.input agi...

猜数字游戏C语言编程
int magic,guess,k;char over,c;printf("退出游戏请输入z\\n");do { srand (time(NULL));magic=rand()%100+1;printf("请输入猜测的数字1~100\\n");for(k=0;guess!=magic;k++){ scanf("%d",&guess);if (guess==magic)printf("恭喜,你猜对了!\\n");scanf("%c",&over);if (over...

c语言编程 编一个猜数字游戏
源码如下:\/* File: guess.c *\/ include <stdio.h> \/* standard input & output support *\/ include <stdlib.h> \/* srand() rand() *\/ include \/* time() *\/ \/* 宏定义 *\/ define NUMBER_LENGTH 5 \/* 随机数长度 *\/ define NUMBER_LIMIT 10 \/* 随机数限制, 每...

悬赏,C语言猜数字游戏程序编写
int game(void) \/\/猜数字的游戏函数,返回值是猜数字的次数 { int rnd,inp,cnt=0;rnd=rand()%(MAX_N-MIN_N)+MIN_N;printf("Let's play a guessing game.\\nI have a number between %d and %d\\n",MIN_N,MAX_N);do { printf("Your guess ? ");scanf("%d",&inp);++cnt;if...

c语言设计一个猜数游戏,电脑会自动提示大了或小了,直到猜对为止
include "time.h"include "stdlib.h"int main(int argc, char* argv[]){ int r;int g;srand(time(0));r = rand()%1000;\/\/产生一个小于1000的随机数,让大家猜 printf("请输入你猜的数:");scanf("%d",&g);while(g != r)\/\/没猜中就循环 { if(g > r){ printf("大了,请...

c语言小游戏:猜数字 随机一个1-100之间的数,根据数据输入进行提示_百度...
\/\/小游戏:猜数字 随机一个1-100之间的数,根据数据输入进行提示 include <stdlib.h> include int main(void){ int value=0;int num=0;srand((unsigned int) time(NULL));num=rand()%100+1; \/\/1-100 while(1){ scanf("%d",&value);if(num>value){ printf("您猜小了\\n");} els...

用C语言编写的小游戏代码是什么?
int count=0; \/\/计算猜测次数 void csh( ); \/\/初始化 void start( ); \/\/开始游戏 int main( ){ csh( );start( );} void csh( ) \/\/初始化 { printf("\\n\\n 猜 数 字 小 游 戏\\n\\n");printf(“ 猜四个数字,如数字与顺序都正确记为A,数字正确位置不对...

急!!C语言求助:猜数字游戏
); for(i=0;i<4;i++) { answer[i]=rand()%10; for(j=0;j

猜数字C语言
if(b!=c){t=a[b];a[b]=a[c];a[c]=t;} } 接着取出连续的a中的4个数,这样就是那个随机数 int suiji[4];for(i=0;i<4;i++)suiji[i]=a[i]; \/\/这样随即中就是四个要猜的数,要是想要第一位不是0,可以这么计算 int j;for(i=0,j=0;j<4;i++){ if(a[0]==0...

相似回答