⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphics.h

📁 vc写的源程序,是关于游戏类的程序。调用了系统的很多API
💻 H
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>
#include <windowsx.h>
#include <mmreg.h>
#include <stdio.h>
#include <ddraw.h>
#include <dinput.h>
#include <dsound.h>
#include <dplay.h>
#include <dplobby.h>

#ifndef _GRAPHICS_H_
#define _GRAPHICS_H_

////////// options //////////

// 打开这个选项,强行设置为555
// #define _SET_555

// 打开这个选项将关闭DirectInput对鼠标的支持
#define OFF_MOUSE_DIRECTINPUT

// 打开这个选项初始化为窗口模式
#define WINDOW_MODE
/////////////////////////////

#define NORMAL_BITMAP 0x1
#define PTR_BITMAP    0x2

#define SCREEN_WIDTH  640
#define SCREEN_HEIGHT 480
#define SCREEN_PITCH  1280
#define SCREEN_SURFACE 153600

#define UPDATE_NORMAL   0x1
#define UPDATE_SHADOW   0x2
#define UPDATE_INTERVAL 0x3

#define FONT_NORMAL 0x1
#define FONT_SHADOW 0x2
#define FONT_HOLLOW 0x3

#define MAX_DEBUG_MSG     10 // 屏幕上最多能显示的信息数
#define MAX_DEBUG_CHAR    80 // 每条信息最多能显示的字符数
#define DEBUG_MSG_LEFT    50 // 信息在屏幕上的X坐标
#define DEBUG_MSG_TOP     50 // 最新的一条信息在屏幕上的Y坐标
#define DEBUG_MSG_SPACING 20 // 每一条信息的纵向间距
#define DEBUG_MSG_COLOR  0xffff // 调试信息的颜色
#define DEBUG_DELAY      100 // 每条信息显示多少次

#define DRAW_NORMAL   0x1
#define DRAW_OR       0x2
#define DRAW_XOR      0x3
#define DRAW_AND      0x4
#define DRAW_NOT      0x5
#define DRAW_ALPHA    0x6
#define DRAW_ADDITIVE 0x7

#define DATA_NORMALFILE 0x1
#define DATA_PACKFILE 0x2

#define PAINT_MOUSE_NORMAL   0x1
#define PAINT_MOUSE_ADDITIVE 0x2

#define MUSIC_IN_FILE     0x1
#define MUSIC_IN_PACKFILE 0x2

#define STATICTIME		10
#define STREAMTIME		20
#define SAMPLE_BUFFER_SIZE	((((SOUNDBPS * 2) >> 3) * SOUNDSPS * STATICTIME / 10) & 0xfffffff8)
#define MUSIC_BUFFER_SIZE   ((SOUNDSPS * ((SOUNDBPS * 2) >> 3) * STREAMTIME / 10) & 0xfffffff8)
#define PLAYLOOP        0x1 // 循环播放

#define MAXSAMPLE 16           // 最大可同时播放的音效数
#define SOUNDBPS 16            // 声音采样点数
#define SOUNDSPS 22050         // 声音采样率

#define CONNECT_TCPIP  0x1     // TCPIP连接
#define CONNECT_IPX    0x2     // IPX连接
#define CONNECT_MODEM  0x3     // MODEM连接
#define CONNECT_SERIAL 0x4     // 串行口连接

#define NETDSYS_CHAT          1
#define NETDSYS_CREATEPLAYER  2
#define NETDSYS_DESTROYPLAYER 3
#define NETDSYS_HOST          4
#define NETDSYS_SESSIONLOST   5
#define NETDSYS_PLAYERNAME    6
#define NETDSYS_SESSIONDESC   7
#define NETDSYS_SEND          8
#define NETDSYS_USERMSG       65536

// 位图结构
typedef struct
{
	int   type;              // 位图的类型
	int   width, height;     // 位图的宽度和高度
	DWORD pitch_byte;        // 以字节计算的位图一行所占的内存空间
	DWORD pitch_word;        // 以字计算的位图所一行占的内存空间
	DWORD pitch_dword;       // 以双字计算的位图一行所占的内存空间
	DWORD surface_byte;      // 以字节计算的位图所占的内存空间
	DWORD surface_word;      // 以字计算的位图所占的内存空间
	DWORD surface_dword;     // 以双字计算的位图所占的内存空间
	int   clipleft, cliptop, // 剪裁矩形的范围
		clipright, clipbottom;
	int   pixelbitcount;     // 每个点所占的位数
	WORD  colorkey;          // 透明色
	int draw_x, draw_y;      // 当前绘图笔坐标
	WORD *draw_ptr;          // 指向当前绘图位置的指针
	WORD  *bit;              // 指向位图数据的指针
}BMP;

// FST位图结构
typedef struct
{
	int   width, height;     // 位图的宽度和高度
	DWORD surface_byte;      // 以字节计算的压缩位图所占的内存空间
	DWORD surface_word;      // 以字计算的压缩位图所占的内存空间
	DWORD surface_dword;     // 以双字计算的压缩位图所占的内存空间
	int   pixelbitcount;     // 每个点所占的位数
	WORD  colorkey;          // 透明色
	WORD  *bit;              // 指向位图数据的指针
}FST_BMP;

typedef struct
{
	char *msg;  // 信息
	int  delay; // 还显示多少次消除
} DEBUG_MESSAGE;

// 链表的节点
typedef struct _LIST_POINT_
{
	_LIST_POINT_ *prev; // 上一个节点
	void *data; // 指向数据区的指针
	_LIST_POINT_ *next; // 下一个节点
}LIST_POINT;

// 链表结构
typedef struct
{
	LIST_POINT *first, *last, *entry;
	DWORD count;
}LIST;

// 数据包文件
typedef struct
{
	DWORD ID;           // 文件的ID号
	DWORD pos;          // 文件指针
	char  filename[64]; // 虚拟文件名
	DWORD oldsize;      // 未压缩的文件大小
	DWORD filesize;     // 文件大小
	BOOL  compress;     // 是否经过压缩
}PACK_FILE;

// 数据文件
typedef struct
{
	DWORD file_count; // 数据包文件总数
	FILE  *fp;        // 文件指针
	LIST *pack_file_list;   // 数据包文件列表
}DATA_FILE;

// 鼠标光标
typedef struct
{
	int count; // 光标的帧数
	int entry; // 当前帧
	int width, height; // 鼠标的宽和高
	int hot_x, hot_y; // 鼠标的热点
	int delay; // 每次切换帧的延时(毫秒)
	BMP *cur;  // 光标的位图
}MOUSE_CURSOR;

// 音效的数据
typedef struct
{
	DWORD size;   // 数据长度
	int   number; // 代号
	char  *bit;   // 声音数据
}SAMPLE;

// 音乐的数据
typedef struct
{
	DWORD size;   // 数据长度
	BOOL  source; // 音乐数据来源
	FILE *fp;  // 指向当前音乐文件的指针
	DWORD pos; // 当前播放位置
	DWORD pack_offset; // 音乐文件在声音文件中的位置
}MUSIC;

// 静态声音
typedef struct
{
	LPDIRECTSOUNDBUFFER lpDSB;    // DirectSoundBuffer对象
	LPDIRECTSOUNDNOTIFY lpDSN;    // DirectSoundNotify对象
	SAMPLE              *sample;  // 静态声音
	long                pan;      // 均衡
	long                volume;   // 音量
	DWORD               pos;      // 播放的起始位置
	int                 status;   // 播放状态
	DSBPOSITIONNOTIFY   dsbpn[2]; // 事件数组
}STATICSOUND;

// 流声音
typedef struct
{
	LPDIRECTSOUNDBUFFER lpDSB;    // DirectSoundBuffer对象
	LPDIRECTSOUNDNOTIFY lpDSN;    // DirectSoundNotify对象
	MUSIC               *music;  // 静态声音
	long                pan;      // 均衡
	long                volume;   // 音量
	int                 status;   // 播放状态
	DSBPOSITIONNOTIFY   dsbpn[2]; // 事件数组
}STREAMSOUND;

