实训项目之姓名大作战

1.//存在漏洞,谁在前,谁先胜出

#include <stdio.h>

#include <string.h>
#include <math.h>
#include <windows.h>


typedef struct _PLAYER
{
char name[32]; // 姓名
int HP; // 生命力
int atk; // 攻击力
}PLAYER;


void print(PLAYER *p);
void calc(PLAYER *p);
int fight(PLAYER *pa, PLAYER *pb);


main()
{
PLAYER p1 = {0}, p2 = {0};


// 输入姓名并计算属性
printf("请输入两个名字:");
scanf("%s %s", p1.name, p2.name);
calc(&p1);
calc(&p2);


while (1)
{
if (fight(&p1, &p2) == 1)
{
printf("%s胜出!\n", p1.name);
break;
}
Sleep(200);


if (fight(&p2, &p1) == 1)
{
printf("%s胜出!\n", p2.name);
break;
}
Sleep(200);
}
system("pause");
}


// 计算属性方法,可适当调整
void calc(PLAYER *p)
{
int i, count = 0;


for (i = 0; i < strlen(p->name); i++)
{
count += abs(p->name[i]);
}
p->HP = count % 21 + 80; // HP范围:80-100
p->atk = count % 21 + 20; // atk范围:20-40


print(p);
}


// 打印属性方法
void print(PLAYER *p)
{
printf("姓名:%s  生命力:%d  攻击力:%d\n", p->name, p->HP, p->atk);
}


// 战斗,pa为攻击方,pb为防御方
int fight(PLAYER *pa, PLAYER *pb)
{
int harm = 0;


printf("[%s] 攻击了 [%s],", pa->name, pb->name);
harm = pa->atk;
// 暴击
if (rand() % 100 > 70)
{
harm += pa->atk * 0.5; // 暴击加50%伤害
printf("并打出了暴击,");
}
pb->HP -= harm;
if (pb->HP < 0)
{
pb->HP = 0;
}
printf("造成了 <%d> 点伤害,[%s] 还剩余 {%d} 点生命力\n", harm, pb->name, pb->HP);
if (pb->HP == 0)
{
return 1;
}
return 0;

}

2.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值