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

📄 display.c

📁 Brew 使用C开发的推箱子游戏程序
💻 C
字号:
/***************************************************************************/
/*                                                                                                                              */
/*  Display.c                                                                                                                  */
/*                                                                                                                              */
/*    Display functions for eluosi game.                                                                         */
/*                                                                                                                              */
/*                                                                                                                               */
/***************************************************************************/

#include "PushBox.h"
#include "Display.h"


/*****************************全局函数定义************************************/
/*===========================================================================

  FUNCTION PushBox_MainMenu
  
	DESCRIPTION:
	Display main menu. 
	
	  PARAMETERS:
	  None.
	  RETURN VALUE
	  None. 
===========================================================================*/

void PushBox_MainMenu(PushBox* pMe)
{
    IMENUCTL_SetRect(pMe->m_pMenu, &pMe->ScreenRect);
    IMENUCTL_SetTitle(pMe->m_pMenu, PUSHBOX_RES_FILE,IDS_STRING_TITLE,NULL);
	/*
	#if 0
	Item.pText = NULL;
    Item.pImage = NULL;	
    Item.pszResImage = Item.pszResText = PUSHBOX_RES_FILE;
    Item.wFont = AEE_FONT_NORMAL;
    Item.dwData = 0;
    // Start
    Item.wText = IDS_STRING_START;
    Item.wImage = IDI_OBJECT_START;
    Item.wItemID = IDC_MAIN_MENU_START;
    IMENUCTL_AddItemEx(pMe->m_pMenu, &Item);
	
	  // Help
	  Item.wText = IDS_STRING_HELP;
	  Item.wImage = IDI_OBJECT_HELP;
	  Item.wItemID = IDC_MAIN_MENU_HELP; 
	  IMENUCTL_AddItemEx(pMe->m_pMenu, &Item);
	  
		// Quit
		Item.wText = IDS_STRING_QUIT;
		Item.wImage = IDI_OBJECT_QUIT;
		Item.wItemID = IDC_MAIN_MENU_QUIT;
		IMENUCTL_AddItemEx(pMe->m_pMenu, &Item);
		#endif
	*/	
    IMENUCTL_SetActive(pMe->m_pMenu,TRUE);
    IMENUCTL_EnableCommand(pMe->m_pMenu, TRUE);
    IMENUCTL_Redraw(pMe->m_pMenu);  
	IDISPLAY_Update (pMe->a.m_pIDisplay);
}

/*===========================================================================

  FUNCTION PushBox_GameMapInit
  
	DESCRIPTION:
	Display  game map. 
	
	  PARAMETERS:
	  None.
	  RETURN VALUE
	  None. 
===========================================================================*/



void PushBox_GameArrayInit(PushBox * pApp)
{
	int i=0;
	int j=0;
    pApp->People_dx=1;
	pApp->People_dy=1;
	for(i = 0; i < ROWNUM; i++)
	{
		for(j = 1;j < COLNUM;j++)
		{
			pApp->BoxStatus[i][j]=SafeWay;
		}
	}
	
	for(i = 0; i < ROWNUM; i++)
	{
		pApp->BoxStatus[i][0]=BlockBox;
		pApp->BoxStatus[i][7]=BlockBox;
		
	}
	for(j = 1;j < COLNUM-1;j++)
	{
		pApp->BoxStatus[0][j]=BlockBox;
		pApp->BoxStatus[7][j]=BlockBox;
	}
	pApp->BoxStatus[5][1]=BlockBox;
	pApp->BoxStatus[6][1]=BlockBox;
	pApp->BoxStatus[6][2]=BlockBox;
	pApp->BoxStatus[5][2]=BlockBox;
	pApp->BoxStatus[2][2]=MoveBox;
	pApp->BoxStatus[3][2]=MoveBox;
	//	pApp->BoxStatus[1][2]=MoveBox;
	pApp->BoxStatus[4][4]=DesBox;
	pApp->BoxStatus[5][4]=DesBox;
	pApp->BoxStatus[1][1]=People;	
}

void PushBox_GameMapDraw(PushBox * pApp ,int x ,int y ,RGBVAL clrFill)
{
	AEERect rc;
	RGBVAL clr = clrFill;
	int i = x;
	int j = y;
	pApp->x = INITLEFT + i * COLWIDTH;
	pApp->y = INITTOP + j * ROWHEIGHT;
	SETAEERECT(&rc,pApp->x,pApp->y,COLWIDTH,ROWHEIGHT);
	IDISPLAY_DrawRect(pApp->a.m_pIDisplay,&rc,0xff000000,clr,IDF_RECT_FRAME|IDF_RECT_FILL);
	
}

void PushBox_GamePeopleDraw(PushBox * pApp,int x ,int y)
{
	IImage * pImage;
	int i = x;
	int j = y;
	pApp->x = INITLEFT + i * COLWIDTH;
	pApp->y = INITTOP + j * ROWHEIGHT;
	pImage = ISHELL_LoadResImage(pApp->a.m_pIShell, PUSHBOX_RES_FILE   ,
		IDI_OBJECT_TEST);
    
    if (NULL != pImage)
    {
        IIMAGE_SetDrawSize(pImage, COLWIDTH, ROWHEIGHT);
        IIMAGE_Draw(pImage, pApp->x, pApp->y);
        IIMAGE_Release(pImage);
        pImage = NULL;
    }
	
}

void PushBox_GameMapInit(PushBox * pApp)
{
	int i=0;
    int j=0;
	pApp->BoxSum = 0;
	PushBox_GameArrayInit(pApp);
	for(i = 0;i < ROWNUM;i++) 
	{
		for(j = 0;j < COLNUM;j++)
		{
			if (SafeWay==pApp->BoxStatus[i][j])
				PushBox_GameMapDraw(pApp,i,j,WHITE);
			
			if (BlockBox==pApp->BoxStatus[i][j])
				PushBox_GameMapDraw(pApp,i,j,Black);
			
			if (MoveBox==pApp->BoxStatus[i][j])
				PushBox_GameMapDraw(pApp,i,j,Green);
			
			if (DesBox==pApp->BoxStatus[i][j])	
				PushBox_GameMapDraw(pApp,i,j,Red);
			
			if (People==pApp->BoxStatus[i][j])	
				PushBox_GamePeopleDraw(pApp,i ,j);
			
		}
	}
	IDISPLAY_Update (pApp->a.m_pIDisplay);
}

/*===========================================================================

  FUNCTION PushBox_MoveUpBox.....
  
	DESCRIPTION:
	the function of box move. 
	
===========================================================================*/

void PushBox_MoveUpBox(PushBox * pApp) 
{
	int i = pApp->People_dx;  //the start position of the people
	int j = pApp->People_dy;
	if ((BlockBox==pApp->BoxStatus[i][j-1])||(DesBox==pApp->BoxStatus[i][j-1])||
		((MoveBox==pApp->BoxStatus[i][j-1])&&(BlockBox==pApp->BoxStatus[i][j-2]))||
		((MoveBox==pApp->BoxStatus[i][j-1])&&(MoveBox==pApp->BoxStatus[i][j-2])))
	{
		return;
	}
	if (SafeWay==pApp->BoxStatus[i][j-1]) 
	{
		pApp->People_dy = j-1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		
		PushBox_GamePeopleDraw(pApp,i ,j-1);
		
	}
	if((MoveBox==pApp->BoxStatus[i][j-1])&&(SafeWay==pApp->BoxStatus[i][j-2]))
	{
		pApp->People_dy = j-1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		PushBox_GameMapDraw(pApp,i,j-2,Green);
		PushBox_GamePeopleDraw(pApp,i ,j-1);
		pApp->BoxStatus[i][j-2] = MoveBox;
		
	}
	if ((MoveBox==pApp->BoxStatus[i][j-1])&&(DesBox==pApp->BoxStatus[i][j-2]))
	{
		pApp->BoxSum += 1;
		pApp->People_dy = j-1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		PushBox_GameMapDraw(pApp,i,j-2,Black);
		PushBox_GamePeopleDraw(pApp,i ,j-1);
		
	}	
	IDISPLAY_Update (pApp->a.m_pIDisplay);
}

void PushBox_MoveDownBox(PushBox * pApp)
{
	int i = pApp->People_dx;  //the start position of the people
	int j = pApp->People_dy;
	if ((BlockBox==pApp->BoxStatus[i][j+1])||(DesBox==pApp->BoxStatus[i][j+1])||
		((MoveBox==pApp->BoxStatus[i][j+1])&&(BlockBox==pApp->BoxStatus[i][j+2]))||
		((MoveBox==pApp->BoxStatus[i][j+1])&&(MoveBox==pApp->BoxStatus[i][j+2]))) 
	{
		return;
	}
	if (SafeWay==pApp->BoxStatus[i][j+1]) 
	{
		pApp->People_dy = j+1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		
		PushBox_GamePeopleDraw(pApp,i ,j+1);
		
	}
	if((MoveBox==pApp->BoxStatus[i][j+1])&&(SafeWay==pApp->BoxStatus[i][j+2]))
	{
		pApp->People_dy = j+1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		PushBox_GameMapDraw(pApp,i,j+2,Green);
		PushBox_GamePeopleDraw(pApp,i ,j+1);
		pApp->BoxStatus[i][j+2] = MoveBox;
		
	}
	if ((MoveBox==pApp->BoxStatus[i][j+1])&&(DesBox==pApp->BoxStatus[i][j+2]))
	{
		pApp->BoxSum += 1;
		pApp->People_dy = j+1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		PushBox_GameMapDraw(pApp,i,j+2,Black);
		PushBox_GamePeopleDraw(pApp,i ,j+1);
		
	}	
	IDISPLAY_Update (pApp->a.m_pIDisplay);
}

void PushBox_MoveLeftBox(PushBox * pApp)
{
	int i = pApp->People_dx;  //the start position of the people
	int j = pApp->People_dy;
	if ((BlockBox==pApp->BoxStatus[i-1][j])||(DesBox==pApp->BoxStatus[i-1][j])||
		((MoveBox==pApp->BoxStatus[i-1][j])&&(BlockBox==pApp->BoxStatus[i-2][j]))||
		((MoveBox==pApp->BoxStatus[i-1][j])&&(MoveBox==pApp->BoxStatus[i-2][j]))) 
	{
		return;
	}
	if (SafeWay==pApp->BoxStatus[i-1][j]) 
	{
		pApp->People_dx = i-1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		if(MoveBox==pApp->BoxStatus[i-1][j])
			PushBox_GameMapDraw(pApp,i-2,j,Green);
		PushBox_GamePeopleDraw(pApp,i-1 ,j);
	}
	if((MoveBox==pApp->BoxStatus[i-1][j])&&(SafeWay==pApp->BoxStatus[i-2][j]))
	{
		pApp->People_dx = i-1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		PushBox_GameMapDraw(pApp,i-2,j,Green);
		PushBox_GamePeopleDraw(pApp,i-1 ,j);
		pApp->BoxStatus[i-2][j] = MoveBox;
	}
	if ((MoveBox==pApp->BoxStatus[i-1][j])&&(DesBox==pApp->BoxStatus[i-2][j]))
	{
		pApp->BoxSum += 1;
		pApp->People_dx = i-1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		PushBox_GameMapDraw(pApp,i-2,j,Black);
		PushBox_GamePeopleDraw(pApp,i-1 ,j);
		
	}	
	IDISPLAY_Update (pApp->a.m_pIDisplay);
}

void PushBox_MoveRightBox(PushBox * pApp)
{
	int i = pApp->People_dx;  //the start position of the people
	int j = pApp->People_dy;
	if ((BlockBox==pApp->BoxStatus[i+1][j]) || (DesBox==pApp->BoxStatus[i+1][j]) ||
		((MoveBox==pApp->BoxStatus[i+1][j]) && (BlockBox==pApp->BoxStatus[i+2][j])) ||
		((MoveBox==pApp->BoxStatus[i+1][j]) && (MoveBox==pApp->BoxStatus[i+2][j]))) 
	{
		return;
	}
	if (SafeWay==pApp->BoxStatus[i+1][j]) 
	{
		pApp->People_dx = i+1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		
		PushBox_GamePeopleDraw(pApp,i+1 ,j);
	}
	if((MoveBox==pApp->BoxStatus[i+1][j])&&(SafeWay==pApp->BoxStatus[i+2][j]))
	{
		pApp->People_dx = i+1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		PushBox_GameMapDraw(pApp,i+2,j,Green);
		PushBox_GamePeopleDraw(pApp,i+1 ,j);
		pApp->BoxStatus[i+2][j] = MoveBox;
	}
	if ((MoveBox==pApp->BoxStatus[i+1][j])&&(DesBox==pApp->BoxStatus[i+2][j]))
	{
		pApp->BoxSum += 1;
		pApp->People_dx = i+1;
		pApp->BoxStatus[i][j] = SafeWay;
		PushBox_GameMapDraw(pApp,i,j,WHITE);
		PushBox_GameMapDraw(pApp,i+2,j,Black);
		PushBox_GamePeopleDraw(pApp,i+1 ,j);
		
	}	
	IDISPLAY_Update (pApp->a.m_pIDisplay);
}
/*===========================================================================

  FUNCTION PushBox_GameDialog_HandleEvent
  
	DESCRIPTION:
	the  dialog of the game runing. 
	
===========================================================================*/

