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

📄 common.c

📁 brew中个人开发的一个两国军棋游戏
💻 C
字号:
#include "common.h"

//////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////
void InitTwoFlag(CJunQi* pApp)
{
	pApp->n_Offset = 0;
	pApp->layout = TRUE;
	pApp->win[0] = FALSE;
	pApp->win[1] = FALSE;
	pApp->m_eAppState = APP_STATE_LAYOUT;
	
	DrawChessBoard(pApp);
	
	InitGameSprite(pApp);

	if(!Chess_LoadResources(pApp))
		return;	
	ISPRITE_DrawSprites(pApp->pISprite, pApp->rgCmds);
	IDISPLAY_Update(pApp->a.m_pIDisplay);
}

//////////////////////////////////////////////////////////////////////////
//布局状态事件
//////////////////////////////////////////////////////////////////////////
boolean LayoutEvent(CJunQi *pApp,AEEEvent eCode, uint16 wParam,uint32 dwParam)
{

	IDISPLAY_ClearScreen( pApp->a.m_pIDisplay );
	switch(wParam) 
	{
	case AVK_UP:
		break;
	case AVK_DOWN:
		break;
	case AVK_LEFT:
		break;
	case AVK_RIGHT:
		break;
	case AVK_CLR:
		InitMenuTable(pApp);								//返回到选桌界面
		break;
	case AVK_SELECT:
		break;
	default:
		break;
	}
	return TRUE;
}


//////////////////////////////////////////////////////////////////////////
//画棋盘
//////////////////////////////////////////////////////////////////////////
void DrawChessBoard(CJunQi* pApp)
{
	IImage*			pChessBoard;	//棋盘图片
	IImage*			pInfoCol;		//信息栏图片
	AEEImageInfo	bi;
	
	IDISPLAY_ClearScreen(pApp->a.m_pIDisplay);
	
	if((pChessBoard = ISHELL_LoadResImage(pApp->a.m_pIShell,TWOFLAG_RES_FILE, IDB_CHESSBOARD))!= NULL)
	{
		IIMAGE_GetInfo(pChessBoard, &bi);
		IIMAGE_Draw( pChessBoard, 0, pApp->cyScreen - bi.cy + pApp->n_Offset*pApp->nHeightPerRow);
		IIMAGE_Release( pChessBoard);
	}
	else
		return ;
	
	if((pInfoCol = ISHELL_LoadResImage(pApp->a.m_pIShell,TWOFLAG_RES_FILE, IDB_INFOCOL))!= NULL)
	{
		IIMAGE_GetInfo(pInfoCol, &bi);
		IIMAGE_Draw( pInfoCol, pApp->cxScreen-bi.cx, 0);
		IIMAGE_Release( pInfoCol);
	}
	else
		return ;
	IDISPLAY_Update(pApp->a.m_pIDisplay); 
}

////////////////////////////////////////
//初始化sprite(第二步)
///////////////////////////////////////
void InitGameSprite(CJunQi* pApp)
{
	byte i,j,m = 0;
	
	InitChessArray(pApp);

	MEMSET(pApp->rgCmds, 0, sizeof(pApp->rgCmds));

	//加载棋子sprite及定sprite位置
	for(i=0;i<CHESSBOARD_ROW+1;i++)
		for(j=0;j<CHESSBOARD_COL+1;j++)
		{
			pApp->rgCmds[m].x = pApp->Chess_Array[i][j].x;
			pApp->rgCmds[m].y = pApp->Chess_Array[i][j].y;
			if(pApp->ChessData[m] !=NOCHESS)
				pApp->rgCmds[m].unSpriteIndex = pApp->ChessData[i][j] -1;
			else
				pApp->rgCmds[m].unSpriteIndex = 25;
			pApp->rgCmds[m].unSpriteSize = SPRITE_SIZE_32X32;
			pApp->rgCmds[m].unComposite = 0;
			pApp->rgCmds[m].unLayer = SPRITE_LAYER_1;
			m++;
		}
	//加载光标
	pApp->Cursor.y = 2;
	pApp->Cursor.x = 6;
	pApp->rgCmds[m].x = pApp->Chess_Array[pApp->Cursor.x][pApp->Cursor.y].x;
	pApp->rgCmds[m].y = pApp->Chess_Array[pApp->Cursor.x][pApp->Cursor.y].y;
	pApp->rgCmds[m].unSpriteIndex = 24;
	pApp->rgCmds[m].unSpriteSize = SPRITE_SIZE_32X32;
	pApp->rgCmds[m].unComposite = 0;
	pApp->rgCmds[m].unLayer = SPRITE_LAYER_1;

	pApp->rgCmds[m+1].unSpriteSize = SPRITE_SIZE_END;
}

//////////////////////////////////////////////////
//Init ChessMan's coordinate
//初始化棋盘的坐标	(第一步)
//////////////////////////////////////////////////
void InitChessArray(CJunQi* pApp)	
{
	byte i,j;

	OpenFileData(pApp);
	
	for(i=0; i< CHESSBOARD_ROW + 1; i++)
	{
		for(j=0; j<CHESSBOARD_COL + 1; j++)
		{
			//初始化棋子属性
			pApp->My_Chess[i][j].x = i;
			pApp->My_Chess[i][j].y = j;
			pApp->My_Chess[i][j].ChessID = pApp->ChessData[i][j];
			
			//计算棋盘交点坐标
			pApp->Chess_Array[i][j].x = j * (pApp->cxScreen - 2 * BG_OFFSET_X) / CHESSBOARD_COL + 
											BG_OFFSET_X - SPRITE_SIZE / 2;
			pApp->Chess_Array[i][j].y = pApp->cyScreen - BG_OFFSET_Y - i * (pApp->cyScreen - 
											2 * BG_OFFSET_Y) / CHESSBOARD_ROW - SPRITE_SIZE / 2;
			
		}
	}
	pApp->nHeightPerRow = pApp->Chess_Array[0][0].y - pApp->Chess_Array[1][0].y;
}

//////////////////////////////////////////////////////////////////////////
//加载资源(第三步)
//////////////////////////////////////////////////////////////////////////
boolean Chess_LoadResources(CJunQi* pApp)
{
	IBitmap	*pbmScreen = NULL;
	//creates instance of ISprite
	ISHELL_CreateInstance(pApp->a.m_pIShell, AEECLSID_SPRITE, 
		(void**)&pApp->pISprite);
	//sets IDisplay as its destination
	pbmScreen = IDISPLAY_GetDestination(pApp->a.m_pIDisplay);
	ISPRITE_SetDestination(pApp->pISprite, pbmScreen);
	IBITMAP_Release(pbmScreen);
	//load image for sprite
	Chess_LoadSprites(pApp, IDB_SPRITES, SPRITE_SIZE_32X32);
	return TRUE;
}

///////////////////////////////////
//加载sprite(第四步)
///////////////////////////////////
void Chess_LoadSprites(CJunQi* pApp, int16 nResID,byte unSpriteSize)
{
	IBitmap       *pbmScreen = NULL;
	IBitmap       *pbmDib = NULL;
	IBitmap       *pbmDdb = NULL;
	NativeColor    color;
	AEEBitmapInfo  bi;
	
	pbmScreen = IDISPLAY_GetDestination(pApp->a.m_pIDisplay);
	pbmDib = ISHELL_LoadResBitmap(pApp->a.m_pIShell, TWOFLAG_RES_FILE,IDB_SPRITES);
	IBITMAP_GetInfo(pbmDib, &bi, sizeof(bi));
	IBITMAP_CreateCompatibleBitmap(pbmScreen, &pbmDdb, (uint16)bi.cx, (uint16)bi.cy);
	IBITMAP_BltIn(pbmDdb, 0, 0, (uint16)bi.cx, (uint16)bi.cy, pbmDib, 0, 0, AEE_RO_COPY);
	IBITMAP_Release(pbmDib);
	IBITMAP_GetPixel(pbmDdb, 0, 0, &color);
	IBITMAP_SetTransparencyColor(pbmDdb, color);
	ISPRITE_SetSpriteBuffer(pApp->pISprite, unSpriteSize, pbmDdb);
	IBITMAP_Release(pbmDdb);
	IBITMAP_Release(pbmScreen);
	IDISPLAY_Update(pApp->a.m_pIDisplay);
}

//////////////////////////////////////////
//滚屏
/////////////////////////////////////////
void Scroll_Change(CJunQi* pApp , boolean flag)
{
	int8 i,j,m,offset;
	m = 0;
	
	if(flag)	//向上
	{
		if(++pApp->n_Offset >= 3)
			pApp->n_Offset = 3;
	}
	else		//向下
	{
		if( --pApp->n_Offset <= 0 )
			pApp->n_Offset = 0;
	}
	offset = pApp->n_Offset * pApp->nHeightPerRow ;//计算sprite的移动量
	
	for(i=0; i< CHESSBOARD_ROW + 1; i++)
	{
		for(j=0; j< CHESSBOARD_COL + 1; j++)
		{
			//移动所有sprite
			pApp->rgCmds[m].y = pApp->Chess_Array[i][j].y + offset;
			m++;
		}
	}
}

//////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////
boolean	IBF_fopen(CJunQi* pApp,char * fname)
{
	char m_FileName[32]	;

	if(pApp->m_pf)		IFILE_Release(pApp->m_pf);
	if(pApp->m_pIFM)	IFILEMGR_Release(pApp->m_pIFM);
	
	pApp->m_pIFM	= NULL ;
	pApp->m_pf		= NULL ;

	STRCPY(m_FileName,fname);

	ISHELL_CreateInstance( pApp->a.m_pIShell, AEECLSID_FILEMGR, (void**)&pApp->m_pIFM );

	if(!pApp->m_pIFM) return FALSE ;

	if(IFILEMGR_Test(pApp->m_pIFM,m_FileName) == SUCCESS )
	{
		pApp->m_pf = IFILEMGR_OpenFile( pApp->m_pIFM, fname , _OFM_READWRITE );
		if(!pApp->m_pf)
		{
			return FALSE ;
		}
	}
	else
	{
		pApp->m_pf = IFILEMGR_OpenFile( pApp->m_pIFM, fname , _OFM_CREATE );
		if(!pApp->m_pf)
		{
			IFILEMGR_Release( pApp->m_pIFM );
			pApp->m_pIFM = NULL ;
			return FALSE ;
		}

		IFILE_Release( pApp->m_pf );

		pApp->m_pf = IFILEMGR_OpenFile( pApp->m_pIFM, fname , _OFM_READWRITE );
		if(!pApp->m_pf)
		{
			return FALSE ;
		}
	}

	return TRUE;
}


//////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////
void IBF_fclose(CJunQi* pApp)
{
	if(pApp->m_pf)
	IFILE_Release( pApp->m_pf );
	if(pApp->m_pIFM)
	IFILEMGR_Release( pApp->m_pIFM );	
	pApp->m_pf		= NULL ;
	pApp->m_pIFM	= NULL ;
}

//////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////
boolean	IBF_fprintf(CJunQi* pApp,void * pSrc,int nSize)
{

	if(!pApp->m_pIFM)	return FALSE ;
	if(!pApp->m_pf)	return FALSE ;

	if(IFILE_Write(pApp->m_pf,(PACKED const void*)pSrc,nSize))
	{
		return TRUE ;
	}
	return FALSE ;

}

//////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////
boolean IBF_fread(CJunQi* pApp,void * pDst, int nSize )
{
	if(!pApp->m_pIFM)	return FALSE ;
	if(!pApp->m_pf)	return FALSE ;

	if(IFILE_Read(pApp->m_pf,pDst,nSize))
	{
		return TRUE ;
	}
	return FALSE ;
}


//////////////////////////////////////////////////////////////////////////
//保存数据文件
//////////////////////////////////////////////////////////////////////////
void SaveFileData(CJunQi* pApp)
{
	byte i,j;
	for(i=0; i< CHESSBOARD_ROW + 1; i++)
		for(j=0; j<CHESSBOARD_COL + 1; j++)
			pApp->ChessData[i][j] = pApp->My_Chess[i][j].ChessID;
	IBF_fopen(pApp,"layout.dat");
	IBF_fprintf(pApp,pApp->ChessData,sizeof(pApp->ChessData));
	IBF_fclose(pApp);

}

//////////////////////////////////////////////////////////////////////////
//打开数据文件
//////////////////////////////////////////////////////////////////////////
void OpenFileData(CJunQi* pApp)
{
	IBF_fopen(pApp,"layout.dat");
	IBF_fread(pApp,pApp->ChessData,sizeof(pApp->ChessData));
	IBF_fclose(pApp);
}


/*
////////////////////////////////////
//开始下棋
///////////////////////////////////
void Chess_Start(CJunQi* pApp)
{
	if ( CrKey_GetKeyOnce(&pApp->Cracker,kcRMenu) )	//按kcRMenu键,开始下棋
	{
		if(pApp->layout)
			SaveFileData(g);
		pApp->layout = FALSE;		//layout状态改变
	}

	if(pApp->player || pApp->layout)
	{
		Player_Move(g);		//玩家下棋
	}
	else if(pApp->computer && (!pApp->layout))
	{
		Computer_Move(g);	//电脑下棋
		
		pApp->player = TRUE;		//切换棋手
		pApp->computer = FALSE;
	}

	//改变光标Sprite的位置
	pApp->rgCmds[65].x = pApp->Chess_Array[pApp->Cursor.x][pApp->Cursor.y].x;
	
	pApp->rgCmds[65].y = pApp->Chess_Array[pApp->Cursor.x][pApp->Cursor.y].y 
							+ pApp->n_Offset*pApp->nHeightPerRow;
}
*/

⌨️ 快捷键说明

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