// 输入法结构
typedef struct
{
	char  name[9];  // 输入法名称
	char  key[102]; // 码元表
	BYTE  len;      // 最大码长
	char  hotkey;   // 万能键
	BOOL  autosel;  // 是否自动选择输入
	BOOL  active;   // 当前是否激活
	LIST  *mb;      // 码表
}CODE_TYPE;

// 码表结构
typedef struct
{
	char *code;     // 编码
	LIST *hz;
}MB;

// 汉字
typedef struct
{
	char *hz;     // 汉字字符串
}HZ;

// 连接类型
typedef struct
{
	char name[256];      // 连接名称
	LPVOID connect; // 连接函数
	DWORD size;     // 函数长度
	int type;     // 连接类型
}CONNECT_TYPE;

// 会话属性
typedef struct
{
	char   name[256];     // 会话的名称
	DWORD  maxplayer;    // 最大玩家数
	LPGUID lpguid;       // 对话的标识
}NETSESSION;

// 玩家属性
typedef struct
{
	DPID playerid;   // 玩家ID
	DWORD type;      // 类型,组或玩家
	char names[64];  // 玩家的短名
	char namel[256]; // 玩家的全名
}PLAYER;

// 消息结构
typedef struct
{
	DWORD type;          // 消息类型
	DWORD size;          // 用户消息数据长度
	DPID  idfrom, idto;  // 发送消息的玩家和接收消息的玩家
	DWORD currentplayer; // 当前的玩家
	union
	{
		LPVOID data;     // 用户消息的数据
		char *message;   // DPSYS_CHAT消息的话
		char *shortname; // 玩家的短名
	};
	union
	{
		char * longname; // 玩家的长名
		LPDPSESSIONDESC2 desc; // DPSYS_SETSESSIONDESC消息的会话属性
	};
}NETMESSAGE;

extern HINSTANCE           app_hInst;
extern MSG                 Msg;                 // 消息类
extern HWND                hWnd;                // 窗口句柄
extern WNDCLASS            Wndclass;            // 窗口类
extern LPDIRECTDRAW        lpDD;                // DirectDraw对象
extern LPDIRECTDRAWSURFACE lpDDPrimary;         // 主显示页面
extern DDSURFACEDESC       PrimarySurfaceDesc;  // 主显示页面的属性
extern LPDIRECTDRAWCLIPPER lpClipper;           // 剪裁对象

extern LPDIRECTINPUT       lpDI;
extern LPDIRECTINPUTDEVICE lpDIKeyboard;
extern LPDIRECTINPUTDEVICE lpDIMouse;
extern BYTE                KEY_INPUT[256];
extern BOOL                mouse_button1, mouse_button2, 
							mouse_button3, mouse_button4;
extern int mouse_x, mouse_y, mouse_z; // 鼠标的坐标
extern int                 mouse_speed;
extern BOOL                show_cursor;
extern DATA_FILE *data_file;

extern BOOL Is555;                  // 像素格式是555  如果值是假的话为565
extern BOOL IsActive;               // 应用程激活
extern BOOL TransBitblt;            // 值为真为透明复制
extern int Alpha;                   // Alpha混合的等级
extern int  DrawMode;               // 绘图模式
extern BMP  *screen, *directscreen; // 主表面位图和指向DirectDrawSurface主表面的位图
extern BOOL ScreenIsLock;           // 值为真为屏幕锁定
extern int  UpdateMode;             // 更新屏幕的模式
extern int  valid_screen_buffer;    // 有效的缓冲区帧数
extern BMP  *temp_screen;           // 临时屏幕缓冲区
extern int  screen_left, screen_top, screen_right, screen_bottom;
extern int fps;                     // 每秒钟显示的帧数
extern int data_source;             // 数据文件来源
extern MOUSE_CURSOR *cursor;

extern char *hzk_16, *hzk_24, *asc_16; // 指向汉字库的指针
extern int  font_style;             // 字体的样式
extern int  font_shadow_x, font_shadow_y; // 汉字阴影的偏移坐标

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -