📄 psde.c
字号:
static int x,y;
static BOOL lbutton=FALSE;
static POINT point,new_point;
int offset_x,offset_y;
int i,j;
int num=MJPPcheck(pMjData);
BOOL c,m,n;
RECT rc;
if(MouseL&&!lbutton)//left button down
{
pMjData->m_redraw=1;
x=MouseX;
y=MouseY;
point.x=x/MJW;
point.y=y/MJH;
if(point.x<17&&point.y<8)
if(pMjData->map[point.y][point.x]!=255)lbutton=TRUE;
}
if(MouseL&&lbutton)//left button drag
{
pMjData->m_redraw=1;
offset_x=MouseX-x;
offset_y=MouseY-y;
if(abs(offset_x)>abs(offset_y))
{
if(offset_x>0)//move to right
{
for(i=point.x;;i++)
{
if(i>16)break;
if(pMjData->map[point.y][i]==255)break;
SetRect(&rc,i*MJW,point.y*MJH,i*MJW+MJW,point.y*MJH+MJH);
PSDE_ShowBmpInWnd(&rc,&pMjData->BackRC,pMjData->pBmpMJ,FALSE);
}
for(j=i,i=0;;j++)
{
if(j>16)break;
if(pMjData->map[point.y][j]==255)i+=MJW;
else break;
}
for(j=point.x;;j++)
{
if(j>16)break;
if(pMjData->map[point.y][j]==255)break;
if(offset_x>i)offset_x=i;
SetRect(&rc,offset_x+j*MJW, point.y*MJH, offset_x+j*MJW+MJW, point.y*MJH+MJH);
PSDE_ShowBmpInWnd(&rc,&pMjData->rc[pMjData->map[point.y][j]],pMjData->pBmpMJ,FALSE);
}
}
else//move to left
{
for(i=point.x;;i--)
{
if(i<0)break;
if(pMjData->map[point.y][i]==255)break;
SetRect(&rc,i*MJW,point.y*MJH,i*MJW+MJW,point.y*MJH+MJH);
PSDE_ShowBmpInWnd(&rc,&pMjData->BackRC,pMjData->pBmpMJ,FALSE);
}
for(j=i,i=0;;j--)
{
if(j<0)break;
if(pMjData->map[point.y][j]==255)i-=MJW;
else break;
}
for(j=point.x;;j--)
{
if(j<0)break;
if(pMjData->map[point.y][j]==255)break;
if(offset_x<i)offset_x=i;
SetRect(&rc, offset_x+j*MJW, point.y*MJH, offset_x+j*MJW+MJW, point.y*MJH+MJH);
PSDE_ShowBmpInWnd(&rc,&pMjData->rc[pMjData->map[point.y][j]],pMjData->pBmpMJ,FALSE);
}
}
}
else
{
if(offset_y>0)//move to down
{
for(i=point.y;;i++)
{
if(i>7)break;
if(pMjData->map[i][point.x]==255)break;
SetRect(&rc,point.x*MJW,i*MJH,point.x*MJW+MJW,i*MJH+MJH);
PSDE_ShowBmpInWnd(&rc,&pMjData->BackRC,pMjData->pBmpMJ,FALSE);
}
for(j=i,i=0;;j++)
{
if(j>7)break;
if(pMjData->map[j][point.x]==255)i+=MJH;
else break;
}
for(j=point.y;;j++)
{
if(j>7)break;
if(pMjData->map[j][point.x]==255)break;
if(offset_y>i)offset_y=i;
SetRect(&rc, point.x*MJW, offset_y+j*MJH, point.x*MJW+MJW, offset_y+j*MJH+MJH);
PSDE_ShowBmpInWnd(&rc,&pMjData->rc[pMjData->map[j][point.x]],pMjData->pBmpMJ,FALSE);
}
}
else//move to up
{
for(i=point.y;;i--)
{
if(i<0)break;
if(pMjData->map[i][point.x]==255)break;
SetRect(&rc,point.x*MJW,i*MJH,point.x*MJW+MJW,i*MJH+MJH);
PSDE_ShowBmpInWnd(&rc,&pMjData->BackRC,pMjData->pBmpMJ,FALSE);
}
for(j=i,i=0;;j--)
{
if(j<0)break;
if(pMjData->map[j][point.x]==255)i-=MJH;
else break;
}
for(j=point.y;;j--)
{
if(j<0)break;
if(pMjData->map[j][point.x]==255)break;
if(offset_y<i)offset_y=i;
SetRect(&rc, point.x*MJW, offset_y+j*MJH, point.x*MJW+MJW, offset_y+j*MJH+MJH);
PSDE_ShowBmpInWnd(&rc,&pMjData->rc[pMjData->map[j][point.x]],pMjData->pBmpMJ,FALSE);
}
}
}
}
if((MouseL==FALSE)&&(lbutton==TRUE))//left button up
{
pMjData->m_redraw=2;
lbutton=FALSE;
for(j=0;j<8;j++)for(i=0;i<17;i++)old_map[j][i]=pMjData->map[j][i];
offset_x=MouseX-x;
offset_y=MouseY-y;
if(abs(offset_x)>abs(offset_y))
{
if(offset_x>0)//move to right
{
for(i=point.x;;i++)
{
if(i>16)break;
if(pMjData->map[point.y][i]==255)break;
SetRect( &rc, i*MJW, point.y*MJH, i*MJW+MJW, point.y*MJH+MJH );
PSDE_ShowBmpInWnd(&rc,&pMjData->BackRC,pMjData->pBmpMJ,FALSE);
}
for(j=i,i=0;;j++)
{
if(j>16)break;
if(pMjData->map[point.y][j]==255)i+=MJW;
else break;
}
if(offset_x>i)offset_x=i;
i=(offset_x+MJW/2)/MJW;
for(j=0;j<i;j++)pMjData->map[point.y][point.x+j]=255;
new_point.x=point.x+i;new_point.y=point.y;
for(j=point.x;;j++)
{
if(j>16)break;
if(old_map[point.y][j]==255)break;
pMjData->map[point.y][j+i]=old_map[point.y][j];
}
}
else//move to left
{
for(i=point.x;;i--)
{
if(i<0)break;
if(pMjData->map[point.y][i]==255)break;
SetRect( &rc, i*MJW, point.y*MJH, i*MJW+MJW, point.y*MJH+MJH );
PSDE_ShowBmpInWnd(&rc,&pMjData->BackRC,pMjData->pBmpMJ,FALSE);
}
for(j=i,i=0;;j--)
{
if(j<0)break;
if(pMjData->map[point.y][j]==255)i-=MJW;
else break;
}
if(offset_x<i)offset_x=i;
i=(offset_x-MJW/2)/MJW;
for(j=0;j>=i;j--)pMjData->map[point.y][point.x+j]=255;
new_point.x=point.x+i;new_point.y=point.y;
for(j=point.x;;j--)
{
if(j<0)break;
if(old_map[point.y][j]==255)break;
pMjData->map[point.y][j+i]=old_map[point.y][j];
}
}
}
else
{
if(offset_y>0)//move to down
{
for(i=point.y;;i++)
{
if(i>7)break;
if(pMjData->map[i][point.x]==255)break;
SetRect( &rc, point.x*MJW, i*MJH, point.x*MJW+MJW, i*MJH+MJH );
PSDE_ShowBmpInWnd(&rc,&pMjData->BackRC,pMjData->pBmpMJ,FALSE);
}
for(j=i,i=0;;j++)
{
if(j>7)break;
if(pMjData->map[j][point.x]==255)i+=MJH;
else break;
}
if(offset_y>i)offset_y=i;
i=(offset_y+MJH/2)/MJH;
for(j=0;j<i;j++)pMjData->map[point.y+j][point.x]=255;
new_point.x=point.x;new_point.y=point.y+i;
for(j=point.y;;j++)
{
if(j>7)break;
if(old_map[j][point.x]==255)break;
pMjData->map[j+i][point.x]=old_map[j][point.x];
}
}
else//move to up
{
for(i=point.y;;i--)
{
if(i<0)break;
if(pMjData->map[i][point.x]==255)break;
SetRect( &rc, point.x*MJW, i*MJH, point.x*MJW+MJW, i*MJH+MJH );
PSDE_ShowBmpInWnd(&rc,&pMjData->BackRC,pMjData->pBmpMJ,FALSE);
}
for(j=i,i=0;;j--)
{
if(j<0)break;
if(pMjData->map[j][point.x]==255)i-=MJH;
else break;
}
if(offset_y<i)offset_y=i;
i=(offset_y-MJH/2)/MJH;
for(j=0;j>=i;j--)pMjData->map[point.y+j][point.x]=255;
new_point.x=point.x;new_point.y=point.y+i;
for(j=point.y;;j--)
{
if(j<0)break;
if(old_map[j][point.x]==255)break;
pMjData->map[j+i][point.x]=old_map[j][point.x];
}
}
}
c=FALSE;
if(old_map[point.y][point.x]<34)
{
if(MJPPcheck(pMjData)-num>1)return FALSE;
if(pMjData->map[new_point.y][new_point.x]>=34)c=TRUE;
}
else
{
if(MJPPcheck(pMjData)>num)if(pMjData->map[new_point.y][new_point.x]>=34)return FALSE;
num=pMjData->map[new_point.y][new_point.x];
if(num>=34&&num<68)
{
m=FALSE;n=FALSE;
for(i=new_point.x+1;i<17;i++)
{
if(pMjData->map[new_point.y][i]<34)break;
if(pMjData->map[new_point.y][i]==num)m=TRUE;
}
for(i=new_point.x-1;i>=0;i--)
{
if(pMjData->map[new_point.y][i]<34)break;
if(pMjData->map[new_point.y][i]==num)m=TRUE;
}
for(i=new_point.y+1;i<8;i++)
{
if(pMjData->map[i][new_point.x]<34)break;
if(pMjData->map[i][new_point.x]==num)n=TRUE;
}
for(i=new_point.y-1;i>=0;i--)
{
if(pMjData->map[i][new_point.x]<34)break;
if(pMjData->map[i][new_point.x]==num)n=TRUE;
}
if(m)if(n)c=TRUE;
}
}
if(!c)
{
for(j=0;j<8;j++)for(i=0;i<17;i++)pMjData->map[j][i]=old_map[j][i];
MJPPcheck(pMjData);
MJshow(pMjData);
return FALSE;
}
MJPPcheck(pMjData);
MJshow(pMjData);
return TRUE;
}
return TRUE;
}
/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□---pvde.c----main()--------------------------------------------------
□
□ PSDE_Init()中被调用PSDE_SetFuncMain()设置的PDA程序代码入口函数。
□
□---------------------------------------------------------------------
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
void main()
{
void PSDE_LcdAbsUpdate(void);
static BOOL L=0,R=0;
static int X=0,Y=0,ccc=2;
MJDATA MjData;
int i,j,k;
memset(&MjData,0,sizeof(MJDATA));
MjData.pBmpMJ=PSDE_LoadBmp("IDB_MJ");
SetRect(&MjData.BackRC,0,140,27,140+35);
for(j=0;j<4;j++)for(i=0;i<17;i++)
{
k=j*17+i;
MjData.rc[k].left=i*MJW;
MjData.rc[k].right=MjData.rc[k].left+MJW;
MjData.rc[k].top=j*MJH;
MjData.rc[k].bottom=MjData.rc[k].top+MJH;
}
MJinit(&MjData);
MJshow(&MjData);
PSDE_SetLcdRefreshRate(0);
MjData.m_redraw=2;
while(1)
{
if(MJPPcheckpass(&MjData))
{
ccc=0;
MjData.m_redraw=0;
MJshow(&MjData);
}
else
{
if(MjData.m_redraw)ccc=2;
if(L!=MouseL){L=MouseL;ccc=2;}
if(R!=MouseR){R=MouseR;ccc=2;}
if(X!=MouseX){X=MouseX;if(MouseL||MouseR)ccc++;}
if(Y!=MouseX){Y=MouseY;if(MouseL||MouseR)ccc++;}
if(ccc)
{
ccc--;
MJshow(&MjData);
}
MJPPcheck(&MjData);
MJPPrbutton(&MjData);
MJPPlbutton(&MjData);
if(MjData.m_redraw)
{
MjData.m_redraw--;
PSDE_LcdUpdate();
}
}
if(MjData.m_redraw==0&&ccc==0)PSDE_CpuHalt();
if(Msg)
{
if(Msg==1)
{
MjData.m_redraw=2;
MJinit(&MjData);
}
Msg=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -