📄 common.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 + -