幸存者游戏(类)

#include <iostream>

#include <graphics.h>

#include <stdio.h>

#include <conio.h>

#include <vector>

#include <string>

using namespace std;

int idx_player_anim = 0;

const int player_anim_num = 6;//这里要把动画帧数定位const int才能放入数组括号中,int不行

IMAGE img_player_leftplayer_anim_num;

IMAGE img_player_rightplayer_anim_num;

POINT player_pos = { 500,500 };

int player_speed = 10;

#pragma comment(lib,"MSIMG32.LIB")//putimage不能处理透明度,要弄个能处理透明度的putimage函数

inline void putimage_alpha(int x, int y, IMAGE* img)

{

int w = img->getwidth();

int h = img->getheight();

AlphaBlend(GetImageHDC(NULL), x, y, w, h, GetImageHDC(img), 0, 0, w, h, { AC_SRC_OVER,0,255,AC_SRC_ALPHA });

}

class Animation

{

public:

Animation(LPCTSTR path, int num, int interval)//构造函数实现loadimage

{

interval_ms = interval;

TCHAR path_file256;

for (size_t i = 0; i < num; i++)

{

_stprintf_s(path_file, path, i);

IMAGE* frame = new IMAGE();

loadimage(frame, path_file);

frame_list.push_back(frame);

}

}

~Animation()

{

for (size_t i = 0; i < frame_list.size(); i++)

delete frame_listi;

}

void play(int x, int y, int delta)//实现putiamge

{

timer += delta;

if (timer > interval_ms)

{

idx_frame = (idx_frame + 1) % player_anim_num;

timer = 0;

}

putimage_alpha(x, y, frame_listidx_frame);

}

private:

int timer = 0;

int idx_frame = 0;

int interval_ms = 0;

vector<IMAGE*> frame_list;

};//别漏;

Animation anim_left_player(T("img/player_left%d.png"), 6, 45);

Animation anim_right_player(T("img/player_right%d.png"), 6, 45);

int main()

{

initgraph(1280, 720);

IMAGE img_background;

loadimage(&img_background, _T("img/background.png"));

bool running = true;

bool is_up = false;

bool is_down = false;

bool is_left = false;

bool is_right = false;

bool turn_left = true;

bool turn_right = false;

ExMessage msg;

BeginBatchDraw();

while (running)

{

DWORD start_time = GetTickCount();

while (peekmessage(&msg))

{

if (msg.message == WM_KEYDOWN)

{

switch (msg.vkcode)

{

case VK_UP:

is_up = true;

break;

case VK_DOWN:

is_down = true;

break;

case VK_LEFT:

is_left = true;

turn_left = true;

turn_right = false;

break;

case VK_RIGHT:

is_right = true;

turn_left = false;

turn_right = true;

break;

}

}

if (msg.message == WM_KEYUP)

{

switch (msg.vkcode)

{

case VK_UP:

is_up = false;

break;

case VK_DOWN:

is_down = false;

break;

case VK_LEFT:

is_left = false;

break;

case VK_RIGHT:

is_right = false;

break;

}

}

}

if (is_up) player_pos.y -= player_speed;

if (is_down) player_pos.y += player_speed;

if (is_left) player_pos.x -= player_speed;

if (is_right) player_pos.x += player_speed;

cleardevice();

static int counter = 0;

if (++counter % 5 == 0)

idx_player_anim++;

idx_player_anim = idx_player_anim % player_anim_num;

putimage_alpha(0, 0, &img_background);

if(turn_left) anim_left_player.play(player_pos.x, player_pos.y, 10);

if(turn_right)anim_right_player.play(player_pos.x, player_pos.y, 10);

FlushBatchDraw();

DWORD end_time = GetTickCount();

DWORD delta_time = end_time - start_time;

if (delta_time < 1000 / 144)

{

Sleep(1000 / 144 - delta_time);

}

}

EndBatchDraw();

return 0;

}

相关推荐
2601_9623649721 分钟前
红外活体模组,Windows 设备安全身份入口解析
windows·安全·电脑
易点云徐源1 小时前
(已解决)Photoshop 2020 点击“选择主体”闪退:不用重装,1 个配置切回旧算法解决
windows·photoshop
云计算练习生1 小时前
什么是系统调用?为什么程序访问硬件必须经过它
linux·windows·操作系统·系统调用·操作系统原理
其实防守也摸鱼8 小时前
DeepSeek Harness 开源贡献手记:从入门到合入主线
服务器·数据库·windows·https·ssl
qqww15510 小时前
Win11更新后Edge卡顿掉帧?隐私窗口流畅解决办法
windows·edge·优化·卡顿
其实防守也摸鱼11 小时前
堆叠注入(Stacked Injection)详解
服务器·数据库·windows·https·ssl
郝学胜-神的一滴11 小时前
C++20模板元编程 05:吃透变参模板,解锁编译期万能参数能力
服务器·开发语言·c++·windows·vscode
是店小二呀13 小时前
鸿蒙PC_Dart-Sass-ohos适配全记录
linux·运维·windows
一孤程21 小时前
游戏测试专题第七篇:游戏自动化测试实战
游戏·测试
2601_962364971 天前
不止指纹和人脸:Windows Hello如何重塑PC生物识别安全?
windows·安全·电脑