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

📄 saolei.txt

📁 C挖地雷代码
💻 TXT
字号:
/**** 加入头文件 ****/ 
#ifndef TYPE_H 
    #define TYPE_H 
    #include "type.h" 
#endif 
 
#ifndef CGRAPH_H 
    #define CGRAPH_H 
    #include "CGraph.h" 
#endif 
 
/**** 定义 CMouse.h 中用到的数据类型、常量和全局变量 ****/ 
 
typedef int MouseState;    /* 鼠标的状态 */ 
typedef int ClickInfor;    /* 击键的信息 */ 
 
 
enum mouseState            /* 鼠标状态常量,共8种状态 */ 
{  
    NO_BUTTON_IS_PRESSED=0, 
    LEFT_BUTTON_IS_PRESSED, 
    RIGHT_BUTTON_IS_PRESSED, 
    LEFT_AND_RIGHT_BUTTONS_ARE_PRESSED, 
    CENTER_BUTTON_IS_PRESSED, 
    LEFT_AND_CENTER_BUTTONS_ARE_PRESSED, 
    RIGHT_AND_CENTER_BUTTONS_ARE_PRESSED, 
    LEFT_AND_RIGHT_AND_CENTER_BUTTONS_ARE_PRESSED 
}; 
 
 
enum clickInfor            /* 鼠标击键信息常量*/ 
{  
    NO_BUTTON_CLICK,       /* 没有击键信息*/ 
    LEFT_CLICK,            /* 左键单击 */ 
    RIGHT_CLICK,           /* 右键单击 */ 
    CENTER_CLICK,          /* 中键单击 */ 
    DOUBLE_CLICK,          /* 左键双击 */ 
    LEFT_RELEASED,         /* 左键释放 */ 
    RIGHT_RELEASED         /* 右键释放 */ 
}; 
 
 
typedef struct CursorICO            /* 鼠标光标图标类 */ 
{ 
    int *  m_cursor;       /* 光标图标数据数组,大小是 width×height。显示鼠标光标图标时,横向将数组中数据写入显存 */ 
    int *  m_backGround;   /* 用于保存光标背景,数组大小是 width×height */ 
    int    m_width;        /* 光标图标的宽度     */ 
    int    m_height;       /* 光标图标的高度     */ 
	Bool   m_visible;      /* 鼠标指针是否可见   */ 
	Bool   m_hasBackGround;/* 是否保存了背景     */ 
    CPoint m_position;     /* 当前显示光标的位置 */ 
 
} CCursorICO; 
 
 
typedef struct MouseInfor           /* 记录鼠标信息 */ 
{ 
    int        m_buttons;           /* 鼠标按钮数 */  
    int        m_doubleClickDelay;  /* m_doubleClickDelay 表示双击延迟时间是刷新鼠标图标的 m_doubleClickDelay 倍 */ 
    CPoint     m_position;          /* 鼠标的当前位置     */ 
    MouseState m_mouseState;        /* 鼠标的当前状态     */ 
    ClickInfor m_clickInfor;        /* 鼠标当前的击键信息 */ 
 
} CMouseInfor; 
 
 
typedef struct Mouse 
{ 
    CCursorICO  m_cursorICO; 
    CMouseInfor m_mouseInfor; 
 
} CMouse; 
 
 
CMouse myMouse;         /* 全局变量,一个应用程序中只允许一个鼠标变量 */ 
Bool   hasMouse=false;  /* 是否存在鼠标,初始化成功后赋值为 true */ 
 
 
 
 
 
/**** 函数声明 ****/ 
Bool installMouse();        /* 安装鼠标器,在使用鼠标之前调用,并且只调用一次,如果初始化鼠标失败,则返回false */ 
void removeMouse();         /* 清除鼠标器,如果决定在当前应用中不再使用鼠标器,可以调用此函数清除鼠标器,并释放资源。 
                               清除完后不能在安装鼠标!所以该函数一般是在程序结束时调用,如果要隐藏鼠标,可调用另一个函数: setVisible(false);*/ 
 
Bool initMouse(int buttons);                              /* 初始化鼠标器,由 installMouse() 函数调用,用户不许自己调用它来初始化鼠标!因为初始化只进行一次 */ 
Bool setCursorICO(int * cursorICO,int height,int width);  /* 设置鼠标指针 */ 
void showMouse();                                         /* 显示鼠标指针,用户不需要自己调用,在 refreshMouse() 函数中被调用,如果想让隐藏的鼠标指针显示出来,可以调用:setVisible(true); */ 
void setVisible( Bool visible );       /* 设置鼠标是否可见 */ 
int  getButtons();                     /* 获得鼠标按键个数 */ 
int  getDoubleClickDelay();            /* 获得鼠标双击延迟时间 */ 
void setDoubleClickDelay(int doubleClickDelay);       /* 设置鼠标双击延迟时间 */ 
void setActiveArea(UINT x1,UINT y1,UINT x2,UINT y2);  /* 设置鼠标活动区域 */ 
void setMouseActiveZone(CZone zone);   /* 设置鼠标活动区域 */ 
void moveTo(UINT x, UINT y);           /* 把鼠标移至坐标(x,y) */ 
void moveMouseTo(CPoint position);     /* 把鼠标移至坐标position处 */ 
void refreshMouse();                   /* 刷新鼠标信息,包括鼠标指针和鼠标状态、击键信息 */ 
CPoint     getMousePosition();         /* 获取鼠标当前位置坐标 */ 
MouseState getMouseState();            /* 获取鼠标当前状态 */ 
ClickInfor fetchClickInfor();          /* 获取鼠标击键信息 */ 
 
 
 
 
/**** 函数实现 ****/ 
 
Bool installMouse()  /* 安装鼠标器 */ 
{ 
    static Bool firstCall = true;     /* 记录是否是第一次调用这个函数,防止多次调用 */ 
 
    if( firstCall ) 
    { 
        UINT result=0, buttons=0; 
 
        firstCall = false; 
 
        asm MOV AX,00H; 
        asm INT 33H; 
        asm MOV result, AX; 
        asm MOV buttons,BX;  
         
        if(0xFFFF==result) 
        { 
            hasMouse = true; 
 
            if( initMouse(buttons) ) 
    		{ 
                return true; 
    		} 
        	else /* 初始化鼠标器失败 */ 
            {                 
				printf("Error: System has a mouse with %u buttons, but I failed to initialize it\n", buttons); 
                return false; 
    		} 
        } 
        else /* 安装鼠标失败 */ 
        { 
            return false; 
        } 
 
    } 
    else /* 重复调用是不允许的,返回false */ 
    { 
        return false; 
    } 
} 
 
 
void removeMouse() 
{ 
	int * cursor = myMouse.m_cursorICO.m_cursor; 
    int * bg = myMouse.m_cursorICO.m_backGround; 
 
	if(!hasMouse)  /* 如果不存在鼠标器,则不需要清除鼠标 */ 
	{ 
		return; 
	} 
 
	if( bg && myMouse.m_cursorICO.m_hasBackGround )  /* 如果鼠标还保存有背景,还得清除鼠标图标,恢复背景 */ 
	{ 
		int   i,j,width,height,x,y; 
		long  index, tmp; 
 
		x=myMouse.m_cursorICO.m_position.x; 
		y=myMouse.m_cursorICO.m_position.y; 
		 
		width  = myMouse.m_cursorICO.m_width; 
		height = myMouse.m_cursorICO.m_height; 
 
		index=0; 
		for(i=0; i<="0" height<="0" x,y; height, cursorICO, setCursorICO( 设置鼠标指针 myMouse.m_mouseInfor.m_clickInfor="NO_BUTTON_CLICK;" myMouse.m_mouseInfor.m_mouseState="NO_BUTTON_IS_PRESSED;" myMouse.m_mouseInfor.m_doubleClickDelay="2;" myMouse.m_mouseInfor.m_buttons="buttons;" 设置鼠标信息 11) 16, !setCursorICO(cursorICO, 如果不存在鼠标器,则不进行初始化 }; 0, 1, cursorICO[16][11]="{1," 设置鼠标光标图标 初始化鼠标器 buttons) initMouse(int free(bg); 释放鼠标背景占有的内存 if(bg) 释放鼠标指针占有的内存>0) 
				{ 
					putpixel( newX+j, newY+i, pixel ); 
				} 
 
            	tmp++; 
    		} 
 
            index+=width; 
        }   
 
		myMouse.m_cursorICO.m_hasBackGround = true; 
		myMouse.m_cursorICO.m_position.x = newX; 
		myMouse.m_cursorICO.m_position.y = newY; 
    } 
} 
 
 
void changeBackGround(CZone zone) 
{ 
	int * bg     = myMouse.m_cursorICO.m_backGround; 
    int   width  = myMouse.m_cursorICO.m_width; 
    int   height = myMouse.m_cursorICO.m_height; 
    int   i,j,x,y; 
    long  index; 
	CZone cursorZone; 
 
    x = myMouse.m_cursorICO.m_position.x; 
    y = myMouse.m_cursorICO.m_position.y; 
 
	cursorZone.leftUp.x=x; 
	cursorZone.leftUp.y=y; 
	cursorZone.rightDown.x=x+width -1; 
	cursorZone.rightDown.y=y+height-1; 
 
	if( !publicZone(zone, cursorZone, &cursorZone) ) 
	{ 
		return ; 
	} 
 
	if( NULL!=bg ) 
    {    
        index=0; 
        for(i=0; i1) 
    		{ 
                switch(i) 
        		{ 
                    case  0 : clickInfor=DOUBLE_CLICK;   break;  /* 只有左键才有双击事件 */ 
                    case  1 : clickInfor=RIGHT_CLICK;    break; 
                    case  2 : clickInfor=CENTER_CLICK;   break; 
                    default : break; 
        		} 
    		} 
    	}         
        count=1; 
    } 
 
	/* 以下语句用来判断鼠标按键的释放动作 */ 
	if( NO_BUTTON_CLICK==clickInfor ) 
	{ 
		if( LEFT_BUTTON_IS_PRESSED==priorState && NO_BUTTON_IS_PRESSED==state ) 
		{ 
			clickInfor=LEFT_RELEASED; 
		} 
		else if( RIGHT_BUTTON_IS_PRESSED==priorState && NO_BUTTON_IS_PRESSED==state ) 
		{ 
			clickInfor=RIGHT_RELEASED; 
		} 
	} 
 
	priorState=myMouse.m_mouseInfor.m_mouseState; 
	myMouse.m_mouseInfor.m_clickInfor=clickInfor;	 
 
    /* 4、最后在新的位置显示鼠标指针 */ 
    showMouse(); 
 
}

⌨️ 快捷键说明

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