亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? game.cpp

?? 在vc 6.0環境下的一個坦克小游戲
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// Game.cpp: implementation of the CGame class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "tank.h"
#include "Game.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGame::CGame()
{
	m_pMenuBuffer=NULL;
	m_bFreeze=FALSE;
	m_nBorderTime=0;
	m_nFreezeTime=0;
	m_nMenuPos=3;  //默認為返回游戲
	m_pDD=NULL;
	m_pddsFrontBuffer=NULL;
	m_pddsBackBuffer=NULL;
	pcClipper=NULL;

	m_pBackGroundBuffer=NULL;
	m_pBulletBuffer=NULL;
	m_pExplodeBuffer=NULL;
	m_pGeneralBuffer=NULL;
	m_pEggBuffer=NULL;
	m_pWaitBuffer=NULL;
	m_pGameOverBuffer=NULL;
	m_pBeginBuffer=NULL;


	m_pPlayerBuffer=NULL;
	m_pTankAppBuffer=NULL;
	m_pTankStateBuffer=NULL;
	m_pEnemyBuffer=NULL;
	m_pLevelBuffer=NULL;

	m_bSinglePlayer=FALSE;
	m_nEnemyCount=0;
	m_nLeftEnemy=0;	
	m_nGameLevel=0;

	m_nLeftPlayer=3;
	m_nRightPlayer=3;
	m_nLeftKills=0;
	m_nRightKills=0;
	m_nLeftScore=0;
	m_nRightScore=0;

	m_tankleft=m_tankright=NULL;

	m_bLeftBring=false;			//左邊正在產生坦克
	m_bRightBring=false;
	m_hWnd=NULL;
	m_rcWnd.left=0;
	m_rcWnd.right=SCREEN_WIDTH;
	m_rcWnd.top=0;
	m_rcWnd.bottom=SCREEN_HEIGHT;
	m_nGameState=GAMEBEGIN;
	m_rcGeneral.SetRect(18 *TANKMAPCELL,37*TANKMAPCELL,22*TANKMAPCELL,40*TANKMAPCELL);

}

CGame::~CGame()
{
	m_TankMap.DestroyBmp();
	DestroyObject();
	DDDestroy();
}

BOOL CGame::DDinit(HWND hWnd)
{
	HRESULT hr;
	m_hWnd=hWnd;
	//create DirectDraw
	hr = DirectDrawCreate( NULL, &m_pDD, NULL );
	if( FAILED(hr) )
	{
//		AfxMessageBox( "Error Create DirectDraw\n" );
		return FALSE;
	}

	m_pDD->SetCooperativeLevel( m_hWnd, DDSCL_NORMAL );
	//create FrontBuffer
	DDSURFACEDESC	ddsd;
	ZeroMemory( &ddsd, sizeof(ddsd) );
	ddsd.dwSize = sizeof(ddsd);
	ddsd.dwFlags = DDSD_CAPS;
	ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
	hr = m_pDD->CreateSurface( &ddsd, &m_pddsFrontBuffer, NULL );
	if( FAILED(hr) )
	{
//		AfxMessageBox( "Error Create Front Buffer\n" );
		return FALSE;
	}
	//create BackBuffer
	m_pddsBackBuffer = DDCreateSurface( SCREEN_WIDTH, SCREEN_HEIGHT );
	if(!m_pddsBackBuffer)
	{
//		AfxMessageBox( "Error Create Back Buffer\n" );
		return FALSE;
	}
	//create Clipper
	if(FAILED(hr = m_pDD->CreateClipper(0, &pcClipper, NULL)))
	{
//		AfxMessageBox("Failed to create clipper.");
		return FALSE;		
	}

    if(FAILED(hr = pcClipper->SetHWnd(0, hWnd)))
    {
        pcClipper->Release();
//		AfxMessageBox("Failed to create primary surface.");
		return FALSE;		
    }

    if(FAILED(hr = m_pddsFrontBuffer->SetClipper(pcClipper)))
    {
        pcClipper->Release();
//		AfxMessageBox("Failed to create primary surface.");
		return FALSE;		
    }

	if( !LoadBitmaps() )
		return FALSE;
	return TRUE;
}

LPDIRECTDRAWSURFACE CGame::DDCreateSurface(int width, int height)
{
	DDSURFACEDESC	ddsd;
	ZeroMemory( &ddsd, sizeof(ddsd) );
	ddsd.dwSize = sizeof(ddsd);
	ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
	ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
	ddsd.dwWidth = width;
	ddsd.dwHeight = height;

	LPDIRECTDRAWSURFACE pdds;
	if( FAILED(m_pDD->CreateSurface( &ddsd, &pdds, NULL )) )
		return NULL;
	return pdds;
}

BOOL CGame::LoadBitmaps()
{
	
    m_pBeginBuffer = DDLoadBitmap("pic\\bmp\\Begin.bmp");
	if(!m_pBeginBuffer)
	{
//		AfxMessageBox("載入序幕圖源失敗");
		return FALSE;}
	//Egg
    m_pEggBuffer = DDLoadBitmap("pic\\bmp\\Egg.bmp");
	if(!m_pEggBuffer)
	{
//		AfxMessageBox("載入彩蛋圖源失敗");
		return FALSE;}
	DDSetColorKey( m_pEggBuffer, 0);

    m_pExplodeBuffer = DDLoadBitmap("pic\\bmp\\explode.bmp");
	if(!m_pExplodeBuffer)
	{
//		AfxMessageBox("載入爆炸效果圖失敗");
		return FALSE;}
	DDSetColorKey( m_pExplodeBuffer, RGB(0,0,255) );

    m_pGeneralBuffer = DDLoadBitmap("pic\\bmp\\General.bmp");
	if(!m_pGeneralBuffer)
	{
//		AfxMessageBox("載入大本營圖失敗");
		return FALSE;}
    DDSetColorKey( m_pGeneralBuffer, 0 );  

	m_pWaitBuffer = DDLoadBitmap("pic\\bmp\\Wait.bmp");
	if(!m_pWaitBuffer)
	{
//		AfxMessageBox("載入等待圖失敗");
		return FALSE;}
	DDSetColorKey( m_pWaitBuffer, 0 );

	m_pGameOverBuffer = DDLoadBitmap("pic\\bmp\\over.bmp");
	if(!m_pGameOverBuffer)
	{
//		AfxMessageBox("載入結束圖失敗");
		return FALSE;}
	DDSetColorKey( m_pGameOverBuffer, 0 );  

	m_pBulletBuffer = DDLoadBitmap("pic\\bmp\\Bullet.bmp");
	if(!m_pBulletBuffer)
	{
//		AfxMessageBox("載入子彈圖失敗");
		return FALSE;}
	DDSetColorKey( m_pBulletBuffer, 0 );
	//Map Bitmap
	LPDIRECTDRAWSURFACE pDDsTemp=NULL;
	pDDsTemp = DDLoadBitmap(IDB_SOIL);
	if(!pDDsTemp)
	{
//		AfxMessageBox("載入泥圖源失敗");
		return FALSE;}
	m_TankMap.SetSoilBmp(pDDsTemp);

	pDDsTemp = DDLoadBitmap(IDB_STONE);
	if(!pDDsTemp)
	{
//		AfxMessageBox("載入石圖源失敗");
		return FALSE;}
	m_TankMap.SetStoneBmp(pDDsTemp);

	pDDsTemp = DDLoadBitmap(IDB_STEEL);
	if(!pDDsTemp)
	{
//		AfxMessageBox("載入鋼圖源失敗");
		return FALSE;}
	m_TankMap.SetSteelBmp(pDDsTemp);

	pDDsTemp = DDLoadBitmap(IDB_WATER);
	if(!pDDsTemp)
	{
//		AfxMessageBox("載入水圖源失敗");
		return FALSE;}
	m_TankMap.SetWaterBmp(pDDsTemp);

	pDDsTemp = DDLoadBitmap(IDB_ICE);
	if(!pDDsTemp)
	{
//		AfxMessageBox("載入冰圖源失敗");
		return FALSE;}
	DDSetColorKey( pDDsTemp, 0 );
	m_TankMap.SetIceBmp(pDDsTemp);

	pDDsTemp = DDLoadBitmap(IDB_TREE);
	if(!pDDsTemp)
	{
//		AfxMessageBox("載入樹圖源失敗");
		return FALSE;}
	DDSetColorKey( pDDsTemp, 0 );
	m_TankMap.SetTreeBmp(pDDsTemp);
	//Tank Bitmap
	m_pPlayerBuffer = DDLoadBitmap("pic\\bmp\\TankPlayer.bmp");
	if(!m_pPlayerBuffer)
	{
//		AfxMessageBox("載入坦克圖源失敗");
		return FALSE;}
	DDSetColorKey( m_pPlayerBuffer, RGB(20,20,140) );

	m_pTankAppBuffer = DDLoadBitmap("pic\\bmp\\TankApp.bmp");
	if(!m_pTankAppBuffer)
	{
//		AfxMessageBox("載入坦克出現圖源失敗");
		return FALSE;}
	DDSetColorKey( m_pTankAppBuffer, 0 );

	m_pTankStateBuffer = DDLoadBitmap("pic\\bmp\\Tankstate.bmp");
	if(!m_pTankStateBuffer)
	{
//		AfxMessageBox("載入坦克狀態圖源失敗");
		return FALSE;}

	m_pEnemyBuffer = DDLoadBitmap("pic\\bmp\\TankEnemy.bmp");
	if(!m_pEnemyBuffer)
	{
//		AfxMessageBox("載入敵方坦克圖源失敗");
		return FALSE;}
	DDSetColorKey( m_pEnemyBuffer, RGB(20,20,140) );
	return TRUE;
}

LPDIRECTDRAWSURFACE CGame::DDLoadBitmap(LPCSTR szBitmap, int dx, int dy)
{
    HBITMAP                 hbm;
    BITMAP                  bm;
    DDSURFACEDESC			ddsd;
    LPDIRECTDRAWSURFACE		pdds;

    //
    //  Try to load the bitmap as a resource, if that fails, try it as a file
    //
    hbm = (HBITMAP) LoadImage(GetModuleHandle(NULL), szBitmap, IMAGE_BITMAP, dx,
                              dy, LR_CREATEDIBSECTION);
    if (hbm == NULL)
        hbm = (HBITMAP) LoadImage(NULL, szBitmap, IMAGE_BITMAP, dx, dy,
                                  LR_LOADFROMFILE | LR_CREATEDIBSECTION);
    if (hbm == NULL)
        return NULL;
    //
    // Get size of the bitmap
    //
    GetObject(hbm, sizeof(bm), &bm);
    //
    // Create a DirectDrawSurface for this bitmap
    //
    ZeroMemory(&ddsd, sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
    ddsd.dwWidth = bm.bmWidth;
    ddsd.dwHeight = bm.bmHeight;
    if (m_pDD->CreateSurface(&ddsd, &pdds, NULL) != DD_OK)
	{
		DeleteObject(hbm);
        return NULL;
	}
    DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
    DeleteObject(hbm);
    return pdds;
}

LPDIRECTDRAWSURFACE CGame::DDLoadBitmap(int id, int dx, int dy)
{
	HBITMAP                 hbm;
    BITMAP                  bm;
    DDSURFACEDESC			ddsd;
    LPDIRECTDRAWSURFACE		pdds;
    //
    //  Try to load the bitmap as a resource, if that fails, try it as a file
    //
	CBitmap bmp;
	if(bmp.LoadBitmap(id)==FALSE)
		return NULL;
	hbm=HBITMAP(bmp.GetSafeHandle());

    if (hbm == NULL)
        return NULL;
    //
    // Get size of the bitmap
    //
    GetObject(hbm, sizeof(bm), &bm);
    //
    // Create a DirectDrawSurface for this bitmap
    //
    ZeroMemory(&ddsd, sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
    ddsd.dwWidth = bm.bmWidth;
    ddsd.dwHeight = bm.bmHeight;
    if (m_pDD->CreateSurface(&ddsd, &pdds, NULL) != DD_OK)
        return NULL;
    DDCopyBitmap(pdds, hbm, 0, 0, 0, 0);
    DeleteObject(hbm);///???
    return pdds;
}

HRESULT CGame::DDCopyBitmap(LPDIRECTDRAWSURFACE pdds, HBITMAP hbm, int x, int y, int dx, int dy)
{
	    HDC                     hdcImage;
    HDC                     hdc;
    BITMAP                  bm;
    DDSURFACEDESC			ddsd;
    HRESULT                 hr;

    if (hbm == NULL || pdds == NULL)
        return E_FAIL;
    //
    // Make sure this surface is restored.
    //
    pdds->Restore();
    //
    // Select bitmap into a memoryDC so we can use it.
    //
    hdcImage = CreateCompatibleDC(NULL);
    if (!hdcImage)
        TRACE("createcompatible dc failed\n");
    SelectObject(hdcImage, hbm);
    //
    // Get size of the bitmap
    //
    GetObject(hbm, sizeof(bm), &bm);
    dx = dx == 0 ? bm.bmWidth : dx;     // Use the passed size, unless zero
    dy = dy == 0 ? bm.bmHeight : dy;
    //
    // Get size of surface.
    //
    ddsd.dwSize = sizeof(ddsd);
    ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
    pdds->GetSurfaceDesc(&ddsd);

    if ((hr = pdds->GetDC(&hdc)) == DD_OK)
    {
        StretchBlt(hdc, 0, 0, ddsd.dwWidth, ddsd.dwHeight, hdcImage, x, y,
                   dx, dy, SRCCOPY);
        pdds->ReleaseDC(hdc);
    }
    DeleteDC(hdcImage);
    return hr;

}

void CGame::DDDestroy()
{
	if(m_pDD)
	{
		if(m_pddsFrontBuffer)
		{
			m_pddsFrontBuffer->Release();
			m_pddsFrontBuffer=NULL;
			if(m_pddsBackBuffer)
			{
				m_pddsBackBuffer->Release();
				m_pddsBackBuffer=NULL;
			}
			if(pcClipper)
			{
				pcClipper->Release();
				pcClipper=NULL;
			}
			if(m_pBackGroundBuffer)
			{
				m_pBackGroundBuffer->Release();
				m_pBackGroundBuffer=NULL;
			}
			if(m_pMenuBuffer)
			{
				m_pMenuBuffer->Release();
				m_pMenuBuffer=NULL;
			}
			if(m_pBulletBuffer)
			{
				m_pBulletBuffer->Release();
				m_pBulletBuffer=NULL;
			}
			if(m_pExplodeBuffer)
			{
				m_pExplodeBuffer->Release();
				m_pExplodeBuffer=NULL;
			}
			if(m_pGeneralBuffer)
			{
				m_pGeneralBuffer->Release();
				m_pGeneralBuffer=NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品色综合| 在线一区二区视频| 日韩一区二区三区免费看| 一区二区三区精品在线观看| 国产精品影视网| 国产人成亚洲第一网站在线播放| 日韩精品乱码免费| 日韩欧美色综合| 极品少妇xxxx精品少妇| 精品99999| jvid福利写真一区二区三区| 亚洲人成在线观看一区二区| 成人动漫精品一区二区| 亚洲三级在线看| 欧美午夜在线观看| 久久99精品久久只有精品| 久久在线免费观看| 成年人国产精品| 天涯成人国产亚洲精品一区av| 宅男在线国产精品| 国产成人精品一区二区三区网站观看| 欧美一卡在线观看| 成人午夜av影视| 亚洲不卡av一区二区三区| 日韩视频中午一区| 成人黄色小视频| 亚洲福中文字幕伊人影院| 精品日本一线二线三线不卡| 不卡影院免费观看| 免费在线观看视频一区| 自拍偷拍亚洲激情| 91精品国产欧美一区二区18| 国产成人精品三级麻豆| 五月综合激情日本mⅴ| 欧美午夜精品一区| 成人一区在线观看| 麻豆精品视频在线观看视频| 亚洲欧美一区二区三区国产精品 | xnxx国产精品| 欧美日韩一区二区在线观看视频| 国产成人在线视频网站| 日本欧美一区二区三区乱码 | 精品国产乱码久久| 欧美精品久久久久久久多人混战| 成人免费毛片嘿嘿连载视频| 日本不卡中文字幕| 亚洲妇熟xx妇色黄| 亚洲免费av网站| 国产精品久久影院| 亚洲国产精品精华液2区45| 日韩欧美www| 日韩免费看网站| 日韩不卡手机在线v区| 在线观看91av| 欧美系列一区二区| 在线成人免费视频| 日韩欧美区一区二| 国产欧美日韩精品一区| 中文字幕一区av| 一区二区三区在线视频观看| 亚洲午夜久久久久| 亚洲一区二区欧美日韩| 麻豆免费精品视频| 狂野欧美性猛交blacked| 免费日韩伦理电影| 成人午夜视频福利| 欧美日韩另类一区| 日韩视频123| 亚洲图片另类小说| 蜜臀av一级做a爰片久久| 国产成人免费高清| 欧美高清你懂得| 国产欧美一区二区在线观看| 亚洲综合偷拍欧美一区色| 麻豆专区一区二区三区四区五区| av网站免费线看精品| 欧美精品国产精品| 一区二区三区四区av| 国产制服丝袜一区| 欧美三级一区二区| 国产精品理论在线观看| 久久精品国产精品亚洲综合| 欧美探花视频资源| 国产精品对白交换视频 | 国产精品久久久久9999吃药| 日日摸夜夜添夜夜添国产精品| 成人av电影免费观看| 精品卡一卡二卡三卡四在线| 亚洲成人av一区二区三区| 99在线精品视频| 国产三级欧美三级日产三级99| 人人狠狠综合久久亚洲| 欧美影院一区二区| 亚洲一区二区视频在线观看| 99久久免费精品高清特色大片| 久久久精品tv| 国产99久久久精品| 亚洲国产精品v| 白白色 亚洲乱淫| 中文字幕在线不卡视频| www.亚洲色图.com| 中文字幕在线视频一区| 97se狠狠狠综合亚洲狠狠| 亚洲欧洲av在线| 96av麻豆蜜桃一区二区| 亚洲激情在线播放| 欧美色爱综合网| 激情综合网激情| 国产情人综合久久777777| 成人v精品蜜桃久久一区| 国产精品视频一二三区| 色先锋资源久久综合| 亚洲成在人线免费| 久久综合视频网| av不卡免费在线观看| 亚洲午夜三级在线| 精品成人佐山爱一区二区| 国产a区久久久| 一区二区三区欧美日韩| 欧美一区2区视频在线观看| 粉嫩蜜臀av国产精品网站| 亚洲一级片在线观看| 久久综合久久综合亚洲| 91麻豆视频网站| 裸体健美xxxx欧美裸体表演| 欧美高清在线视频| 欧美大片在线观看| 91成人免费网站| 国产成人精品一区二区三区网站观看| 亚洲免费观看高清完整| 久久一区二区视频| 欧美一区二区观看视频| 色综合中文字幕国产 | 在线一区二区三区做爰视频网站| 久久99精品久久久久久| 五月激情综合婷婷| 一区二区在线看| 中文字幕一区日韩精品欧美| 欧美xxx久久| 欧美绝品在线观看成人午夜影视| 成人精品一区二区三区中文字幕| 日本视频一区二区| 午夜激情一区二区三区| 亚洲成人三级小说| 亚洲最色的网站| 亚洲一区二区在线免费观看视频| 亚洲欧洲精品成人久久奇米网| 国产免费成人在线视频| 国产视频一区在线播放| 久久免费电影网| 国产午夜三级一区二区三| 久久九九久精品国产免费直播| 久久精品在这里| 国产精品乱人伦一区二区| 中文字幕乱码久久午夜不卡| 国产精品色眯眯| 国产精品丝袜久久久久久app| 国产精品麻豆久久久| 亚洲欧美自拍偷拍| 有坂深雪av一区二区精品| 亚洲一区二区五区| 免费成人小视频| 高清在线成人网| 日本精品一级二级| 日韩色在线观看| 国产精品久久久一本精品| 亚洲国产精品久久久男人的天堂 | 国产99久久久精品| 欧美日韩色一区| 欧美国产禁国产网站cc| 一区二区三区中文在线观看| 亚洲成人自拍偷拍| 国产精品自在在线| 欧美色偷偷大香| 国产精品久久久久一区| 免费欧美在线视频| 在线免费观看日本一区| 国产日本欧美一区二区| 午夜精品一区在线观看| 99精品国产视频| 久久免费视频一区| 青青草原综合久久大伊人精品优势| 国产精品99久久久久| 欧美一区二区黄| 午夜免费欧美电影| 在线观看www91| 国产精品久久久一区麻豆最新章节| 美女精品自拍一二三四| 欧美视频在线观看一区二区| 国产精品久久看| 97久久久精品综合88久久| 国产日韩成人精品| 懂色一区二区三区免费观看| 久久夜色精品国产欧美乱极品| 麻豆成人在线观看| 欧美一区二区三区视频在线观看| 亚洲国产精品一区二区久久| 色欧美片视频在线观看在线视频| 亚洲欧美日韩在线| 在线观看91视频|