📄 brainiac.cpp
字号:
//-----------------------------------------------------------------
// Include Files
//-----------------------------------------------------------------
#include "Brainiac.h"
//-----------------------------------------------------------------------------
//游戏引擎函数
//-----------------------------------------------------------------------------
BOOL GameInitialize(HINSTANCE hInstance)
{
//创建游戏引擎
g_pGame = new GameEngine(hInstance, TEXT("Brainiac"),
TEXT("Brainiac Made by mj"), IDI_BRAINIAC, IDI_BRAINIAC_SM, 396, 384);
if (g_pGame == NULL)
return FALSE;
//设置帧频
g_pGame->SetFrameRate(1);
//存储实例句柄
g_hInstance = hInstance;
return TRUE;
}
void GameStart(HWND hWindow)
{
//生成随机数生成器种子
srand(GetTickCount());
//创建并加载方块位图
HDC hDC = GetDC(hWindow);
g_pTiles[0] = new Bitmap(hDC,IDB_BITMAP0,g_hInstance);
g_pTiles[1] = new Bitmap(hDC,IDB_BITMAP1,g_hInstance);
g_pTiles[2] = new Bitmap(hDC,IDB_BITMAP2,g_hInstance);
g_pTiles[3] = new Bitmap(hDC,IDB_BITMAP3,g_hInstance);
g_pTiles[4] = new Bitmap(hDC,IDB_BITMAP4,g_hInstance);
g_pTiles[5] = new Bitmap(hDC,IDB_BITMAP5,g_hInstance);
g_pTiles[6] = new Bitmap(hDC,IDB_BITMAP6,g_hInstance);
g_pTiles[7] = new Bitmap(hDC,IDB_BITMAP7,g_hInstance);
g_pTiles[8] = new Bitmap(hDC,IDB_BITMAP8,g_hInstance);
//清空方块状态和图像
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
{
g_iTiles[i][j] = -1; //这样才能确定哪些方块空间可以用来放置方块
}
//随机初始化方块图像 --使用1-9之间成对的整数位图索引随机填充方块数组 ,注意最后一块放空白方块
g_iTiles[2][2] = 0; //最后一块放空白方块
for (int i = 1; i < 9 ; i++)
{
int x = rand() % 3;
int y = rand() % 3;
while (g_iTiles[x][y] != -1)
{
x = rand() % 3;
y = rand() % 3;
}
g_iTiles[x][y] = i;
}
}
void GameEnd()
{
//清理方块位图
for ( int i = 0; i < 9; i++)
delete g_pTiles[i];
// 清理游戏引擎
delete g_pGame;
}
void GameActivate(HWND hWindow)
{
}
void GameDeactivate(HWND hWindow)
{
}
void GamePaint(HDC hDC)
{
int iTileWidth = g_pTiles[0]->GetWidth();
int iTileHeight = g_pTiles[0]->GetHeight();
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
g_pTiles[g_iTiles[i][j]]->Draw(hDC,i * iTileWidth, j * iTileHeight,TRUE);
}
void GameCycle()
{
}
void HandleKeys()
{
}
void MouseButtonDown(int x, int y, BOOL bLeft)
{
//确定单击了哪一个方块
int iTileX = x / g_pTiles[0]->GetWidth();
int iTileY = y / g_pTiles[0]->GetHeight();
//每次都要取得空白方块所在的位置
for(int i = 0; i < 3 ; i++)
for(int j = 0; j < 3 ; j++)
{
if(g_iTiles[i][j] == 0)
{
g_iBlank.x = i;
g_iBlank.y = j;
}
}
if (((g_iBlank.x == iTileX) && (abs(g_iBlank.y -iTileY) == 1 )) || ((g_iBlank.y == iTileY) && (abs(g_iBlank.x -iTileX) ==1) )) //判断单击的方块是否在空白方块的周围, 巧用了绝对值是否=1
{
PlaySound((LPCSTR)IDW_SELECT, g_hInstance, SND_ASYNC | SND_RESOURCE);
g_iTiles[iTileX][iTileY] = g_iTiles[iTileX][iTileY] + g_iTiles[g_iBlank.x][g_iBlank.y]; //这三行代码用来交换两个变量值,没有用到中间变量
g_iTiles[g_iBlank.x][g_iBlank.y] = g_iTiles[iTileX][iTileY] - g_iTiles[g_iBlank.x][g_iBlank.y];
g_iTiles[iTileX][iTileY] = g_iTiles[iTileX][iTileY] - g_iTiles[g_iBlank.x][g_iBlank.y];
//判断每块拼图位置是否正确,是则iMatch累加
int iNum = 1;int iMatch = 0;
for(int j = 0; j < 3 ; j++) //注意两次循环i,j的顺序
for(int i = 0; i < 3 ; i++)
{
if(g_iTiles[i][j] == iNum)
iMatch++;
iNum++;
}
//若每块拼图位置都正确,则弹出对话框
if(iMatch == 8)
{
PlaySound((LPCSTR)IDW_WIN, g_hInstance, SND_ASYNC | SND_RESOURCE);
MessageBox(g_pGame->GetWindow(),TEXT("You Win!!!") , TEXT("Brainiac"), MB_OK);
}
}
else PlaySound((LPCSTR)IDW_MISMATCH, g_hInstance, SND_ASYNC | SND_RESOURCE);
InvalidateRect(g_pGame->GetWindow(), NULL, FALSE);
}
void MouseButtonUp(int x, int y, BOOL bLeft)
{
}
void MouseMove(int x, int y)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -