#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void NEW(int *p,char *name);//实现新手教程中与小怪的战斗
void BOSS(int *p,char *name);//实现与BOSS的战斗
int BLESS(int t);//判断是否获得随机
void writeFile(char* fileStr);//将作战结果记录于一个文件
int founction(int t);//添加一个随机数,用于达到祝福的随机效果
void FEN(int f);//添加分割线
int back;//设置全局变量,用于writeFile函数中的判断语句
int main()
{
int a[3],pick,i,ret;
printf("勇士欢迎来到冒险大陆!\n现在先为自己取个名字吧:\n");
char name[20];
gets(name);
printf("你的名字是“%s”",name);//可以替换名称,以玩家输入的名称作为主角
FEN(1);
printf("初来乍到,先选择你的职业吧。\n");
printf("【1】剑士 HP(150) ATK(25) DEF(20)\n【2】弓箭手 HP(100) ATK(50) DEF(5)\n【3】盾士 HP(200) ATK(15) DEF(25)\n");
printf("输入序号来选择:");
for(i=0;;i++)//对输入非法字符的检查与处理
{
ret=scanf("%d",&pick);
if(ret!=1)
{
printf("格式错误,请重新输入!");
fflush(stdin);
}
else
{
break;
}
}
switch(pick)//用于玩家选择职业,并对各职业的血量、攻击、防御初始化
{
case 1:
a[0]=150;
a[1]=25;
a[2]=20;
printf("你已选定【剑士】\n");
break;
case 2:
a[0]=100;
a[1]=50;
a[2]=5;
printf("你已选定【弓箭手】\n");
break;
case 3:
a[0]=200;
a[1]=15;
a[2]=25;
printf("你已选定【盾士】\n");
break;
}
FEN(1);
NEW(a,name);
BOSS(a,name);
writeFile("G:\\战斗记录.txt");
return 0;
}
void NEW(int *p,char *name)
{
int hp0=50,f0=25,d0=3;
int instruct,i,ret;
printf("初入冒险,开始你的第一次冒险吧!\n");
printf("当%s走出村门时,发现了菜鸡一只,你决定把它当作自己的练手对象。\n",name);
FEN(1);
while(p[0]>0&&hp0>0)
{
printf("轮到%s的回合\n请选择【1】攻击还是【2】防御:\n",name);
for(i=0;;i++)//对非法字符的处理
{
ret=scanf("%d",&instruct);
if(ret!=1)
{
printf("格式错误,请重新输入!\n");
fflush(stdin);
}
if(instruct==1||instruct==2)
{
break;
}
else
{
printf("无此选项,请重新输入!\n");
}
}
if(instruct==1)
{
if(hp0-(p[1]-d0)<0)//当敌人血量小于0时,将血量变为0,避免血量为负
{
hp0=0;
}
if(hp0-(p[1]-d0)>0)
{
hp0=hp0-(p[1]-d0);//若血量仍为正,则正常加减
}
printf("%s对菜鸡发起了攻击,造成了%d点伤害,菜鸡HP变为%d\n",name,p[1],hp0);
FEN(1);
if(p[0]>0&&hp0<=0)
{
break;
}
}
if(instruct==2)
{
p[0]=p[0]+15;//加血
printf("%s使用了回血道具,生命值回复15点,生命变为%d\n",name,p[0]);
}
if(hp0>0)
{
printf("%s的回合结束了,轮到菜鸡行动了!\n",name);
if(f0-p[2]<=0)//由于菜鸡攻击小于角色防御力,避免出现倒加血的现象
{
printf("菜鸡未能击穿你的护甲,没有对你造成任何伤害\n");
}
if(f0-p[2]>0)//攻击大于防御力,则正常加减
{
p[0]=p[0]-(f0-p[2]);
printf("菜鸡对你造成了%d点伤害\n",f0-p[2]);
FEN(1);
}
}
}
if(p[0]<=0)
{
printf("你竟然被菜鸡打败了,看来冒险不适合你,洗洗睡吧!\n");//可重新挑战
FEN(1);
}
if(hp0<=0&&p[0]>0)
{
printf("菜鸡都被你打败了,看来你就是那个天选之人!\n");
p[0]=p[0]+20;p[1]=p[1]+15;p[2]=p[2]+5;
printf("“%s”的属性获得了提升:HP+20=%d ATK+15=%d DEF+5=%d\n",name,p[0],p[1],p[2]);
printf("你继续向远处走去。\n");
FEN(1);
}
}
void BOSS(int *p,char *name)
{
int hp1=200,d1=25,instruct,count,i,ret;
int z=BLESS(1);
FEN(1);
printf("你的表现已经惊动了大魔王!他发现你了!\n");
if(z==2)//加入判断语句,决定是否有女神的祝福
{
printf("女神的祝福没有降临到你的身上,你必须孤军奋战!\n准备战斗吧!勇士!");
}
if(z==1)
{
printf("女神的祝福降临了!你获得了随机buff加持。\n准备战斗吧!勇士!");
}
while(p[0]>0&&hp1>0)
{
srand(time(NULL));
int t=rand()%10+30;//将敌人的攻击变为随机值
FEN(1);
printf("轮到%s的回合\n请选择【1】攻击还是【2】防御:\n",name);
for(i=0;;i++)//对非法字符的处理
{
ret=scanf("%d",&instruct);
if(ret!=1)
{
printf("格式错误,请重新输入:");
fflush(stdin);
}
if(instruct==1||instruct==2)
{
break;
}
else//避免除1、2、3的数字
{
printf("无此选项,请重新输入:");
}
}
if(instruct==1)
{
if(hp1-(p[1]-d1)<0)//同菜鸟
{
hp1=0;
}
if(hp1-(p[1]-d1)>0)
{
hp1=hp1-(p[1]-d1);
}
printf("%s对魔王发起了攻击,造成了%d点伤害,魔王HP变为%d\n",name,p[1]-d1,hp1);
if(hp1<=0&&p[0]>0)
{
printf("你成功击败了魔王!%s已经成为了一名合格的冒险者!\n",name);
back=1;
}
}
if(instruct==2&&z==1)
{
count=founction(count);//设置祝福的随机效果
if(count%3==0||count%5==0)
{
p[0]=p[0]+30;