#include<stdio.h>
#include<easyx.h>
#include"tool.h"
//作者李嘉顺
IMAGE imgland;
IMAGE imgTree[10];
IMAGE imgolaman;//老人
IMAGE imgsnow[2];
typedef struct{
int x, y, w, h;
int frame;//帧数
int maxframe;
int speed;//速度
}sprite;
void sprite_init(sprite* sprite, int x, int y, int maxframe,int w,int h) {//封装
sprite->x = x;
sprite->y = y;
sprite->frame = 0;
sprite->maxframe = maxframe;
sprite->w = w;
sprite->h = h;
sprite->speed = 1;
}
void sprite_runAnimation(sprite* sprite) {//初始化
if(sprite->maxframe !=0)
sprite->frame = (sprite->frame + 1) % sprite->maxframe;
}
sprite tree;
sprite oldman;
sprite snow[50];//雪花
//加载资源
void loadResource() {
//背景加载图片
loadimage(&imgland, "resource/land.png", getwidth(), 290);
//圣诞节树
for (int i = 0; i < 10; i++) {
char imgFile[50] = { 0 };
sprintf_s(imgFile,"resource/mtree/0000%d.png",i);
loadimage(imgTree + i,imgFile , 300, 300);//这里不可以用i
}
//老人
loadimage(&imgolaman, "resource/oldman.png");
loadimage(imgsnow + 0, "resource/snow.png");
loadimage(imgsnow + 1, "resource/snow1.png");
}
//初始化
void init() {
loadResource();
sprite_init(&tree, 540, 430,10, imgTree->getwidth(), imgTree->getheight());
//10是帧
//老人
sprite_init(&oldman, 700, 600, 7, 220, 154);
//雪花
for (int i = 0; i < 50; i++) {
sprite_init(snow + i, rand() % getwidth(), rand() % getheight(), 11, 23, 32);
}
}
//绘制图片
void draw() {
//背景输出
drawImg(0, 500, &imgland);
//树动画
static int i = 0;
drawImg(700, 430, imgTree + i);
if (i < 10)
i++;
else
i = 0;
//老人输出
//putimage(0, 0, &imgolaman);
//void putimage(int dstX, int dstY, int dstWidth, int dstHeight, const IMAGE *pSrcImg,
// int srcX, int srcY, DWORD dwRop = SRCCOPY); // Put image to device
static int k = 0;
drawImg(oldman.x, oldman.y,oldman.w,oldman.h,&imgolaman,oldman.frame*220,0);
/*if (k < 8)
k++;
else
k = 0;*/
k = (k + 1) % 7;
//雪花
for (int i = 0; i < 50; i++) {
drawImg(snow[i].x, snow[i].y, snow[i].w, snow[i].h, imgsnow + 0, snow[i].frame*snow[i].w, 0);
if (snow[i].maxframe);
snow[i].frame = rand() % snow[i].maxframe;
}
Sleep(100);
}
//shujugexing数据
void update() {
sprite_runAnimation(&tree);
sprite_runAnimation(&oldman);
for (int i = 0; i < 50; i++) {
sprite_runAnimation(snow+i);
//雪花落
}
//老人移动
oldman.x -= oldman.speed;
}
int main() {
//控制台,绘图
initgraph(1024, 768, EX_SHOWCONSOLE);
init();
BeginBatchDraw();//开始
while (true) {
cleardevice();//清屏
draw();
FlushBatchDraw();//刷新
update();
}
getchar();
return 0;
}
//贵州电子商务职业技术学院
这个图主要的实现是图片加载,图片绘图,数据更新,和图片输出。
这个因为是c语言所以使用了easyx图形库技术。
相应的素材在我的群里面954311208