boolean PushBox_GameDialog_HandleEvent(PushBox * pApp, AEEEvent evt, uint16 wParam, uint32 dwParam)
{//	int nRet;
	int CDsuccess=0;
	uint16 w = wParam;
	//	AECHAR pBuf[60]={'G','a','m','e',' ','O', 'v', 'e', 'r', '\0'};
	switch (evt)
	{
	case EVT_DIALOG_START:
		PushBox_GameMapInit(pApp);
		pApp->GameState = GameRuning;
		return TRUE;
        
	case EVT_DIALOG_END: // nothing to do at present
		return TRUE;
        
	case EVT_KEY_PRESS:	
		switch (wParam)
		{   
		case AVK_UP:
			PushBox_MoveUpBox(pApp);	
			return TRUE;
		case AVK_DOWN:
			PushBox_MoveDownBox(pApp);
			return TRUE;
		case AVK_LEFT:
			PushBox_MoveLeftBox(pApp);
			return TRUE;
		case AVK_RIGHT:
			PushBox_MoveRightBox(pApp);
			return TRUE;
		default:
			break;
		}
		return FALSE;
	case EVT_KEY:
		switch (wParam)
		{
		case AVK_CLR:
			ISHELL_EndDialog(pApp->a.m_pIShell);
			pApp->m_pGameDialog = NULL;
			pApp->GameState = GameEnd;
			return TRUE;
		default:
			break;
		}
		return FALSE;
	default:
		return FALSE;
	}
	return FALSE;
}	
/*===========================================================================

  FUNCTION PushBox_MenuDialog_HandleEvent
  
	DESCRIPTION:
	the handle event function of the menu dialog. 
	
===========================================================================*/
boolean PushBox_MenuDialog_HandleEvent(PushBox * pApp, AEEEvent evt, uint16 wParam, uint32 dwParam)
{
	int nRet;
	int CDsuccess=0;
	switch (evt)
	{
	case EVT_DIALOG_START:		
		pApp->m_pMenu = (IMenuCtl *)IDIALOG_GetControl(pApp->m_pMenuDialog,IDC_MENU_MAIN);
		PushBox_MainMenu(pApp);
		return TRUE;
		
	case EVT_DIALOG_END:	
		// IDISPLAY_Update(pApp->a.m_pIDisplay);
		return TRUE;
	case EVT_KEY:
		switch (wParam)
		{
		case AVK_CLR:		
			ISHELL_EndDialog(pApp->a.m_pIShell);  
			pApp->m_pMenuDialog = NULL;
            ISHELL_CloseApplet(pApp->a.m_pIShell, FALSE);
			return(TRUE);
			
		case AVK_SELECT: 
			return(TRUE);
			
		case AVK_UP:
		case AVK_DOWN:
			//active the menu control.
			IMENUCTL_HandleEvent(pApp->m_pMenu, evt, wParam, dwParam);
			return TRUE;
			
		default:
			break;
		}
		return FALSE;
	case EVT_COMMAND:
		switch(wParam)
		{
		case IDS_STRING_START:  // User selected 'START' from the Main Menu			
			IMENUCTL_SetActive(pApp->m_pMenu,FALSE);
			IDISPLAY_ClearScreen(pApp->a.m_pIDisplay); 					
			nRet = ISHELL_CreateDialog(pApp->a.m_pIShell, PUSHBOX_RES_FILE , IDD_DIALOG_GAME, NULL);
			if(CDsuccess == nRet)  ///创建对话框接口
			{
				pApp->GameState = GameRuning;
				return TRUE;
			}
			else
				return FALSE;
			
			return TRUE;
			/*			
			case IDS_STRING_HELP:  // User pressed the 'HELP' button
			IMENUCTL_SetActive(pMe->pMenu, FALSE);
			IDISPLAY_ClearScreen(pMe->a.m_pIDisplay);                            
			Eluos_Display_Text (ELUOS_HELP_FILE);
			return TRUE;
			*/			
		case IDS_STRING_QUIT:  // User pressed the 'QUIT' button
			ISHELL_CloseApplet(pApp->a.m_pIShell,FALSE);
			return TRUE;			
		default:
			break;					
		}
		return FALSE;
	default:
		return FALSE;
	}	
}







































⌨️ 快捷键说明

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