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

📄 brainiac.cpp

📁 [简介] 名称: 《拼图》-附源代码 (代码行数:747 注释行数:164) 开发环境:WinXp+VC.Net2005+Win32 API 作者:mj 联系方式:mj055@yahoo.
💻 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 + -