姓名大战c语言,c语言姓名大作战游戏

结构体内容为 玩家名字 血量,攻击力,防御力

通过名字来计算出两个玩家各自的初始血量,攻击力,防御力

#include

#include

#include

#include

#include

typedef struct st

{

char name[20];

int hp;

int stk;

int fangyu;

}STU;

void set_color(int color)

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);

}

void js(STU *p)

{

int i,s=0;

for(i=0; iname); i++)

{

s += abs(p->name[i]);

}

p->hp = s % (200-150+1)+150;

p->stk = s % (50-30+1)+30;

p->fangyu = s%(5-1)%5;

}

int zhangdou(STU *p1, STU *p2)

{

int tstk; //保存p1的攻击力

int tfy; //保存p2的防御力

tstk = p1->stk;

tfy = p2->fangyu;

printf("[%s]向[%s]发起攻击--",p1->name, p2->name);

if (rand()%100 > 70)

{

set_color(4);

printf(" *暴击* ");

set_color(7);

tstk+=tstk/2;

}

if (rand()%100<10)

{

set_color(4);

printf(" *超级防御* ");

set_color(7);

tfy=tfy+5;

}

tstk-=tfy;

if (tstk < 0)

tstk=0;

p2->hp -= tstk;

if (p2->hp < 0)

{

p2->hp = 0;

}

printf("[%s]受到了%d点伤害并抵挡%d点伤害,HP剩余%d\n\n",p2->name, tstk, tfy, p2->hp);

if (p2->hp == 0)

{

return 1;

}

return 0;

}

main()

{

STU p1,p2,*p;

srand(time(NULL));

printf("输入两个玩家姓名:");

scanf("%s%s",p1.name, p2.name);

system("cls");

//计算hp和stk

js(&p1);

js(&p2);

printf("姓名: %s hp: %d 攻击力: %d 防御力: %d\n",p1.name,p1.hp,p1.stk, p1.fangyu);

printf("姓名: %s hp: %d 攻击力: %d 防御力: %d\n",p2.name,p2.hp,p2.stk, p2.fangyu);

//z战斗过程

while (1)

{

if (zhangdou(&p1, &p2) == 1)

{

set_color(3);

printf("[%s]",p1.name);

printf("胜利!\n");

set_color(7);

break;

}

Sleep(500);

if (zhangdou(&p2, &p1) == 1)

{

set_color(3);

printf("[%s]",p2.name);

printf("胜利!\n");

set_color(7);

break;

}

Sleep(500);

}

}

从文件中读取技能

#include

#include

#include

#include

#include

#include

typedef struct st

{

char name[20];

int hp;

int stk;

}STU;

typedef struct

{

char name[20];

int stk;

}JN;

void set_color(int color)

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);

}

void js(STU *p)

{

int i,s=0;

for(i=0; i < strlen(p->name); i++)

{

s += abs(p->name[i]);

}

p->hp = s % (200-150+1)+150;

p->stk = s % (50-30+1)+30;

}

//初始化技能

int JN_init(JN jn1[100])

{

int k=0;

FILE *fp = NULL;

fp = fopen("E://aa//JN.txt","r");

if (fp == NULL)

{

printf("技能文档不存在");

exit(0);

}

while (1)

{

JN t;

if (feof(fp)!=0)

{

break;

}

fscanf(fp,"%s%d",t.name,t.stk);

jn1[k++]=t;

}

fclose(fp);

return k;

}

void zhangdou(STU *p1, STU *p2,JN *p3)

{

int p2hp;

printf("[%s]对[%s]发出%d攻击",p1->name,p2->name , p1->stk);

p2hp = p1->stk + p3->stk;

p2->hp -= p2hp;

printf("使出技能[%s]增加%d点伤害",p3->name, p3->stk);

if (p2->hp < 0)

p2->hp = 0;

printf("[%s]剩余血量%d\n",p2->name, p2->hp);

}

int main()

{

int i,k=0,t=0,t1,t2,c=0,jk=0,tk;

JN jn[100];

STU play[100],*p;

FILE *fp = NULL;

srand(time(NULL));

fp = fopen("e://aa//name.txt","r");

if (fp == NULL)

{

printf("玩家文档不存在!");

return 0;

}

//从文件中读取名字

while (1)

{

STU temp;

if (feof(fp) != 0)

{

break;

}

fscanf(fp,"%s",temp.name);

play[k++]=temp;

}

fclose(fp);

//计算hp和stk

for (i=0; i

{

js(&play[i]);

printf("姓名: %s hp: %d 攻击力: %d\n",play[i].name, play[i].hp, play[i].stk);

}

//读取技能文档

fp = NULL;

fp = fopen("E://aa//JN.txt","r");

if (fp == NULL)

{

printf("技能文件缺失");

return 0;

}

while (1)

{

JN Temp;

if (feof(fp)!=0)

break;

fscanf(fp,"%s%d",Temp.name, &Temp.stk);

jn[jk++] = Temp;

}

fclose(fp);

//z战斗过程

while (1)

{

t1=rand()%k;//k为玩家数

t2=rand()%k;//随机获取玩家id

tk=rand()%jk;//随机技能

if (t1 == t2)

continue;

//血量同时不为0才能战斗

if (play[t1].hp != 0 && play[t2].hp !=0)

zhangdou(&play[t1], &play[t2], &jn[tk]);

else

{

t=0;

for (i=0;i

{

if (play[i].hp != 0)

{

t++;

c=i;

}

}

if (t==1)

{

printf("胜利者:%s",play[c].name);

break;

}

}

Sleep(100);

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值