📄 psde.c
字号:
/*========================================================================
*
* 版权所有 (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 + -