幸存者游戏(类)

#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;

}

相关推荐
老王生涯1 小时前
rust开发环境配置-Windows & GNU
开发语言·windows·rust
nLif1 小时前
进程管道通讯-伪终端方式
c++·windows
CodexDave2 小时前
Python 自动化接单实战(九):Windows 免环境交付如何打包与诊断
windows·python·自动化·python自动化·pyinstaller·软件交付·windows打包
DB哥讲数据库3 小时前
【windows安装sql server教程】25步图文详解(附安装包)
windows
惠惠软件3 小时前
快速生成磁盘目录文件-双击运行a.bat ,可以看到磁盘目录下出现了 文件目录.txt-供大家学习研究参考
windows·学习·文件列表
Starmoon_dhw3 小时前
重塑你的Windows文件夹图标 Folder Theme Studio
windows
微学AI3 小时前
一款童年游戏对超级智能体应用开发的启示 — 从《武林群侠传》看 Agent 架构设计的“江湖智慧“
人工智能·游戏·agent
七牛云行业应用4 小时前
Codex Computer Use 完全指南:让 AI 接管你的桌面(含 Windows 版)
人工智能·windows
IMPYLH4 小时前
HTML 的 <dl> 元素
linux·windows·html
清泓y4 小时前
数值策划之战斗数值平衡
游戏·游戏策划