c语言 自动战斗小程序
#include
#include
#include
#include
int main()
{char name1[10],name2[10]; //名字
int a1,b1,c1,a2,b2,c2; //角色12的攻击防御回复数值
int xue1,xue2,c,jia1=0,jia2=0; //血量,护甲
xue1=100;//玩家的基础血量
xue2=100;
printf("请输入角色1的名字,按回车确认\n");
gets(name1);//获得玩家的名字
t1:printf("好,请输入您的攻击力,防御力,恢复力 格式为 数字空格数字空格数字,如6 2 2,注意三个数值相加必须为10\n");
scanf("%d %d %d",&a1,&b1,&c1);//获得玩家的能力值
if(a1+b1+c1!=10)//判断能力值输入是否符合规则
{printf("错误,请重新输入\n");
goto t1;
}
printf("请输入角色2的名字,按回车确认\n");
while((c=getchar())!=EOF&&c!='\n');
gets(name2);
t2:printf("好,请输入您的攻击力,防御力,恢复力 格式为 数字空格数字空格数字,如6 2 2,注意三个数值相加必须为10\n");
scanf("%d %d %d",&a2,&b2,&c2);
if(a2+b2+c2!=10)
{printf("错误,请重新输入\n");
goto t2;
}
srand(time(0));//随机先手
c=rand()%2+1;
printf("现在基本属性如下\n");//显示基本信息
puts(name1);
printf("攻击=%d 防御=%d 回复=%d\n",a1,b1,c1);
puts(name2);
printf("攻击=%d 防御=%d 回复=%d\n",a2,b2,c2);
k:puts(name1);
printf("HP %d/100 ",xue1);
if(jia1==0)
printf("无护甲\n");//判断有无护甲
else
printf("有护甲\n");
puts(name2);
printf("HP %d/100 ",xue2);
if(jia2==0)
printf("无护甲\n");
else
printf("有护甲\n");
if(c==1)//角色行动方转换
c=2;
else
c=1;
Sleep(1000);
printf("行动阶段\n");
if(c==1)//判断行动方
{
int p;
srand(time(0));//根据玩家输入的能力值随机行动方式
p=rand()%10+1;
if(p>=1&&p<=a1)
goto ta1;// 攻击
if(p>a1&&p<=a1+b1)
goto tb1;//防御
if(p>a1+b1&&p<=10)
goto tc1;//加血
Sleep(1000);
}
if(c==2)
{
int p;
srand(time(0));
p=rand()%10+1;
if(p>=1&&p<=a2)
goto ta2;
if(p>a2&&p<=a2+b2)
goto tb2;
if(p>a2+b2&&p<=10)
goto tc2;
Sleep(1000);
}
ta1:
if(jia2==0)//判断有无护甲
{
srand(time(0));
xue2-=rand()%15+10;//随机造成伤害
puts(name1);
printf("攻击了\n");
puts(name2);
printf("造成 %d 的伤害\n",rand()%15+10);
if(xue1<0||xue2<0) goto f;//判断是否死亡
Sleep(1000);
system("cls");
goto k; //回到显示信息阶段,循环行动
}
else//如果有护甲
{
srand(time(0));
if(rand()%10+1>=1&&rand()%10+1<4)//判断概率
{
puts(name1);
printf("攻击了\n");
puts(name2);
puts(name2);
printf("完全抵挡了攻击\n");//40%概率抵挡伤害
jia2=0;//护甲消失
Sleep(1000);
system("cls");
goto k;
}
else
{
xue2-=(rand()%15);
puts(name1);
printf("攻击了\n"); //60%概率抵挡部分伤害
puts(name2);
puts(name2);
printf("格挡了部分攻击,但仍受到 %d 的伤害\n",(rand()%15));
jia2=0;
if(xue1<0||xue2<0) goto f;//判断死亡
Sleep(1000);
system("cls");
goto k;
}
}
ta2:
if(jia1==0)//相同,角色2的攻击阶段
{
srand(time(0));
xue1-=rand()%15+10;
puts(name2);
printf("攻击了\n");
puts(name1);
printf("造成 %d 的伤害\n",rand()%15+10);
if(xue1<0||xue2<0) goto f;
Sleep(1000);system("cls");
goto k;
}
else
{
srand(time(0));
if((rand()%10+1)>=1&&(rand()%10+1)<4)
{
puts(name2);
printf("攻击了\n");
puts(name1);
puts(name1);
printf("完全抵挡了攻击\n");
jia1=0;
Sleep(1000);system("cls");
goto k;
}
else
{
xue1-=(rand()%15);
puts(name2);
printf("攻击了\n");
puts(name1);
puts(name1);
printf("格挡了部分攻击,但仍受到 %d 的伤害\n",(rand()%15));
jia1=0;
if(xue1<0||xue2<0) goto f;
Sleep(1000);system("cls");
goto k;
}
}
tb1://防御
{
jia1=1;//有护甲
puts(name1);
printf("获得了护甲\n");
Sleep(1000);
system("cls");
goto k;
}
tb2:
{
jia2=1;
puts(name2);
printf("获得了护甲\n");
Sleep(1000);system("cls");
goto k;
}
tc1://角色2的护甲阶段
{
xue1+=10;
puts(name1);
printf("使用了回复药,回复18点生命。\n");
Sleep(1000);
system("cls");
goto k;
}
tc2:
{
xue2+=10;
puts(name2);
printf("使用了回复药,回复18点生命。\n");
Sleep(1000);system("cls");
goto k;
}
f:printf("结束战斗\n");//结束战斗阶段
if(xue1<0)//角色1死亡
{
puts(name1);
printf("落败\n");
system("pause");
}
if(xue2<0)//角色2死亡
{
puts(name2);
printf("落败\n");
system("pause");
}
}
就看着能简化下不