📄 dxlib.h
字号:
#pragma once
#include<iostream>
#include<io.h>
#include<math.h>
#include<windows.h>
#include<windowsx.h>
#include<tchar.h>
#include<ddraw.h>
#define MAXPALETTEENTRYS 256
#define MAXSPRITEGRAPH 64
#define MAXSPRITEACTION 256
#define CHARACTER_ANIMATE 0
#define CHARACTER_GRAPH 1
#define DD_Call(code) if(FAILED(code))return DD_FALSE
#define SafeRelease(lpx) if(lpx!=NULL){lpx->Release();lpx=NULL;}
#define SetRectPos(rect,x0,y0,wid,hgt) rect.left=x0;rect.top=y0;rect.right=x0+wid;rect.bottom=y0+hgt
#define RGB_GETRED(rgb) (BYTE)(((rgb) >> 16) & 0xff)
#define RGB_GETGREEN(rgb) (BYTE)(((rgb) >> 8) & 0xff)
#define RGB_GETBLUE(rgb) (BYTE)((rgb) & 0xff)
//character's intvalue 0-15
#define ACTION 0 //角色动作
#define FRAME 1 //指向动画的当前帧
#define CUR 2 //指向动画的当前图元
#define HP_MAX 3 //角色体力最大值
#define HP 4 //角色体力
#define ATP 5 //角色攻击力
#define DEF 6 //角色防御力
#define SEARCH_WIDTH 7 //角色视野宽度,未使用,当前取屏幕宽度
#define SEARCH_HEIGHT 8 //角色视野纵深度,未使用,当前取屏幕高度
#define ATTACK_LENGTH 9 //攻击范围,未使用,子弹处理逻辑中指定
#define PARENT 10 //受控母体,用于处理角色跟随
#define SCORE 11 //击破得分
//character's doublevalue 0-15
#define SPEED 0 //通用速度标量,应用于角色行走
#define SPEED_SQRT 1 //通用速度标量,应用于角色行走,斜向行走的坐标分量
#define AHEAD_SPEED 2 //水平速度分量,右向为正,以下4项应用于角色特殊姿态,运动定位,如回旋,精确飞行等
#define FLOAT_SPEED 3 //垂直速度分量,下向为正,该垂直面为垂直于角色行走面(即上升、浮动方向)
#define AHEAD_A 4 //水平加速度分量,右向为正,来自动力和阻力的合力
#define FLOAT_A 5 //垂直加速度分量,下向为正,来自重力和浮力的合力
#define Z 6 //Z轴位移
#define Z_HEIGHT 7 //Z轴高度
extern LPDIRECTDRAW7 lpdd;
extern LPDIRECTDRAWSURFACE7 lpsurmain;
extern LPDIRECTDRAWSURFACE7 lpsurback;
extern DDSURFACEDESC2 ddsdmain;
extern DDSURFACEDESC2 ddsdback;
typedef struct tagBITMAPFILE
{
BITMAPFILEHEADER bmfheader;
BITMAPINFOHEADER bmiheader;
PALETTEENTRY palette[MAXPALETTEENTRYS];
BYTE* byte;
}BITMAPFILE,*LPBITMAPFILE;
//基本图元,包含传送矩形区,一个DirectDraw表面,以及和组合图形序列的关联锚点
//用途:静态位图,动画图元,地图图元,缓存,静止物体元
typedef struct tagGRAPH
{
double x; //坐标[x]
double y; //坐标[y]
int xctrl,yctrl; //锚点,锚定控制角色/物体的本地坐标系
RECT destrect; //目标位置
RECT srcrect; //源位置
RECT cliprect; //资源裁剪区
int type; //类型
int visible; //显示
LPDIRECTDRAWSURFACE7 lpsur; //表面
}GRAPH,*LPGRAPH;
//图形序列,用于动画呈现,包含图元集合和动画时间轴,通过结合图元锚点,创建大小可变的动画
//用途:角色动作动画,动态物体元
typedef struct tagANIMATE
{
double x; //坐标[x]
double y; //坐标[y]
GRAPH graph[MAXSPRITEGRAPH]; //图元集合
int surcount; //图元数
int action[MAXSPRITEACTION]; //动作集合,未使用
int actioncount; //动作数,未使用
int frame; //当前帧
int cur; //当前图元
int step; //帧速
int play; //播放
int type; //类型
int visible; //显示
COLORREF keycolor; //透明颜色
}ANIMATE,*LPANIMATE;
//控制角色,分为静态类型和动态类型,分别关联到图元和图形序列,具备碰撞区
typedef struct tagCHARACTER
{
double x; //视窗坐标[x]
double y; //视窗坐标[y]
double X; //世界坐标[X]
double Y; //世界坐标[Y]
double Xhis; //碰撞退格坐标[Xhis]
double Yhis; //碰撞退格坐标[Yhis]
double Xstart; //角色初始坐标[Xstart]
double Ystart; //角色初始坐标[Ystart]
double Xtarget; //角色目的坐标[Xtarget]
double Ytarget; //角色目的坐标[Ytarget]
int width; //角色区宽度
int height; //角色区高度
RECT colliderect; //碰撞区域
ANIMATE* lpanimate; //关联动画、动物
GRAPH* lpgraph; //关联表面、景物
int relation; //关联类型
COLORREF keycolor; //透明颜色
int type; //类型
int visible; //显示
int intvalue[16]; //整型参数
double doublevalue[16]; //双精度参数
}CHARACTER,*LPCHARACTER;
HRESULT InitDirectDraw(HWND hwnd,UINT width,UINT height);
HRESULT CreateSurface(UINT width,UINT height,LPDIRECTDRAWSURFACE7* lplpsur);
HRESULT CreateGraph(GRAPH* lpgraph,double x,double y,UINT width,UINT height,UINT type=0);
int ReleaseDirectDraw();
HRESULT CleanScreen(COLORREF color);
HRESULT BackToFront(HWND hwnd);
HRESULT DrawString(INT x,INT y,TCHAR* string,COLORREF color=RGB(255,255,255));
int LoadBitmapFile(BITMAPFILE* lpbitmap,TCHAR* filename);
int ReleaseBitmapFile(BITMAPFILE* lpbitmap);
HRESULT CreateGraphFromBitmap(GRAPH* lpgraph,double x,double y,BITMAPFILE* lpbitmap,UINT type=0);
HRESULT GraphToBack(GRAPH* lpgraph,COLORREF color=0);
HRESULT GraphToGraph(GRAPH* lpdestgraph,GRAPH* lpsrcgraph);
int SetGraphPos(GRAPH* lpgraph,double x,double y);
int SetGraphCtrl(GRAPH* lpgraph,int xctrl,int yctrl);
int SetAnimate(ANIMATE* lpanimate,double x,double y,int step,int surcount,COLORREF keycolor=0,UINT type=0);
int SetAnimatePos(ANIMATE* lpanimate,double x,double y);
int PlayAnimate(ANIMATE* lpanimate);
int StopAnimate(ANIMATE* lpanimate);
int SetCharacterPos(CHARACTER* lpcharacter,double x,double y);
BOOL Act(RECT RA, RECT RB, double Per = 100);
HRESULT DrawLine(INT x1,INT y1,INT x2,INT y2,LPDIRECTDRAWSURFACE7* lplpsur=&lpsurback,COLORREF color=RGB(0,0,0));
int DrawRect(RECT rect,LPDIRECTDRAWSURFACE7* lplpsur=&lpsurback,COLORREF color=RGB(0,0,0));
int ReleaseGraphs(GRAPH* graphs);
int ReleaseAnimate(ANIMATE animate);
int ReleaseAnimates(ANIMATE* animates);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -