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

📄 move.cpp

📁 非常经典的小游戏代码, 推球的,for WindowsCE
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/***********************************************************
        
		              move.cpp

***********************************************************/

#include  <windows.h>
#include  <windowsx.h>
#include  <Commctrl.h>
#include  "box.h"
#include  "resource.h"


LRESULT CALLBACK PassShow(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int MoveBox(HDC hdc,int fcol,int fcow,int tcol,int tcow);
int MoveDo(HDC hdc,int moved_x,int moved_y);
int MoveUnDo(HDC hdc,int undo_x, int undo_y);
int PassJudge();

void CarrierShow(HDC hdc,int moved_x,int moved_y);
void BrickShow(HDC hdc,int moved_x,int moved_y);
void CarrierShowUndo(HDC hdc,int moved_x,int moved_y);
void BrickShowUndo(HDC hdc,int moved_x,int moved_y);

extern HINSTANCE hInst;
extern HWND	     hwndMain; 
extern HBITMAP   hStep;
extern HBITMAP   element[13];
extern int       nRoom;
extern unsigned char Temp_buf[10][25];
extern unsigned char undo_num;
extern unsigned char pass_flag;
extern unsigned char init_flag;
extern CARR carrier;

int done_num=0;
unsigned char  temp_x,temp_y;
unsigned char  Temp_Term[40]={0}; 
unsigned char  Temp_Term1[20]={0};

int MoveBox(HDC hdc,int fcol,int fcow,int tcol,int tcow)
{  
   INT i,j,brick_num;
   
   brick_num = 0;
   
   if(fcol != tcol && fcow != tcow)
	   return 0;
   else{
       if(fcol == tcol && fcow == tcow)
		   return 0;
	   if(fcol == tcol){
		   if(fcow > tcow){
              for(i=fcow;i>=tcow;i--){
				 if(Temp_buf[i-1][fcol]==WALL){
					 if(brick_num==0){
						 for(j=fcow;j>=i;j--){
                            MoveDo(hdc,0,-1);
 							Sleep(100);
						   }
						 return 1;
					 }
                     else if(brick_num==1){
						 for(j=fcow;j>i;j--){
                            MoveDo(hdc,0,-1);
							Sleep(100);
						 }
						 return 1;
					 }
				 }
				 else if(Temp_buf[i-1][fcol]==BOX ||
					     Temp_buf[i-1][fcol]==TERM1){
					 brick_num++;
					 if(brick_num==2){
						for(j=fcow;j>=i;j--){
                            MoveDo(hdc,0,-1);
							Sleep(100);
						}
						return 1;

					 }
				 }
				 else{
					 i--;
				 }
				 
			  }
				 for(i=fcow;i>tcow;i--){
					 MoveDo(hdc,0,-1);
					 Sleep(100);
				 }
				 return 1;
		   }
		   else{
              for(i=fcow;i<=tcow;i++){
				 if(Temp_buf[i+1][fcol]==WALL){
					 if(brick_num==0){
						 for(j=fcow;j<=i;j++){
                            MoveDo(hdc,0,1);
							Sleep(100);
						 }
						 return 1;
					 }
                     else if(brick_num==1){
						 for(j=fcow;j<i;j++){
                            MoveDo(hdc,0,1);
							Sleep(100);
						 }
						 return 1;
					 }
				 }
				 else if(Temp_buf[i+1][fcol]==BOX ||
					     Temp_buf[i+1][fcol]==TERM1){
					 brick_num++;
					 if(brick_num==2){
						for(j=fcow;j<=i;j++){
                            MoveDo(hdc,0,1);
							Sleep(100);
						 }
						return 1;

					 }
				 }
				 else{
					 i++;
				 }
				 
			  }
				 for(i=fcow;i<tcow;i++){
					 MoveDo(hdc,0,1);
					 Sleep(100);
				 }
				 return 1;
		   }

	   }
       else if(fcow==tcow){
		   if(fcol > tcol){
              for(i=fcol;i>=tcol;i--){
				 if(Temp_buf[fcow][i-1]==WALL){
					 if(brick_num==0){
						 for(j=fcol;j>=i;j--){
                            MoveDo(hdc,-1,0);
							Sleep(100);
						 }
						 return 1;
					 }
                     else if(brick_num==1){
						 for(j=fcol;j>i;j--){
                            MoveDo(hdc,-1,0);
							Sleep(100);
						 }
						 return 1;
					 }
				 }
				 else if(Temp_buf[fcow][i-1]==BOX||
					     Temp_buf[fcow][i-1]==TERM1){
					 brick_num++;
					 if(brick_num==2){
						for(j=fcol;j>=i;j--){
                            MoveDo(hdc,-1,0);
							Sleep(100);
						 }
						return 1;

					 }
				 }
				 else{
					 i--;
				 }
				 
			  }
				 for(i=fcol;i>tcol;i--){
					 MoveDo(hdc,-1,0);
					 Sleep(100);
				 }
				 return 1;
		   }
		   else if(fcol < tcol){

              for(i=fcol;i<=tcol;i++){
				 if(Temp_buf[fcow][i+1]==WALL){
					 if(brick_num==0){
						 for(j=fcol;j<=i;j++){
                            MoveDo(hdc,1,0);
							Sleep(100);
						 }
						 return 1;
					 }
                     else if(brick_num==1){
						 for(j=fcol;j<i;j++){
                            MoveDo(hdc,1,0);
							Sleep(100);
						 }
						 return 1;
					 }
				 }
				 else if(Temp_buf[fcow][i+1]==BOX ||
					     Temp_buf[fcow][i+1]==TERM1){
					 brick_num++;
					 if(brick_num==2){
						for(j=fcol;j<=i;j++){
                            MoveDo(hdc,1,0);
							Sleep(100);
						 }
						return 1;

					 }
				 }
				 else{
					 i++;
				 }
				 
			  }
				 for(i=fcol;i<tcol;i++){
					 MoveDo(hdc,1,0);
					 Sleep(100);
				 }
				 return 1;
		   }
	   }
   }
   return 1;
   carrier.undo_flag = 0;
}//MoveBox();


int MoveDo(HDC hdc,int moved_x,int moved_y)
{
    

     if((Temp_buf[carrier.y + moved_y][carrier.x +moved_x] == SPACE)
	  ||(Temp_buf[carrier.y + moved_y][carrier.x +moved_x] == TERM))
	{
		   carrier.undo_flag=0;
		   
		   temp_x = carrier.last_x;
		   temp_y = carrier.last_y;

	       carrier.last_x = carrier.x;
	       carrier.last_y = carrier.y;

	       carrier.x+=moved_x;
	       carrier.y+=moved_y;
	       
	       CarrierShow(hdc,moved_x,moved_y);

	 }
       else if((Temp_buf[carrier.y + moved_y][carrier.x + moved_x] == TERM1)
	    || (Temp_buf[carrier.y + moved_y][carrier.x + moved_x] == BOX))
       {
		if ((Temp_buf[carrier.y+moved_y*2][carrier.x+moved_x*2]==SPACE)
		  ||(Temp_buf[carrier.y+moved_y*2][carrier.x+moved_x*2]==TERM))
		{

	       if (Temp_buf[carrier.y+moved_y*2][carrier.x+moved_x*2]==SPACE)
				carrier.undo_flag=1;

	       if (Temp_buf[carrier.y+moved_y*2][carrier.x+moved_x*2]==TERM)
				carrier.undo_flag=2;

	       carrier.last_x = carrier.x;
	       carrier.last_y = carrier.y;

	       carrier.x+=moved_x;
	       carrier.y+=moved_y;

	       if( (Temp_buf[carrier.y ][carrier.x ] == BOX)
                    && (Temp_buf[carrier.y+moved_y][carrier.x+moved_x] == TERM) )
           {
                done_num ++;
           }

           else if( (Temp_buf[carrier.y ][carrier.x ] == TERM1)
                     && (Temp_buf[carrier.y+moved_y][carrier.x+moved_x] == SPACE) )
           {
                done_num --;
		   }
      
		       BrickShow(hdc,moved_x,moved_y);
	           CarrierShow(hdc,moved_x,moved_y);
		}
	   } 
    return 1;
}//MoveDo();


void BrickShow(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);
     carrier.undo_flag = 0;
   }
   else
   {
	hMemDC=CreateCompatibleDC(hdc);
	if(Temp_buf[carrier.last_y+moved_y][carrier.last_x+moved_x]==TERM1)
    {
       hStep=element[TERM];
	   SelectObject(hMemDC,hStep);
	   BitBlt(hdc,(carrier.last_x+moved_x)*CARR_WI,(carrier.last_y+moved_y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
	                  hMemDC,0,0,SRCCOPY);
  
       Temp_buf[carrier.last_y+moved_y][carrier.last_x+moved_x]=TERM;
    }
   else
   if(Temp_buf[carrier.last_y+moved_y][carrier.last_x+moved_x]==BOX)
    {
     hStep=element[SPACE];
     SelectObject(hMemDC,hStep);
	 BitBlt(hdc,(carrier.last_x+moved_x)*CARR_WI,(carrier.last_y+moved_y)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
	                  hMemDC,0,0,SRCCOPY);
 
	 Temp_buf[carrier.last_y+moved_y][carrier.last_x+moved_x]=SPACE;
    }

   if (Temp_buf[carrier.last_y+moved_y*2][carrier.last_x+moved_x*2]==SPACE)
   {
     hStep=element[BOX];
     SelectObject(hMemDC,hStep);
	 BitBlt(hdc,(carrier.last_x+moved_x*2)*CARR_WI,(carrier.last_y+moved_y*2)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
	                  hMemDC,0,0,SRCCOPY);
 
	 Temp_buf[carrier.last_y+moved_y*2][carrier.last_x+moved_x*2]=BOX;
   }
   else if
     (Temp_buf[carrier.last_y+moved_y*2][carrier.last_x+moved_x*2]==TERM)
	{
     hStep=element[TERM1];
     SelectObject(hMemDC,hStep);
	 BitBlt(hdc,(carrier.last_x+moved_x*2)*CARR_WI,(carrier.last_y+moved_y*2)*CARR_WI+MENUTOP,CARR_WI,CARR_WI,
	                  hMemDC,0,0,SRCCOPY);
   

⌨️ 快捷键说明

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