基础且易懂的ikun制作的《ikun历险记》文字游戏

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
struct legend{
	char name[30];
	int hp;
	int health;
	int damage;
	int level;
};
struct monsters{
	char name[30];
	int hp;
	int damage;
};
void suffer(struct legend *a,int event);
void opportunity(struct legend *a,int event);
void fight(struct legend *a,int event,struct monsters mon);
void plus(struct legend *a,int event);
int main()
{
	char a;
	int things,dragon=0,open=0;
	struct legend man;
	printf("II___ikun历险记___II\n********************\n   [输入您的名字]\n********************\n");
	struct monsters mon[4]={{"嚎啸马",40,13},{"泥醉嚎狮",80,6},{"梅狸猫",65,12},{"珍德食泥鸭",80,10}};
	/*for(int z=0;z<4;z++)
	{
		printf("%s %d %d\n",mon[z].name,mon[z].hp,mon[z].damage);
	}*/
	scanf("%s",&man.name);
	man.hp=100; 
	man.health=20;
	man.damage=15;
	man.level=0;
	printf("您的角色创立成功,名叫'%s',以下是他的属性:\nhp=%d\nhealth=%d\ndamage=%d\nlevel=%d\n随意按键加回车继续,按b键结束\n",man.name,man.hp,man.health,man.damage,man.level); 
	scanf("\n%c",&a);
	srand(time(0));
	while(1)
	{
		things=rand()%100;
		if(open==1&&things>=95)
		{
			things-=5;
			printf("还剩%d回合",10-dragon);
		}
		int event=rand()%4+1;
		if(things<=10)
		{
			printf("机遇:\n");
			opportunity(&man,event);
		}
		else if(things>10&&things<=30)
		{
			printf("遭遇:\n");
			suffer(&man,event);
		}
		else if(things>30&&things<=50)
		{
			printf("升级:\n(除升级事件外,其它事件等级提升无回复等buff)\n");
			plus(&man,event);
		}
		else if(things>50&&things<=80)
		{
			printf("战斗:\n");
			fight(&man,event,mon[event-1]);
		}
		else if(things>80&&things<=95)
		{
			int j,c=0; 
			printf("你来到了一个神秘商店,你可以用60生命值兑换店内任何一物品,或按其它键离开商店\n"); 
			printf("(1)ikun专属篮球 damage+20\t(2)背带裤 health+12\n(3)中分 health+8 damage+8\t(4)鸡汤 level+4\n");
			scanf("%d",&j);
			if(j==1)
			man.damage+=20;
			else if(j==2)
			man.health+=12;
			else if(j==3)
			{
				man.health+=8;
				man.damage+=8;
			} 
			else if(j==4)
			man.level+=4;
			else
			{
				printf("您选择离开\n");
				c=1;
			}
			c==0?man.hp-=60:0;
		}
		else 
		{
			printf("梦里遇见神龙,神龙说可以直接带你得道升天,前提是需要活过10回合\n");
			open=1; 
		}
		if(open==1)
		dragon++;
		
		printf("%s:\nhp=%d\nhealth=%d\ndamage=%d\nlevel=%d\n",man.name,man.hp,man.health,man.damage,man.level);
		scanf("\n%c",&a);
		if(man.health<8)
		{
			printf("每回合健康值低于8,生命值-10\n"); 
			man.hp-=10;
		}
		if(a=='b')
		{
			printf("你确定要退出吗?若确定,请再次按b键,若取消请按b以外的其它键\n");
			scanf("\n%c",&a);
			if(a=='b')
			break; 
		}
		if(man.level==25||dragon==10)
		{
			printf("你已成功修炼得道,飞升入坤界,坐享无数篮球\n");
			break; 
		}
		if(man.hp<=0)
		{
			printf("你噶了\n");
			break;
			
		}
		man.health-=1;
	}
	printf("********************游戏结束********************\n");
}
void opportunity(struct legend *a,int event)
{
	switch(event)
	{
		case 1:
			printf("你遇到了鸽鸽,鸽鸽给你了一个坤蛋,你吃掉了它,健康值+5\n");
			a->health+=5; 
			break;
		case 2:
			printf("你捡到了坤拳秘籍残页,钻研了一番,伤害值+10\n");
			a->damage+=10;
			break;
		case 3:
			printf("你遇到了一颗荔枝树,吃了些荔枝,生命值+50\n"); 
			a->hp+=50;
			break;
		default:
			printf("你偶然捡到鸽鸽的CD,观看后,悟出只因大道,各项能力增加\n");
			a->hp+=20;
			a->damage+=5;
			a->health+=2;
	}
}
void suffer(struct legend *a,int event)
{
	switch(event)
	{
		case 1:
			printf("遭到一群小黑子的攻击,健康值-3,生命值-35\n"); 
			a->health-=3;
			a->hp-=25;
			break;
		case 2:
			char c;
			printf("你在一空旷处看到了一枚篮球,是否要去捡?\n是(y)\t否(n)\n");  
			scanf("\n%c",&c);
			if(c=='n')
			{
				printf("你觉得没有必要冒险,跑了\n");
				break;
			}
			else if(c!='y')
			{
				printf("按其它键默认捡篮球\n");
				c='y'; 
			}
			if(c=='y')
			{
				int b=rand()%3;
				if(b==0)
				{
					printf("你成功拿到篮球,没有任何阻碍,拥有了一个篮球,你的伤害+10\n"); 
					a->damage+=10;
				}
				else if(b==1)
				{
					printf("你被一群虾头男偷袭,不得已逃跑,生命值-30\n");
					a->hp-=30; 
				}
				else
				{
					printf("这个篮球是陷阱,你被一群鸽鸽的女粉丝围攻,健康值-8\n");
					a->health-=8;
				}
			}
			break;
		case 3:
			printf("你遇到一群强盗,是拼死抵抗还是屈服缴械?\n抵抗(y)\t缴械(n)\n"); 
			char b;
			scanf("\n%c",&b);
			if(b=='n')
			{
				printf("你知道拼死抵抗会吃亏,于是乖乖上缴武器(hp-15;damage-7)\n");
				a->hp-=15;
				a->damage-=7; 
			}
			else if(b!='y'&&b!='n')
			{
				printf("按其它键默认抵抗");
				b='y'; 
			}
			if(b=='y')
			{
				int hp,health,damage;
				if(a->damage>=30&&a->damage<60)
				{
					hp=25;health=2;damage=7;
				}
				else if(a->damage>=60)
				{
					hp=15;health=1;damage=4;
				}
				else
				{
					hp=35;health=3;damage=10;
				}
				printf("你与强盗交手,打退了强盗,因此也受伤(hp-%d;health-%d;damage+%d)\n",hp,health,damage);
				a->hp-=hp;
				a->health-=health; 
				a->damage+=damage;
			}
			break; 
		default:
			printf("你误打误撞地走进一个山洞,里面有练习两年半的得道高鸡,你被他打至重伤,生命值-60\n");
			a->hp-=60; 
			break;
	}
}
void plus(struct legend *a,int event)
{
	int i=0;
	switch(event)
	{
		case 1:
			printf("你得到一本《武林秘鸡》,修炼之后等级提升1\n");
			i++;
			break;
		case 2:
			printf("受到高人指点,等级提升1\n");
			i++;
			break;
		case 3:
			printf("找到一处风水宝地,修炼三天,等级提升2\n"); 
			i+=2;
			break;
		default:
			printf("遇到一个神秘商人,他说他也是ikun,所以可以赠送一本秘鸡,但是需要靠自己的运气\n(三本中只有一本是秘鸡,在第一本(1),第二本(2),第三本(3),中任选其一)\n");
			int m,n;
			scanf("\n%d",&n);
			m=rand()%3+1;
			if(n==m)
			{
				printf("你运气很好,抽到了秘鸡,修炼之后等级+3\n"); 
				i+=3;
			}
			else
			{
				printf("很可惜,你没抽到秘鸡\n"); 
			}
			break;
	}
	for(i;i>0;i--)
	{
		int k;
		printf("每升一级可以选择一项加成,请选择您要给人物所加的属性:\n生命+10(1)\t健康值+2(2)\t伤害+2(3)");
		scanf("%d",&k);
		if(k!=1&&k!=2&&k!=3)
		{
			printf("按其它键默认加生命值");
			a->hp+=10; 
		}
		if(k==2)
		a->health+=2;
		else if(k==3)
		a->damage+=2;
		else if(k==1)
		a->hp+=10;
		a->level++;
	}
}
void fight(struct legend *a,int event,struct monsters mon)
{
	char n;
	printf("你遇到了%s:\nhp=%d\ndamage=%d\n是否与其对战?\n对战(y)\t逃跑(n)\n",mon.name,mon.hp,mon.damage);
	scanf("\n%c",&n);
	if(n=='n')
	{
		printf("你觉得不敌,于是逃跑(逃跑会受到怪物造成的一次伤害),且一无所获\n");
		a->hp-=mon.damage; 
	}
	else if(n!='y'&&n!='n')
	{
		printf("按其它键默认对战\n");
		n='y'; 
	}
	if(n=='y')
	{
		int i=0;
		for(;mon.hp>0;i++)
		{
			mon.hp-=a->damage;
		}
		printf("你受到了%d的伤害,但是打败了%s,等级+1\n",i*mon.damage,mon.name);
		a->hp-=i*mon.damage;
		a->level+=1;
		switch(event)
		{
			case 1:
				printf("你吃掉了马鞭,健康值+5\n");
				a->health+=5;
				break;
			case 2:
				printf("你拔下了狮子的牙齿,伤害+5\n");
				a->damage+=5;
				break;
			case 3:
				printf("你拿梅狸猫的答辩泡了杯猫屎咖啡,生命值+10\n"); 
				a->hp+=10;
				break;
			default:
				printf("你吃了鸭爪,等级+1\n");
				a->level++; 
				break;
		}
	}
}

 

因为这也是短时间内写出来的,有许多明显的缺陷,例如必须要输入一个随机按键才可继续运行,或者一些bug等等;

加上基础不是很扎实,代码太长且些许多余,这里我会在之后的学习中更加精进。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ARuiiiiiii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值