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

📄 psde.c

📁 C开发的PDA程序C开发的PDA程序C开发的PDA程序C开发的PDA程序C开发的PDA程序C开发的PDA程序C开发的PDA程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*========================================================================
 *
 *  版权所有 (C) 2000-2001 吴柏建. All Rights Reserved.
 *
 *  文件:       psde.c
 *  内容:		PSDE之演示如何使用PSDE功能函数制作窗口游戏。
 *	作者:			吴柏建。
 *	制作日期:		2000.7.28-2001.8.3
 *	修改日期:		2001..
 *
 *========================================================================*/
//#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <commdlg.h>
#include <mmsystem.h>
#include <time.h>
#include <stdlib.h>
#include <tchar.h>
#include "resource.h"

#include "../psde.h"
#define MJW 27
#define MJH 35

int MouseX,MouseY,MouseL,MouseR,Msg=0;

void DoURL(HWND hWnd,int ID)
{
	HWND hWndURL = GetDlgItem(hWnd, ID);
	char url[256];
	GetWindowText(hWndURL, url, sizeof(url));
	ShellExecute(hWnd, 
				 "open", 
				 url, 
				 NULL, 
				 NULL, 
				 SW_SHOWNORMAL);
}

/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---pvde.c----DLGHelpAboutProc()--------------------------------------
□   处理ABOUT对话框的消息回调函数。
□---2001.7.30---------------------------------------------------------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
long FAR PASCAL DLGHelpAboutProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_INITDIALOG:
		break;
    case WM_COMMAND:
		switch(wParam)
		{
		case ID_OK:PostMessage(hWnd,WM_CLOSE,0,0);break;
		case IDC_HOMEPAGE:DoURL(hWnd,wParam);
		}
		break;
    case WM_CLOSE:EndDialog(hWnd, 0);break;
    default:return(0);break;               
    }
    return(1);
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---pvde.c----MainProc()----------------------------------------------
□   处理主窗口的消息回调函数。
□---------------------------------------------------------------------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
void MainProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	switch( message )
    {
	case WM_LBUTTONUP:
	case WM_LBUTTONDOWN:
	case WM_RBUTTONUP:
	case WM_RBUTTONDOWN:
	case WM_MOUSEMOVE:
		MouseX = LOWORD(lParam);
		MouseY = HIWORD(lParam);
		MouseL=(wParam & MK_LBUTTON) ? 1:0;
		if(wParam & MK_RBUTTON)
		{
			MouseR=1;
			PSDE_VirtualInterrupt();
		}
		else MouseR=0;
		break;
	case WM_COMMAND: 
		switch(LOWORD(wParam))
		{
		case ID_GAME_ABOUT:
			DialogBox(PSDE_GethInstance(), MAKEINTRESOURCE(IDD_ABOUT),hWnd,(DLGPROC)DLGHelpAboutProc);
			break;
		case ID_GAME_NEW:
			Msg=1;
			PSDE_VirtualInterrupt();
			break;
		case ID_GAME_EXIT:PSDE_Exit();break;
		} 
		break;
    }
}

/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---pvde.c----PSDE_Init()---------------------------------------------
□   PSDE模拟PDA环境初始化函数。
□---------------------------------------------------------------------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
void PSDE_Init(void)
{
	//声明main()函数。
	void main(void);

	//--------------------------------------------------\\
	//请注册使用PSDE!
	//注册后您将有权使用PSDE开发应用程序以及随后的商业发行。
	//在未注册前PSDE有60天试用时间,试用期满后PSDE将不可用。
	//您可以访问http://www.wbj2000.com/cpsde.htm来获取注册码。
	//当您使用遇到问题或困难时可以EMAIL TO: wbjok@yahoo.com
	//--------------------------------------------------\\
	//设置PSDE的用户名和注册码。
	PSDE_SetRegCode("UserName","RegCode");

	PSDE_SetFuncWndProc(MainProc);
	PSDE_SetFuncMain(main);

	PSDE_InitWindow(459,280,TRUE,"PSDE_MJ");
	PSDE_InitTouchPanel(0,0,459,280,FALSE);

	PSDE_LoadIcon(IDI_ICON);
	PSDE_LoadMenu(IDR_MENU);
}

typedef struct _MJDATA
{
	void *pBmpMJ;
	unsigned char map[17][17];//255:null
	RECT rc[68];//0~34:normal; 34~68:light
	RECT BackRC;
	int m_redraw;
}MJDATA;

