code-check-project/Game2D/include/Config.h

88 lines
3.3 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "framework.h"
#define MAX_LOADSTRING 100
#define BUF_SIZE 255
#define MOVESEP 50
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define SIGN(x) ((x) > 0 ? 1 : (((x) == 0) ? 0 : -1))
enum { DGravity = 4, DUp = 0, DDown = 3, DLeft = 1, DRight = 2, DStay = 5, Gravity = 3 };
enum { StdWidth = 32, StdHeight = 32, WindowWidth = 720, WindowHeight = 480, GAME_HEAD, GAME_START, GAME_PAUSE, GAME_LOAD, GAME_SET, GAME_ABOUT };
enum { ById, ByName, ByFree };
typedef int Direction;
typedef int Mode;
// #define OPEN_DEBUG
// 调试输出
namespace DebugOutPut {
inline void openConsole() {
AllocConsole();
}
inline void closeConsole() {
FreeConsole();
}
inline void output(const char buf[]) {
HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsole(hd, buf, strlen(buf), NULL, NULL);
CloseHandle(hd);
}
}; // namespace DebugOutPut
// 设置文字
inline void setText(LPCSTR fName, COLORREF color, LONG fHeight, LONG fWeight) {
settextcolor(color);
LOGFONT f;
gettextstyle(&f);
f.lfHeight = fHeight;
f.lfWeight = fWeight;
_tcscpy_s(f.lfFaceName, fName);
settextstyle(&f);
}
// 绘图函数,补充透明度
inline void drawAlpha(IMAGE* image, int x, int y, int width, int height, int pic_x, int pic_y, double AA = 1) {
// 变量初始化
DWORD* dst = GetImageBuffer(); // GetImageBuffer()函数用于获取绘图设备的显存指针EASYX自带
DWORD* draw = GetImageBuffer();
DWORD* src = GetImageBuffer(image); // 获取picture的显存指针
int imageWidth = image->getwidth(); // 获取图片宽度
int imageHeight = image->getheight(); // 获取图片宽度
int dstX = 0; // 在 绘图区域 显存里像素的角标
int srcX = 0; // 在 image 显存里像素的角标
// 实现透明贴图 公式: Cp=αp*FP+(1-αp)*BP 贝叶斯定理来进行点颜色的概率计算
for(int iy = 0; iy < height; iy++) {
for(int ix = 0; ix < width; ix++) {
// 防止越界
if(ix + pic_x >= 0 && ix + pic_x < imageWidth && iy + pic_y >= 0 && iy + pic_y < imageHeight && ix + x >= 0 && ix + x < WindowWidth && iy + y >= 0 && iy + y < WindowHeight) {
// 获取像素角标
int srcX = (ix + pic_x) + (iy + pic_y) * imageWidth;
dstX = (ix + x) + (iy + y) * WindowWidth;
int sa = ((src[srcX] & 0xff000000) >> 24) * AA; // 0xAArrggbb;AA是透明度
int sr = ((src[srcX] & 0xff0000) >> 16); // 获取 RGB 里的 R
int sg = ((src[srcX] & 0xff00) >> 8); // G
int sb = src[srcX] & 0xff; // B
// 设置对应的绘图区域像素信息
int dr = ((dst[dstX] & 0xff0000) >> 16);
int dg = ((dst[dstX] & 0xff00) >> 8);
int db = dst[dstX] & 0xff;
draw[dstX] = ((sr * sa / 255 + dr * (255 - sa) / 255) << 16) // 公式: Cp=αp*FP+(1-αp)*BP αp=sa/255 , FP=sr , BP=dr
| ((sg * sa / 255 + dg * (255 - sa) / 255) << 8) // αp=sa/255 , FP=sg , BP=dg
| (sb * sa / 255 + db * (255 - sa) / 255); // αp=sa/255 , FP=sb , BP=db
}
}
}
}