为了可玩性强行加的
void wan()//玩游戏,获得能量与money
{
printf("这是一个小游戏,我劝你最好玩一下!<( ̄︶ ̄)>\n");
int p,n,i,t,a[10],b,d,e,j;
printf("文字密码规则:\t红:1\t绿:2\t黄:3\t蓝:4\t紫:5\t青:6\t白:0\n");
printf("例如输出:这是绿色文本,密码就是2\n");
printf("请选择游戏难度:\t1、简单\t2、困难\t3、极难\n");
scanf("%d",&p);
char yanse[][7]={"白","红","绿","黄","蓝","紫","青",};
struct node* head, * tail, * m;
head = (struct node*)malloc(sizeof(struct node));//先在头指针开辟一个存储空间,但是不储存数据
head->data = 9;
head->next = NULL;//初始化头指针指向空指针
tail = NULL;//尾指针初始化为空指针
n=p*3;
i = 0;
while (i<n)
{
Sleep(1234);
m = (struct node*)malloc(sizeof(struct node));
srand(time(NULL));
t=rand()%1000;//随机数
t=t%10;
if(t>=7)
m->data = t-5;
else
m->data = t+1;
m->next = NULL;//p的指向下一个指针为空指针
if (head->next == NULL)
head->next = m;//固定头指针指向的指针,然后保持不变
else
tail->next = m;//此时的空间是新开辟的空间,tail->next即是上一个空间p->next
tail = m;//为指针指向p,可以理解作为一个桥梁,用来储存是一个指向的空间
srand(time(NULL));
a[i] = (rand()%10+m->data+2) %10; // 生成随机数
if(a[i]>=7)
a[i] = a[i]-5;
i++;
}
printf("\n");
b=0;
for (j = 0, m = head->next; j < n; m = m->next,j++)
{
printf("\033[3%dm",m->data);//改变输出颜色
e=a[j];
printf("%5s",yanse[e]);
b=b*10+e;
}
printf("\n");
Sleep(2000); // 等待
printf("\033[1A\033[2K"); // 清除上一行的内容
printf("\033[0m");
printf("请输入密码:");
scanf("%d",&d);
if(b==d)
{
printf("Win!\n");
energy+=n*300;
money+=n*2;
printf("energy+%d,money+%d\n",n*300,n*2);//输出
}
else
printf("Fail!\n");
Em(&energy,&money);
}
源代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
int energy=0,money=0;
void Begin();//goto语句 switch语句
void Former();//文件
void Save();//文件
void Out();
void Grameexplain();
void mid();
void end();
void wan();//链表,增加可玩性,两关,去往另外两个选择,一维数组,
void background();
void Kouhao();//字符串
void one();
void two();
void three();//二维数组
void four();
void Em(int *e,int *m);//能量,钱总结,指针
void Xs();
void Xiansuo();
typedef struct//结构体,
{
int energy;
int money;
}Load;
void Em(int *e,int *m)
{
printf("你现在的能量为:%d,你的余额是:%d元\n",*e,*m);
if(*e<100)
{
printf("能量不足,你倒下了。\nGame over!");
exit(0);//强制返回到主函数
}
if(*m<-5)
{
printf("负债过多,无法进行!\nGame over!");
exit(0);//强制返回到主函数
}
}
void background()
{
printf("这是一个风雨交加的夜晚,你才下课……\n");
getchar(); // 等待用户按enter键
printf("你一个人背着书包走在回寝的路上。\n");
getchar(); // 等待用户按enter 键
printf("你打着伞,看着昏暗的道路,满天的大雨和拥挤的学生,和面前的三条路,\n");
getchar();
printf("你决定:\n");
}
struct node//先定义一个结构体,里面包含数据与结构体指针
{
int data;
struct node* next;
};
void wan()//玩游戏,获得能量与money
{
printf("这是一个小游戏,我劝你最好玩一下!<( ̄︶ ̄)>\n");
int p,n,i,t,a[10],b,d,e,j;
printf("文字密码规则:\t红:1\t绿:2\t黄:3\t蓝:4\t紫:5\t青:6\t白:0\n");
printf("例如输出:这是绿色文本,密码就是2\n");
printf("请选择游戏难度:\t1、简单\t2、困难\t3、极难\n");
scanf("%d",&p);
char yanse[][7]={"白","红","绿","黄","蓝","紫","青",};
struct node* head, * tail, * m;
head = (struct node*)malloc(sizeof(struct node));//先在头指针开辟一个存储空间,但是不储存数据
head->data = 9;
head->next = NULL;//初始化头指针指向空指针
tail = NULL;//尾指针初始化为空指针
n=p*3;
i = 0;
while (i<n)
{
Sleep(1234);
m = (struct node*)malloc(sizeof(struct node));
srand(time(NULL));
t=rand()%1000;//随机数
t=t%10;
if(t>=7)
m->data = t-5;
else
m->data = t+1;
m->next = NULL;//p的指向下一个指针为空指针
if (head->next == NULL)
head->next = m;//固定头指针指向的指针,然后保持不变
else
tail->next = m;//此时的空间是新开辟的空间,tail->next即是上一个空间p->next
tail = m;//为指针指向p,可以理解作为一个桥梁,用来储存是一个指向的空间
srand(time(NULL));
a[i] = (rand()%10+m->data+2) %10; // 生成随机数
if(a[i]>=7)
a[i] = a[i]-5;
i++;
}
printf("\n");
b=0;
for (j = 0, m = head->next; j < n; m = m->next,j++)
{
printf("\033[3%dm",m->data);//改变输出颜色
e=a[j];
printf("%5s",yanse[e]);
b=b*10+e;
}
printf("\n");
Sleep(2000); // 等待
printf("\033[1A\033[2K"); // 清除上一行的内容
printf("\033[0m");
printf("请输入密码:");
scanf("%d",&d);
if(b==d)
{
printf("Win!\n");
energy+=n*300;
money+=n*2;
printf("energy+%d,money+%d\n",n*300,n*2);//输出
}
else
printf("Fail!\n");
Em(&energy,&money);
}
void one()
{
Load lo={250,5};
energy+=lo.energy;
money+=lo.money;
Em(&energy,&money);
printf("\n");
Sleep(1000);
printf("你选择了走隐蔽的小路(中路)\n");
getchar(); // 等待用户按enter键
printf("人太多了,雨又这么大,为了避免摔倒,聪明的你选择了走中间隐蔽的小路回寝室。");
getchar(); // 等待用户按键
printf("虽然没有路灯,道路黑暗,但你并不害怕,反而因为雨势心情不虞的你心情放松愉悦起来。");
getchar(); // 等待用户按键
printf("这时,你听到了一个奇怪的声音。虽然这个声音被淅淅沥沥的大雨遮盖,但你可是拥有两只完整的耳朵的人,一下就听到了,并且走上前观察。");
getchar(); // 等待用户按键
printf("性感的身材,圆圆的猫眼,穿着昂贵的皮草,在大雨中瑟瑟发抖。\n此时此景,你同情心爆发,伸出手想要解救这个可怜的猫学姐。");
getchar(); // 等待用户按键
printf("喵!");
getchar(); // 等待用户按键
printf("刚伸出手,一声凄厉的猫叫出现。");
getchar(); // 等待用户按键
printf("你只好收回手,看着学姐远去。");
getchar(); // 等待用户按键
printf("你回寝室睡觉了。\n");
Em(&energy,&money);
}
void two()
{
int n2;
Load lo={300,5};
energy+=lo.energy;
money+=lo.money;
Em(&energy,&money);
printf("你选择了拿出手机刷视频(下路)\n");
getchar();
printf("刚打开抖音,一片红光就反射到你的脸上。\n你刷到了杀人视频,满屏的马赛克让你不开心,你选择:\n");
Sleep(1000);
T:
printf("1、关掉手机\n2、刷下一个视频\n3、关掉抖音,刷快手\n");
scanf("%d",&n2);
if(n2==1)
{
energy+=250;
printf("你的能量加250!\n");
}
else if(n2==2)
{
money+=1;
printf("你的余额加1!\n");
}
else if(n2==3)
{
money+=3;
printf("你的余额加3!\n");
}
else
{
printf("请不要做无效的选择!请重新输入!\n");
goto T;
}
Sleep(1000);
printf("刷着刷着,忽然一股香味吸引了你,你看了过去,却只看到一个飞过去的黑影。\n");
getchar();
printf("你想了想,没有在意,到了寝室,就睡觉了。\n");
Em(&energy,&money);
}
void three()//二维数组
{
int i;
int n3;
Load lo={150,10};
energy+=lo.energy;
money+=lo.money;
Em(&energy,&money);
char changs[][20]={"红肠","脆骨大肠","都要","不买了","保存进度","调取进度"};
char priaces[][20]={"2块","3块","5块","0块","有事先走一步","让我康康"};
printf("你选择了去超市买根淀粉肠(上路)\n");
getchar();
printf("深夜就应该放毒,在这个冰冷孤独的夜晚,你需要一根炽热的淀粉肠来温暖你空虚的胃。\n");
getchar();
printf("于是饥饿的你选择了最上面的路,走到了最近的便利店。\n");
getchar();
for(i=0;i<6;i++)
{
printf("%-5d %-10s %-10s\n",i+1,changs[i],priaces[i]);
}
H:
printf("阿姨问你选什么肠,你看着手机了的余额10块钱,你选择:\n");
scanf("%d",&n3);
if(n3==1)
{
energy+=100;
money-=2;
printf("你的能量加100!\n");
}
else if(n3==2)
{
energy+=200;
money-=3;
}
else if(n3==3)
{
energy+=399;
money-=5;
}
else if(n3==4)
{
printf("你控制住了自己的欲望,战胜了百分之99的玩家!\n");
goto F;
}
else if(n3==5)
{
Save();
}
else if(n3==6)
{
Former();
}
else
{
printf("请不要做无效的选择!请重新输入!");
goto H;
}
Em(&energy,&money);
printf("\n");
getchar();
printf("你拿着热腾腾的红肠,刚准备美滋滋地咬上一口——\n");
getchar();
printf("这时,一声猫叫惊到了你,一个黄色的身影闪过,你被撞到了,红肠滚到了远处。\n");
getchar();
printf("你愤怒的看向罪魁祸首。\n");
getchar();
printf("看清过后,你一愣,那是才大一的你惹不起的人物,你只好一笑了之。\n");
getchar();
F:
printf("没办法,你只好回寝室睡觉了。\n");
}
void four()
{
Load lo={500,1};
energy+=lo.energy;
money+=lo.money;
printf("energy+%d,money+%d\n",500,1);//输出
printf("\n");
getchar();
Em(&energy,&money);
printf("你选择了都不选,直接回寝室睡觉\n");
getchar();
printf("成年人不做选择,孤傲的你不会顺从。\n");
getchar();
printf("你决定回去睡觉。\n");
getchar();
printf("你睡了一个好觉。\n");
energy+=500;
printf("energy+%d,money+%d",500,0);
printf("\n");
Sleep(1000);
Em(&energy,&money);
}
void Begin()//goto语句 switch语句
{
int n,t;
background();
printf("\n");
Sleep(1000);
printf("1、走隐蔽的小路(中路)\n");
printf("2、拿出手机刷视频(下路)\n");
printf("3、去超市买根淀粉肠(上路)\n");
printf("4、都不选,直接回寝室睡觉\n");
printf("5、随机选择\n");
printf("6、保存进度\n");
printf("7、调取进度\n");
L:
printf("请输入你的选择:\n");
scanf("%d",&n);
switch(n)
{
case 1:
one();
break;
case 2:
two();
break;
case 3:
three();
break;
case 4:
four();
break;
case 5:
srand(time(NULL));
t=rand()%1000;//随机数
if(t>70)
{
one();
}
else if(t>30)
{
two();
}
else if(t>0)
{
three();
}
else
{
four();
}
break;
case 6:
Save();
break;
case 7:
Former();
break;
default:
printf("输错啦!\n请再输一次:");
goto L;
break;
}
}
void Former()//文件,加载游戏
{
FILE *fp;
if((fp=fopen("demo-a.txt","r"))==NULL)//判断文件是否成功打开
{
printf("打开失败!\n");
exit(0);//打开不成功,用exit(0)终止程序
}
else
{
fscanf(fp,"%d,%d",&energy,&money);
fclose(fp);
printf("游戏进度加载成功!\n");
}
}
void Save()//文件,保存游戏
{
FILE *fp;
if((fp=fopen("demo-a.txt","w"))==NULL)//判断文件是否成功打开
{
printf("打开失败!\n");
exit(0);//打开不成功,用exit(0)终止程序
}
else
{
fscanf(fp,"%d,%d",&energy,&money);
fclose(fp);
printf("游戏进度保存成功!\n");
}
}
void Out()
{
printf("恭喜你经受住了考验,没有打开这个好玩的游戏。\n");
getchar();
printf("人生如谜,而你没有走进来。\n");
getchar();
printf("谢谢游玩!\n");
}
void Grameexplain()
{
printf("规则介绍:\n");
getchar();
printf("人生如谜语,前路看自己\n");
getchar();
printf("这是一个解密型小游戏,请您跟随指示进行您内心的选择,最后解出谜底。\n");
getchar();
printf("每个选择都会导向不同的结果,希望您慎重选择!\n");
getchar();
printf("本游戏由本人倾力编写,本人拥有所有解释权。\n");
getchar();
printf("最后,请您谨记我们的口号:\n");
getchar();
printf("谜语之内,游戏之间。纵使星移斗转,天翻地覆,你自无忧无惧,因为世界为你而生!\n");
getchar();
printf("祝您游戏愉快!\n");
}
void Kouhao()//字符串
{
char kh[50];
Sleep(1000);
printf("请输入剩下口号:\n");
printf("谜语之内,游戏之间。纵使星移斗转,天翻地覆,你自无忧无惧,因为——\n");
printf("\n");
scanf("%s",kh);
if((strcmp(kh,"世界为你而生!"))==0)
{
printf("恭喜你,答对了!\n");
energy+=500;
money+=50;
printf("energy+500,money+50");
Em(&energy,&money);
printf("这是一条神奇的回寝路,四个时间线同时进行!\n");
}
else
{
printf("真遗憾,答错了!\n");
printf("请记住:世界为你而生!\n");
}
}
void mid()
{
printf("第二天,你一觉睡到日上三竿,错过了早八,才知道今天停课了。\n");
getchar();
printf("你惊喜过后,不免疑惑,打听过后才知道,原来是你的大学突然爆出一个新闻:\n");
getchar();
printf("在学校教学楼旁边的草地里发现了一个被水浸泡的发烂的红色尸体!\n");
getchar();
printf("如果不是昨晚的大雨,这个尸体可能永远不会被发现!\n");
getchar();
printf("你看着那个红色尸体,想起昨晚的一幕幕,你恍然大悟!\n");
getchar();
printf("淀粉肠督察大队立即包围现场,宣布提供线索者,可以加学分!\n");
getchar();
printf("同学们激动不已议论纷纷,对着那个红色淀粉肠尸体指指点点,都在猜测谁是凶手\n");
getchar();
printf("而这个答案只有你知道!(或许你也不知道?)\n");
}
void end()
{
printf("\n");
Sleep(1000);
printf("你知道了来龙去脉!\n");
getchar();
printf("四个时间线同时进行!\n");
getchar();
printf("猫学姐被走小路的你惊跑了,\n");
getchar();
printf("逃向了下面的便利店,却不小心弄掉了刚斥巨资买烤肠的你。\n");
getchar();
printf("而下路的你也注意到了猫学姐,只是没有在意。\n");
getchar();
printf("而烤肠被一夜风雨冲刷到教学楼旁的草坪,直到第二天被人们发现。\n");
getchar();
printf("你心里明白其实真正导致这一切的是你,但是你不想认罪,就冷酷无情地让可怜无辜的猫学姐做了替罪羊!\n");
getchar();
printf("不愧是你!\n");
}
void Xiansuo()
{
int i,n,t;
Em(&energy,&money);
char xs[][10]={"外形","时间跳跃","时间倒流","答题"};
char pay[][10]={"5块","5块","7块","free"};
char en[][10]={"200","400","500","free"};
printf(" money energy\n");
for(i=0;i<4;i++)
{
printf("%-4d%-10s%-10s%-10s\n",i+1,xs[i],pay[i],en[i]);
}
scanf("%d",&n);
if(n==1)
{
money-=5;
energy-=200;
Em(&energy,&money);
printf("你刷抖音时看到的身影是黄色。\n");
}
else if(n==2)
{
money-=5;
energy-=400;
Em(&energy,&money);
srand(time(NULL));
t=rand()%1000;
if(t>88)
{
money-=5;
energy-=250;
printf("跳跃成功!\n");
one();
}
else if(t>66)
{
money-=5;
energy-=300;
printf("跳跃成功!\n");
two();
}
else if(t>44)
{
money-=10;
energy-=150;
printf("跳跃成功!\n");
three();
}
else
printf("跳跃失败!\n");
}
else if(n==3)
{
money-=7;
energy-=500;
Em(&energy,&money);
srand(time(NULL));
t=rand()%1000;
if(t>99)
{
printf("倒流成功!\n");
Begin();
}
else if(t>88)
printf("哦豁,倒流失败!\n");
else
{
printf("倒流成功!\n");
Xs();
}
}
else
{
Kouhao();
}
}
void Xs()
{
int i,n,c=0;
char xiongshou[][20]={"抖音","脆骨大肠","你自己","猫学姐","我要买线索 "};
Em(&energy,&money);
Sleep(1000);
do{
printf("\n");
printf("请选择你心中的凶手:\n");
printf("\n");
for(i=0;i<5;i++)
{
printf("%-4d%-4s\n",i+1,xiongshou[i]);
}
scanf("%d",&n);
if(n==4)
{
printf("哇!答对了!恭喜你打败了百分之%d的玩家,学分upup!\n",99-c*33);
c=4;
end();
printf("\n");
printf("谜语之内,游戏之间。纵使星移斗转,天翻地覆,你自无忧无惧,因为世界为你而生!\n");
printf("\n");
printf("Game over!\n");
exit(0);
}
else if(n==5)
{
Xiansuo();
Xs();//递归
}
else
{
c++;
printf("他不是凶手,你还有%d次机会!\n",3-c);
}
}while(c<3);
if(c==3)
{
end();
printf("然而这个计划失败了,你被淀粉肠督察队抓住了!\n");
printf("\n");
printf("Game over!\n");
exit(0);
}
}
int main()
{
int n;
printf("欢迎来到解密游戏!\n");
getchar();
printf("请输入你的选择:\n");
O:
K:
F:
printf("1、开始游戏\n2、读取存档\n3、保存游戏\n4、退出游戏\n5、游戏说明\n");
scanf("%d",&n);
switch(n)
{
case 1:
Begin();
printf("\n");
wan();
mid();
Xs();
break;
case 2:
Former();
goto F;
break;
case 3:
Save();
break;
case 4:
Out();
break;
case 5:
Grameexplain();
goto O;
break;
default:
printf("输错啦!\n请再输一次:\n");
goto K;
break;
}
}