在c语言中用Easyx图形库实现递减血条效果

        由于Easyx内置的函数并没有相关血量实现函数,但我们开发小游戏做课设需要用到,于是利用Easyx中的  fillroundrect()  函数,对其进行再次封装成我们能直接调用的血条绘制函数,显示效果有三种,当血量>=60%为绿色,血量>=30%并且小于60%为橙色,血量>0%并且小于30%为红色,否则血条消失代表死亡,并返回false,反之血量若大于0返回true,返回值与类型也可以自己改成整型用0和1表示。

Easyx中fillroundrect函数官方介绍:

EasyX 文档 - fillroundrect

我的运行环境是Vs Studio2022+Easyx2023

        前几年的版本应该也可以,血条实现效果以及代码如下:

#include <graphics.h>		// 引用图形库头文件
#include <conio.h>
#include<stdio.h>
//BloodBarDraw自定义绘制血条函数,返回false代表死亡,血条消失,否则返回true,代表还存活
//BloodTotal //目标总血量
//NowBlood 当前目标血量
//x 血条初始x坐标
//y 血条初始y坐标
//height 血条的高度
//ellipsewidth  圆角矩形血条的圆角的椭圆宽度。
//ellipseheight  圆角矩形血条的圆角的椭圆高度。
//InitBloodBarLenth 设置血条长度
bool BloodBarDraw(int BloodTotal,int* NowBlood,int Harm, int x,int y,int height,int ellipsewidth,int ellipseheight, int InitBloodBarLenth = 200) {
	//获取当前血量
	int* nowblood = NowBlood;
	printf("当前血量:%d\n", *nowblood);
	//计算血量比
	float BloodVolumeRatio = (*nowblood - Harm) * 1.0 / BloodTotal;
	printf("更新后当前血量比:%.2f\n", BloodVolumeRatio);
	//最终血条长度
	int EndBloodBarLenth=BloodVolumeRatio* InitBloodBarLenth;
	//printf("total:%d\n", *total);
	//设置边框色
	setcolor(BLACK);
	//设置填充色
	setfillcolor(WHITE);
	//绘制外矩形,用于显示总血量
	fillroundrect(
		x, y, x+InitBloodBarLenth, y+height, ellipsewidth, ellipseheight
	);
	//绘制内矩形,用于显示当前血量
	//血量比大于等于总血量的60%
	if (BloodVolumeRatio >= 0.6) {
		setfillcolor(GREEN);
		fillroundrect(
			x, y, x+EndBloodBarLenth, y+height, ellipsewidth, ellipseheight
		);
		//更新血量
		*nowblood = *nowblood - Harm;
	}
	//血量比大于等于总血量的30%,并且小于60%
	else if(BloodVolumeRatio >= 0.3){
		setfillcolor(RGB(255,165,0));
		fillroundrect(
			x, y, x+EndBloodBarLenth, y+height, ellipsewidth, ellipseheight
		);
		*nowblood = *nowblood - Harm;
	}
	//血量比大于等于总血量,并且小于30%
	else if (BloodVolumeRatio >= 0) {
		setfillcolor(RED);
		fillroundrect(
			x, y, x+EndBloodBarLenth, y+height, ellipsewidth, ellipseheight
		);
		*nowblood = *nowblood - Harm;
	}
	else {
		return false;
	}
	return true;
}
//定义玩家
typedef struct Player{
	//血量总数
	int BloodTotal = 100;
	//当前血量
	int NowBlood = 100;
};
//定义敌人野猪
typedef struct Enemy_Boar {
	//血量总数
	int BloodTotal = 30;
	//当前血量
	int NowBlood = 30;
	//野猪伤害
	int Harm = 1;
};
int main()
{
	// 创建绘图窗口,大小为 640x480 像素
	initgraph(640, 480);
	//设置背景色为白色
	setbkcolor(WHITE);
	// 用背景色清空屏幕
	cleardevice();
	int Total = 200;
	//初始化玩家
	Player player;
	//初始化敌人
	Enemy_Boar enemy_Boar;
	//模拟敌人攻击玩家,调用血条绘制函数
	while (BloodBarDraw(player.BloodTotal,&player.NowBlood, enemy_Boar.Harm,300,250, 30, 15, 15, 100)) {
		Sleep(100);
		cleardevice();
	};
	//清空屏幕(清除最后的两个框,一个长度为InitBloodBarLenth的外矩形血条一个长度为0的内矩形血条)
	cleardevice();
	// 按任意键继续
	_getch();	
	// 关闭绘图窗口
	closegraph();			
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值