void MJinit(MJDATA *pMjData)
{
	int i,j;
	int a,b,c,d,e,f;
	for(j=0;j<8;j++)for(i=0;i<17;i++)
	{
		pMjData->map[j][i]=(j*17+i)/4;
	}
	srand((unsigned)time(NULL));
	for(e=0;e<500;e++)
	{
		a=rand()%8;
		b=rand()%17;
		c=rand()%8;
		d=rand()%17;
		if((a!=c)||(b!=d))
		{
			f=pMjData->map[a][b];
			pMjData->map[a][b]=pMjData->map[c][d];
			pMjData->map[c][d]=f;
		}
	}
}
BOOL MJPPcheckpass(MJDATA *pMjData)
{
	int i,j;
	for(j=0;j<8;j++)for(i=0;i<17;i++)if(pMjData->map[j][i]<68)return FALSE;
	return TRUE;
}
int MJPPcheck(MJDATA *pMjData)
{
	int i,j;
	int l,r,t,b;
	POINT left,right,top,botton;
	int c;

	for(j=0;j<8;j++)for(i=0;i<17;i++)if(pMjData->map[j][i]>=34&&pMjData->map[j][i]<68)pMjData->map[j][i]-=34;
	for(j=0;j<8;j++)for(i=0;i<17;i++)
	{
		l=pMjData->map[j][i];
		if(l>=34)l-=34;
		if(i+1<17)
		{
			r=pMjData->map[j][i+1];
			if(r>=34)r-=34;
			if(r==l){pMjData->map[j][i]=l+34;pMjData->map[j][i+1]=r+34;}
		}
		if(j+1<8)
		{
			b=pMjData->map[j+1][i];
			if(b>=34)b-=34;
			if(b==l){pMjData->map[j][i]=l+34;pMjData->map[j+1][i]=b+34;}
		}
		if(pMjData->map[j][i]==255)
		{
			for(c=i;;c--)//left
			{
				if(c<0){l=-1;break;}
				if(pMjData->map[j][c]!=255)
				{
					l=pMjData->map[j][c];
					left.x=c;left.y=j;
					break;
				}
			}
			for(c=i;;c++)//right
			{
				if(c>16){r=-2;break;}
				if(pMjData->map[j][c]!=255)
				{
					r=pMjData->map[j][c];
					right.x=c;right.y=j;
					break;
				}
			}
			for(c=j;;c--)//top
			{
				if(c<0){t=-3;break;}
				if(pMjData->map[c][i]!=255)
				{
					t=pMjData->map[c][i];
					top.x=i;top.y=c;
					break;
				}
			}
			for(c=j;;c++)//botton
			{
				if(c>7){b=-4;break;}
				if(pMjData->map[c][i]!=255)
				{
					b=pMjData->map[c][i];
					botton.x=i;botton.y=c;
					break;
				}
			}
			if(l>=0&&r>=0)
			{
				if(l>=34)l-=34;
				if(r>=34)r-=34;
				if(l==r)
				{
					pMjData->map[left.y][left.x]=l+34;
					pMjData->map[right.y][right.x]=r+34;
				}
			}
			if(t>=0&&b>=0)
			{
				if(t>=34)t-=34;
				if(b>=34)b-=34;
				if(t==b)
				{
					pMjData->map[top.y][top.x]=t+34;
					pMjData->map[botton.y][botton.x]=b+34;
				}
			}
		}
	}
	c=0;
	for(j=0;j<8;j++)for(i=0;i<17;i++)if(pMjData->map[j][i]>=34&&pMjData->map[j][i]<68)c++;
	return c;
}
void MJshow(MJDATA *pMjData)
{
	int i,j,c;
	RECT dRC,*pSRC;
	for(j=0;j<8;j++)for(i=16;i>=0;i--)
	{
		c=pMjData->map[j][i];
		SetRect(&dRC,i*MJW,j*MJH,(i+1)*MJW,(j+1)*MJH);
		pSRC = (c>=68) ? &pMjData->BackRC : &pMjData->rc[c];
		PSDE_ShowBmpInWnd(&dRC,pSRC,pMjData->pBmpMJ,FALSE);
	}
}
void MJPPrbutton(MJDATA *pMjData)
{
	int i,j;
	int l,r,t,b;
	POINT left,right,top,botton;
	int c;
	if(!MouseR)return;
	i=(MouseX)/MJW;
	j=(MouseY)/MJH;
	if(i>=17||j>=8)return;
	if(pMjData->map[j][i]<34)return;

	pMjData->m_redraw=1;

	for(c=i-1;;c--)//left
	{
		if(c<0){l=-1;break;}
		if(pMjData->map[j][c]!=255)
		{
			l=pMjData->map[j][c];
			left.x=c;left.y=j;
			break;
		}
	}
	for(c=i+1;;c++)//right
	{
		if(c>16){r=-2;break;}
		if(pMjData->map[j][c]!=255)
		{
			r=pMjData->map[j][c];
			right.x=c;right.y=j;
			break;
		}
	}
	for(c=j-1;;c--)//top
	{
		if(c<0){t=-3;break;}
		if(pMjData->map[c][i]!=255)
		{
			t=pMjData->map[c][i];
			top.x=i;top.y=c;
			break;
		}
	}
	for(c=j+1;;c++)//botton
	{
		if(c>7){b=-4;break;}
		if(pMjData->map[c][i]!=255)
		{
			b=pMjData->map[c][i];
			botton.x=i;botton.y=c;
			break;
		}
	}
	c=pMjData->map[j][i];
	if((c==l)&&(c!=r)&&(c!=t)&&(c!=b))
	{
		pMjData->map[j][i]=255;
		pMjData->map[left.y][left.x]=255;
		MJshow(pMjData);
		return;
	}
	if((c==r)&&(c!=l)&&(c!=t)&&(c!=b))
	{
		pMjData->map[j][i]=255;
		pMjData->map[right.y][right.x]=255;
		MJshow(pMjData);
		return;
	}
	if((c==t)&&(c!=l)&&(c!=r)&&(c!=b))
	{
		pMjData->map[j][i]=255;
		pMjData->map[top.y][top.x]=255;
		MJshow(pMjData);
		return;
	}
	if((c==b)&&(c!=l)&&(c!=r)&&(c!=t))
	{
		pMjData->map[j][i]=255;
		pMjData->map[botton.y][botton.x]=255;
		MJshow(pMjData);
		return;
	}
}
BOOL MJPPlbutton(MJDATA *pMjData)
{
	unsigned char old_map[8][17];

⌨️ 快捷键说明

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