永发信息网

c 编程高手来

答案:3  悬赏:40  手机版
解决时间 2021-05-07 04:03

麻烦哪位高手给加个 游戏记录选项啊 很急啊

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#define TIME 3
#define N 3
int ws;
int num[N];
int initmsg()
{
int a;
printf("\n┎───────────┓");
printf("\n│ 请输入您的选择 │");
printf("\n│ 1: 开始 │");
printf("\n│ 2: 游戏说明 │");
printf("\n│ 3: 退出 │");
printf("\n┗───────────┛");
printf("\n 你的选择:");
scanf("%d",&a);
return a;
}
void gamemsg()
{
printf("1.输入要记忆的数字 位数\n");
printf("2.输入完成后 会出现3个 相应位数的数字\n");
printf("3.这3个数字 再1秒钟后消失\n");
printf("4.输入 文字 和符号时 提示程序错误\n");
printf("5.输入刚才出现 过的 3个数字\n");
printf("6.3次输入的 机会,数字输入正确则继续游戏,3次机会全错 则提示游戏是否继续\n");
printf("7.输入Q或者q时 程序结束\n");
printf("按任一建继续");
getch();

}
void clear()
{
while(getchar() != '\n');
}
int weishu()
{
int mark;
char c;
while(1)
{
regetmark: mark= initmsg();
switch(mark)
{
case 1: goto start;
case 2: gamemsg(); system("cls");;goto regetmark;
case 3: exit(0);

}
start:printf("请输入位数(结束Q/q):");
if(scanf("%d", &ws))
{
if(ws >= 1 && ws <= 5)
break;
}
else if((c = getchar()) == 'q' || c == 'Q')
return 0;
else
printf("输入错误!请重试.\n");
clear();
}
clear();
return 1;
}
int play()
{
int i, a, b, n;
int in[N];
switch(ws)
{
case 1:a = 0, b = 10;break;
case 2:a = 10, b = 90;break;
case 3:a = 100, b =900;break;
case 4:a = 1000, b = 9000;break;
case 5:a = 10000, b = 90000;break;
}
n = 0;
for(i = 0; i < N; ++i)
n += printf("%d ", num[i] = rand()%b+a);
clock_t now = clock();
while((clock() - now) / CLOCKS_PER_SEC < TIME);
i = n;
while(i--)
putchar('\b');
printf("%*c", n, ' ');
i = n;
while(i--)
putchar('\b');
b = 3;
while(b)
{
printf("请输入:");
for(i = 0; i < N && scanf("%d", &in[i]); ++i);
if(i < N)
{
printf("输入有误!请重试.\n");
clear();
continue;
}
if(b > 0)
{
for(i = 0; i < N; ++i)
if(in[i] != num[i])
{
if(b > 1)
printf("输入错误, 你还有%d次机会:\n", b-1);
break;
}
if(i == N)
return 1;
}
b--;
}
return 0;
}
int main()
{
srand(time(0));
while(weishu())
{
if(!play())
{
clear();
printf("3次机会已用完, 是否重来?(y继续):");
if(getchar() != 'y') break;
else
clear();
}
else
printf("恭喜你!记忆正确.\n");
}
printf("Bye!");
return 0;
}

最佳答案
clock_t now = clock();
while((clock() - now) / CLOCKS_PER_SEC < TIME);
这个代码是不是弄错了
我编译就报错
全部回答

我亲爱的朋友,这个是老师让你们改的代码吧?

要培养自己学习的习惯哦。

我不帮你做这个程序。但是我想,我可以帮你导读一下,也许能抛砖引玉。

先说一下,老师写的这个程序是 虚拟程序,并不能真正的 纪律游戏,因为这个游戏本身就不能玩。要个P记录啊。而且,你们现在没有学文件流,对吗?

先看这个函数int initmsg(),如果你要是你鄙视你们老师的话,就这样做:

int initmsg() { int a; char * start=(loaded == 0 && ws==0) ? "开始" : "继续游戏"; printf("\n┎───────────┓"); printf("\n│ 请输入您的选择 │"); printf("\n│ 1: %s │",start); printf("\n│ 2: 游戏说明 │");

printf("\n│ 3: 保存 │"); printf("\n│ 4: 退出 │"); printf("\n┗───────────┛"); printf("\n 你的选择:"); scanf("%d",&a); return a; }

完成了,老师问你的话,你可以说,你的游戏无聊,我的保存,也是装饰品。

另外,这个老师,似乎也是新手,或者说……

在90年代的时候,有人提出过 三目运算符 ':?'很不科学。很容易出现bug,是最不推荐使用方法之一,虽然我们教材上,需要了解这个算式。

第二,goto语句,很多正规的大学,或者说先进的大学,已经把这个语句直接drop。我们度过了vb 和汇编的年代,goto本身就不安全,强制跳转,既容易产生歧义,又容易死循环。最重要的是不符合常规程序逻辑。

如果想真正意义的保存,你要知道保存的数据是啥啊?

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

#define TIME 3 #define N 3 int ws=0; int num[N]; char isSave[7]; int loaded = 0;

int initmsg() { int a; char * start=(loaded == 0 && ws==0) ? "开始" : "继续游戏"; printf("\n┎───────────┓"); printf("\n│ 请输入您的选择 │"); printf("\n│ 1: %s │",start); printf("\n│ 2: 游戏说明 │"); printf("\n│ 3: 退出 │"); printf("\n┗───────────┛"); printf("\n 你的选择:"); scanf("%d",&a); return a; } void gamemsg() { printf("1.输入要记忆的数字 位数\n"); printf("2.输入完成后 会出现3个 相应位数的数字\n"); printf("3.这3个数字 再1秒钟后消失\n"); printf("4.输入 文字 和符号时 提示程序错误\n"); printf("5.输入刚才出现 过的 3个数字\n"); printf("6.3次输入的 机会,数字输入正确则继续游戏,3次机会全错 则提示游戏是否继续\n"); printf("7.输入Q或者q时 程序结束\n"); printf("按任一建继续"); getch();

} void clear() { while(getchar() != '\n'); } int weishu() { int mark; char c; while(1) { regetmark: mark= initmsg(); switch(mark) { case 1: { if((ws==0 )){ goto start; }else{ return 1; } }; case 2: gamemsg(); system("cls");;goto regetmark; case 3: { exit(0); }

} start:printf("请输入位数(结束Q/q):"); if(scanf("%d", &ws)) { if(ws >= 1 && ws <= 5) break; } else if((c = getchar()) == 'q' || c == 'Q') return 0; else printf("输入错误!请重试.\n"); clear(); } clear(); return 1; }

int checkSaveFile() { FILE * fp = fopen("save.dat","rb+");

if(fp != NULL){ fscanf(fp,"%s %d %d %d %d",isSave,&ws,&num[0],&num[1],&num[2]); //fscanf(fp,"%s",isSave); } printf("isSave=%s %d %d %d %d",isSave,ws,num[0],num[1],num[2]); printf("strcmp(isSave,gmsave)%d",strcmp(isSave,"gmsave")); fclose(fp); if(ws>0) loaded=1; if(strcmp(isSave,"gmsave")==0){ //fprintf(fp,"%s %d %d %d %d","gmsave",0,0,0,0); fp = fopen("save.dat","wb+"); fclose(fp); return 1; } return 0; }

int saveDat(){ FILE * fp = fopen("save.dat","wb+"); if(fp != NULL){ fprintf(fp,"%s %d %d %d %d","gmsave",ws,num[0],num[1],num[2]); return 1; } fclose(fp); return 0; }

int play() { int i, a, b, n; int in[N]; switch(ws) { case 1:a = 0, b = 10;break; case 2:a = 10, b = 90;break; case 3:a = 100, b =900;break; case 4:a = 1000, b = 9000;break; case 5:a = 10000, b = 90000;break; } n = 0; if( ws!=0 && loaded ==1){ for(i = 0; i < N; ++i) n += printf("%d ", num[i]); }else{ for(i = 0; i < N; ++i) n += printf("%d ", num[i] = rand()%b+a); } clock_t now = clock(); while((clock() - now) / CLOCKS_PER_SEC < TIME); i = n; while(i--) putchar('\b'); printf("%*c", n, ' '); i = n; while(i--) putchar('\b'); b = 3; while(b) { printf("请输入(退出/保存:-1):"); for(i=0;i<N && scanf("%d", &in[i]); i++);{

if(in[0]==-1 || in[1]==-1 || in[2]==-1){ if(saveDat()==1){ printf("保存成功"); }else{ printf("保存失败"); } clock_t now = clock(); while((clock() - now) / CLOCKS_PER_SEC < TIME); exit(0); } if(i < N) { printf("输入有误!请重试.\n"); clear(); continue; } }

if(b > 0) { for(i = 0; i < N; ++i) if(in[i] != num[i]) { if(b > 1) printf("输入错误, 你还有%d次机会:\n", b-1); break; } if(i == N) return 1; } b--; } return 0; }

int main() { srand(time(0)); checkSaveFile(); while(weishu()) { if(!play()) { clear(); printf("3次机会已用完, 是否重来?(y继续):"); if(getchar() != 'y') break; else clear(); } else printf("恭喜你!记忆正确.\n"); ws=0; loaded = 0; } printf("Bye!"); return 0; }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
给推荐几个经典的恐怖片
是直接出国好还是在国内读完硕士预科再出国好
诛仙飞升之后技能点和天书能不能重置
脑筋急转弯 :再问一次
DNF福建一区为什么今天26号进不去?
我是1986年三月十五出生的想测一下事业和爱情
论文查重过不了怎么办,我的毕业论文几乎做不
CS1.5bot路径设定好后反应很迟钝,怎么解决
舟曲泥石流哀悼几点几分钟
给份五月天《拥抱》曲谱,最好是吉他谱
夜间磨牙是什么疾病?
百阅我的藏书出问题了
有多少男孩叫王峻泽的?
关于手机电池
谁有中日交流—标准日本语书?
推荐资讯
做帅哥有什么好的?
多大年龄不能练武术
大学毕业生进
郑州到西安动车时间表
真三魔兽怎样在浩方玩?
半夜胃胀痛是怎么回事,半夜胃胀痛是怎么回事
有一个电视游戏,像超级玛莉的,一开始的时候
求一些唯美得诗句 例如:愿得韶华刹那,开得
小孩尿床邯郸市哪里可以治
dnf最好的装备是什么啊?
武汉大学国际软件学院留学生公寓我想知道这个
为什么我的QQ空间里那些游戏比如农场等等都在
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?