📄 move.cpp
字号:
Temp_buf[carrier.last_y+moved_y*2][carrier.last_x+moved_x*2]=TERM1;
}
DeleteDC(hMemDC);
}
}
void CarrierShow(HDC hdc,int moved_x,int moved_y)
{
HDC hMemDC;
if(PassJudge())
{
pass_flag = 1;
Sleep(100);
DialogBox (hInst, MAKEINTRESOURCE(IDD_PASS), hwndMain,(DLGPROC)PassShow);
}
else
{
hMemDC=CreateCompatibleDC(hdc);
switch(Temp_buf[carrier.last_y ][carrier.last_x ])
{
case WALL:
hStep=element[WALL];
break;
case BOX:
hStep=element[BOX];
break;
case TERM:
hStep=element[TERM];
break;
case TERM1:
hStep=element[TERM1];
break;
case SPACE:
default:
hStep=element[SPACE];
break;
}
if( Temp_buf[carrier.last_y][carrier.last_x] == 1)
Temp_buf[carrier.last_y][carrier.last_x] = 0;
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.last_x)*CARR_WI,(carrier.last_y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
if(( moved_x==0)&&(moved_y==-1))
{
if(carrier.action_num_U==2)
{
hStep=element[BUG];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
carrier.direction=Up;
carrier.action_num_U=1;
}
else if(carrier.action_num_U==1)
{
hStep=element[BUG];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
carrier.direction=Up;
carrier.action_num_U=2;
}
}
if(( moved_x==0)&&(moved_y==+1))
{
if(carrier.action_num_D==2)
{
hStep=element[BUGDN];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
carrier.direction=Dn;
carrier.action_num_D=1;
}
else if(carrier.action_num_D==1)
{
hStep=element[BUGDN];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
carrier.direction=Dn;
carrier.action_num_D=2;
}
}
if(( moved_x==1)&&(moved_y==0))
{
if(carrier.action_num_R==2)
{
hStep=element[BUGRH];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
carrier.direction=Rt;
carrier.action_num_R=1;
}
else if(carrier.action_num_R==1)
{
hStep=element[BUGRH];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
carrier.direction=Rt;
carrier.action_num_R=2;
}
}
if(( moved_x==-1)&&(moved_y==0))
{
if(carrier.action_num_L==2)
{
hStep=element[BUGLF];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
carrier.direction=Lt;
carrier.action_num_L=1;
}
else if(carrier.action_num_L==1)
{
hStep=element[BUGLF];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
carrier.direction=Lt;
carrier.action_num_L=2;
}
}
}
DeleteDC(hMemDC);
}
int MoveUndo(HDC hdc,int undo_x, int undo_y)
{
int moved_x,moved_y;
undo_num = 1; //Only undo one step;
switch(carrier.direction)
{
case Dn:
moved_x=0; moved_y=1;
break;
case Up:
moved_x=0; moved_y=-1;
break;
case Lt:
moved_x=-1;moved_y=0;
break;
case Rt:
moved_x=1; moved_y=0;
break;
}
if((Temp_buf[carrier.y+moved_y][carrier.x+moved_x]==SPACE)||
(Temp_buf[carrier.y+moved_y][carrier.x+moved_x]==TERM))
{
CarrierShowUndo(hdc,moved_x,moved_y);
}
else
{
if((Temp_buf[carrier.y+moved_y][carrier.x+moved_x]==BOX)||
(Temp_buf[carrier.y+moved_y][carrier.x+moved_x]==TERM1))
{
if(Temp_buf[carrier.y+moved_y][carrier.x+moved_x]==BOX)
{
Temp_buf[carrier.y+moved_y][carrier.x+moved_x]=SPACE;
if(Temp_buf[carrier.y][carrier.x]==TERM)
{
Temp_buf[carrier.y][carrier.x]=TERM1; //Add for level4 bug.
}
else
Temp_buf[carrier.y][carrier.x]=BOX;
}
if(Temp_buf[carrier.y+moved_y][carrier.x+moved_x]==TERM1)
{
Temp_buf[carrier.y+moved_y][carrier.x+moved_x]=TERM;
if(Temp_buf[carrier.y][carrier.x]==SPACE)
Temp_buf[carrier.y][carrier.x]=BOX;
if(Temp_buf[carrier.y][carrier.x]==TERM)
Temp_buf[carrier.y][carrier.x]=TERM1;
}
BrickShowUndo(hdc,moved_x,moved_y);
CarrierShowUndo(hdc,moved_x,moved_y);
}
}
return 1;
}//MoveUnDo();
void BrickShowUndo(HDC hdc,int moved_x,int moved_y)
{
HDC hMemDC;
hMemDC=CreateCompatibleDC(hdc);
if(Temp_buf[carrier.y+moved_y][carrier.x+moved_x]==SPACE)
{
hStep=element[SPACE];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x+moved_x)*CARR_WI,(carrier.y+moved_y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
}
if(Temp_buf[carrier.y][carrier.x]==BOX)
{
hStep=element[BOX];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
}
if(Temp_buf[carrier.y+moved_y][carrier.x+moved_x]==TERM)
{
hStep=element[TERM];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x+moved_x)*CARR_WI,(carrier.y+moved_y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
}
if(Temp_buf[carrier.y][carrier.x]==SPACE)
{
hStep=element[BOX];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
}
if(Temp_buf[carrier.y][carrier.x]==TERM1)
{
hStep=element[TERM1];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.x)*CARR_WI,(carrier.y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
}
DeleteDC(hMemDC);
}
void CarrierShowUndo(HDC hdc,int undo_x,int undo_y)
{
HDC hMemDC;
hMemDC=CreateCompatibleDC(hdc);
hStep=element[BUG];
SelectObject(hMemDC,hStep);
BitBlt(hdc,(carrier.last_x)*CARR_WI,(carrier.last_y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
hMemDC,0,0,SRCCOPY);
carrier.x = carrier.last_x;
carrier.y = carrier.last_y;
carrier.last_x = temp_x;
carrier.last_y = temp_y;
carrier.undo_flag = 0;
DeleteDC(hMemDC);
}
int PassJudge()
{
int i,j,num,num1;
for(num = 0;num < 20;num+=2)
{
if(Temp_Term[num]!=0)
{
i = Temp_Term[num];
j = Temp_Term[num+1];
if(Temp_buf[i][j]!=TERM1)
return FALSE;
}
}
for(num1 = 0;num1 < 10;num1+=2)
{
if(Temp_Term1[num1]!=0)
{
i = Temp_Term1[num1];
j = Temp_Term1[num1+1];
if(Temp_buf[i][j]!=TERM1)
return FALSE;
}
}
return TRUE;
}
LRESULT CALLBACK PassShow(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int i;
switch(message)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
EndDialog(hwnd, TRUE);
nRoom++;
pass_flag=0;
init_flag=0;
InvalidateRect(hwndMain,NULL,TRUE);
for(i=0;i<40;i++)
Temp_Term[i]=0;
for(i=0;i<20;i++)
Temp_Term1[i]=0;
return TRUE;
case IDCANCLE:
init_flag=1;
EndDialog(hwnd, TRUE);
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hwnd,TRUE);
return TRUE;
}
return (FALSE);
} // PassShow().
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -