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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? game.cpp

?? 一個(gè)用c++寫(xiě)的很棒的坦克大戰(zhàn)游戲源代碼
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):

void CGame::UpdateFrame()
{
	static DWORD lastTick = timeGetTime();
	static int frameCount;
	static float fps;

	if( m_gameState == GS_OVER || m_gameState == GS_ACTIVE ||
		m_gameState == GS_WIN )
		ProcessInput();

	switch( m_gameState )
	{
	case GS_SPLASH:
		DoSplash();
		break;
	
	case GS_OVER:
		DrawWorld();
		m_pddsBackBuffer->BltFast( 200, 200, m_pBmpList[11],
			NULL, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );
		break;

	case GS_ACTIVE:
		DrawWorld();
		break;
		
	case GS_WIN:
		DrawWorld();
		
		if( timeGetTime() - m_lastTime > 3000 ||
			timeGetTime() < m_lastTime )
		{
			m_gameState = GS_ACTIVE;
			m_nLevel ++;
			InitLevel();
		}
		break;
	}

	frameCount ++;
	DWORD thisTick = timeGetTime();
	if( thisTick - lastTick > 1000 )
	{
		fps = (float)frameCount / (thisTick - lastTick) * 1000;
		frameCount = 0;
		lastTick = thisTick;
	}
	
	if( m_bShowStats )
	{
		// Show FPS
		char buf[255];
		sprintf( buf, "FPS: %.2f", fps );
		OutputText( 10, 10, buf );
	}
	
	FlipScreen();
}


void CGame::Explode( CSprite& sprite, BOOL bExplode )
{
	for( int i = 0; i < NUM_EXPLODES; i ++ )
		if( !m_explode[i].m_active )
		{
			int x = (int)sprite.m_x + sprite.m_width/2;
			int y = (int)sprite.m_y + sprite.m_height/2;
			m_explode[i].m_active = TRUE;
			m_explode[i].m_x = (float)(x - m_explode[i].m_width/2);
			m_explode[i].m_y = (float)(y - m_explode[i].m_height/2);
			m_explode[i].m_time = timeGetTime();
			m_explode[i].m_bExplode = bExplode;
			break;
		}
}


void CGame::EatBonus( CPlayer& player )
{
	m_DirectSound.Play( EFFECT_PICK );

	int i;
	switch( m_bonus.m_type )
	{
	case BONUS_LIFE:
		player.m_nLife = player.m_nLife+3;
		m_DirectSound.Play( EFFECT_LIFE );
		player.m_type = 3;
		break;
	case BONUS_CLOCK:
		m_bEnemyLocked = TRUE;
		m_lockTime = timeGetTime();
		player.m_type = 3;
		break;
	case BONUS_SHOVEL:
		m_plane.Protect();
		player.m_type = 3;
		break;
	case BONUS_BOMB:
		for( i = 0; i < m_nMaxEnemys; i ++ )
			if( m_enemy[i].m_active &&
				!m_enemy[i].m_bBoring )
			{
				Explode( m_enemy[i], TRUE );
				m_enemy[i].m_active = FALSE;
				m_nEnemys --;
			}
		player.m_type = 3;
		m_DirectSound.Play( EFFECT_EXPLODE );
		break;
	case BONUS_STAR:
//		player.m_type=player.m_type+2;
//		if( player.m_type > 3 )
			player.m_type = 3;
		break;
	case BONUS_HELMET:
		player.Shield( 50000 );
		break;
	}
	m_bonus.m_active = FALSE;
}


void CGame::PlayerBeenHit( CPlayer& player )
{
	if( !player.m_active )
		return;

	Explode( player, TRUE );
	if( --player.m_nLife <= 0 )
	{
	//	player.m_active = FALSE;
		return;
	}

	//ResetPlayer( player );
	//player.m_type = 0;
}


void CGame::EatBonus( CEnemy& enemy )
{
	switch( m_bonus.m_type )
	{
	case BONUS_LIFE:
		m_nEnemys += 5;
		m_nEnemysLeft += 5;
		break;

	case BONUS_CLOCK:
		m_player[0].Lock();
		m_player[1].Lock();
		break;

	case BONUS_SHOVEL:
		m_plane.Bare();
		break;

	case BONUS_BOMB:
		PlayerBeenHit( m_player[0] );
		PlayerBeenHit( m_player[1] );
		m_DirectSound.Play( EFFECT_EXPLODE );
		break;

	case BONUS_STAR:
		enemy.m_type = 2;
		enemy.m_level = 2;
		break;

	case BONUS_HELMET:
		enemy.Shield( 10000 );
		break;
	}
	m_bonus.m_active = FALSE;
}


BOOL CGame::BoreBonus()
{
	m_bonus.m_active = TRUE;
	int temp = rand() % 100;
	if( temp < 10 )
		m_bonus.m_type = BONUS_LIFE;
	else if( temp < 30 )
		m_bonus.m_type = BONUS_CLOCK;
	else if( temp < 50 )
		m_bonus.m_type = BONUS_SHOVEL;
	else if( temp < 65 )
		m_bonus.m_type = BONUS_BOMB;
	else if( temp < 85 )
		m_bonus.m_type = BONUS_STAR;
	else
		m_bonus.m_type = BONUS_HELMET;

	m_bonus.m_x = (float)random( 0, 416 - m_bonus.m_width );
	m_bonus.m_y = (float)random( 0, 416 - m_bonus.m_height );
	m_bonus.m_lastTime = 
	m_bonus.m_flickerTime = timeGetTime();

	return TRUE;
}


BOOL CGame::BoreEnemy()
{
	if( m_nEnemysLeft <= 0 )
		return FALSE;
	
	int which = random( 0, 4 );
	int x, y;

	for( int i = 0; i < m_nMaxEnemys; i ++ )
		if( !m_enemy[i].m_active )
		{
			switch( which )
			{
			case 0:
				x = 2; y = 2;
				break;
			case 1:
				x = 194; y = 2;
				break;
			case 2:
				x = 386; y = 2;
				break;
			case 3:
				x = 2; y = 160;
				break;
			case 4:
				x = 386; y = 160;
				break;
			}
			int temp = rand() % 100;
			if( temp < 50 )
			{
				m_enemy[i].m_type = 0;
				m_enemy[i].m_speed = 0.7f;
			}
			else if( temp < 80 )
			{
				m_enemy[i].m_type = 1;
				m_enemy[i].m_speed = 1.2f;
			}
			else
			{
				m_enemy[i].m_type = 2;
				m_enemy[i].m_speed = 0.5f;
			}
			m_enemy[i].m_x = (float)x;
			m_enemy[i].m_y = (float)y;
			m_enemy[i].m_dir = DIR_DOWN;
			if( m_nEnemysLeft == 4 ||
				m_nEnemysLeft == 11 ||
				m_nEnemysLeft == 18 )
			{
				m_enemy[i].m_bBonus = TRUE;
				m_enemy[i].m_redTime = 0;
			}
			else
				m_enemy[i].m_bBonus = FALSE;

			if( m_enemy[i].m_type == 2 )
				m_enemy[i].m_level = 2;

			m_enemy[i].Reborn();

			m_nEnemysLeft --;
			if( ++which > 2 )
				which = 0;
			return TRUE;
		}
	return FALSE;
}


BOOL CGame::LoadBitmaps()
{
	// Loading bitmaps...
	
	m_pBmpList[0] = DDLoadBitmap( "graphics\\tile.bmp" );
	DDSetColorKey( m_pBmpList[0], 0 );

	m_pBmpList[1] = DDLoadBitmap( "graphics\\player1.bmp" );
	DDSetColorKey( m_pBmpList[1], 0 );

	m_pBmpList[2] = DDLoadBitmap( "graphics\\bullet.bmp" );
	DDSetColorKey( m_pBmpList[2], 0 );
	
	m_pBmpList[3] = DDLoadBitmap( "graphics\\explode1.bmp" );
	DDSetColorKey( m_pBmpList[3], 0 );

	m_pBmpList[4] = DDLoadBitmap( "graphics\\explode2.bmp" );
	DDSetColorKey( m_pBmpList[4], 0 );

	m_pBmpList[5] = DDLoadBitmap( "graphics\\enemy.bmp" );
	DDSetColorKey( m_pBmpList[5], 0 );

	m_pBmpList[6] = DDLoadBitmap( "graphics\\bonus.bmp" );
	DDSetColorKey( m_pBmpList[6], 0 );

	m_pBmpList[7] = DDLoadBitmap( "graphics\\bore.bmp" );
	DDSetColorKey( m_pBmpList[7], 0 );
	
	m_pBmpList[8] = DDLoadBitmap( "graphics\\misc.bmp" );
	DDSetColorKey( m_pBmpList[8], RGB(255,255,255) );

	m_pBmpList[9] = DDLoadBitmap( "graphics\\player2.bmp" );
	DDSetColorKey( m_pBmpList[9], 0 );

	m_pBmpList[10] = DDLoadBitmap( "graphics\\splash.bmp" );
	DDSetColorKey( m_pBmpList[10], 0 );

	m_pBmpList[11] = DDLoadBitmap( "graphics\\gameover.bmp" );
	DDSetColorKey( m_pBmpList[11], 0 );

	m_pBmpList[12] = DDLoadBitmap( "graphics\\flag.bmp" );
	DDSetColorKey( m_pBmpList[12], RGB(255,255,255) );

	m_pBmpList[13] = DDLoadBitmap( "graphics\\num.bmp" );
	DDSetColorKey( m_pBmpList[13], RGB(255,255,255) );

	m_pBmpList[14] = DDLoadBitmap( "graphics\\shield.bmp" );
	DDSetColorKey( m_pBmpList[14], 0 );

	return TRUE;
}


//-----------------------------------------------------------------------------
// Name: DDColorMatch()
// Desc: Convert a RGB color to a pysical color.
//       We do this by leting GDI SetPixel() do the color matching
//       then we lock the memory and see what it got mapped to.
//-----------------------------------------------------------------------------
DWORD DDColorMatch(LPDIRECTDRAWSURFACE pdds, COLORREF rgb)
{
    COLORREF                rgbT;
    HDC                     hdc;
    DWORD                   dw = CLR_INVALID;
    DDSURFACEDESC			ddsd;
    HRESULT                 hres;

    //
    //  Use GDI SetPixel to color match for us
    //
    if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
    {
        rgbT = GetPixel(hdc, 0, 0);     // Save current pixel value
        SetPixel(hdc, 0, 0, rgb);       // Set our value
        pdds->ReleaseDC(hdc);
    }
    //
    // Now lock the surface so we can read back the converted color
    //
    ddsd.dwSize = sizeof(ddsd);
    while ((hres = pdds->Lock(NULL, &ddsd, 0, NULL)) == DDERR_WASSTILLDRAWING)
        ;
    if (hres == DD_OK)
    {
        dw = *(DWORD *) ddsd.lpSurface;                 // Get DWORD
        if (ddsd.ddpfPixelFormat.dwRGBBitCount < 32)
            dw &= (1 << ddsd.ddpfPixelFormat.dwRGBBitCount) - 1;  // Mask it to bpp
        pdds->Unlock(NULL);
    }
    //
    //  Now put the color that was there back.
    //
    if (rgb != CLR_INVALID && pdds->GetDC(&hdc) == DD_OK)
    {
        SetPixel(hdc, 0, 0, rgbT);
        pdds->ReleaseDC(hdc);
    }
    return dw;
}


//-----------------------------------------------------------------------------
// Name: DDSetColorKey()
// Desc: Set a color key for a surface, given a RGB.
//       If you pass CLR_INVALID as the color key, the pixel
//       in the upper-left corner will be used.
//-----------------------------------------------------------------------------
HRESULT DDSetColorKey(LPDIRECTDRAWSURFACE pdds, COLORREF rgb)
{
    DDCOLORKEY              ddck;

    ddck.dwColorSpaceLowValue = DDColorMatch(pdds, rgb);
    ddck.dwColorSpaceHighValue = ddck.dwColorSpaceLowValue;
    return pdds->SetColorKey(DDCKEY_SRCBLT, &ddck);
}


void CGame::ResetPlayer( CPlayer& player )
{
	if( &player == &m_player[0] )
	{
		player.m_x = PLAYER1_STARTX;
		player.m_y = PLAYER1_STARTY;
	}
	else
	{
		player.m_x = PLAYER2_STARTX;
		player.m_y = PLAYER2_STARTY;
	}
	player.Reborn();
}



BOOL CGame::InitGame()
{
	srand( timeGetTime() );
	
	// initialize input devices
	m_DirectInput.Create( m_hInst, m_hWnd );
	
	// initizlize sound effects
	m_DirectSound.Init( m_hWnd );

	m_player[0].Create( 28, 28, TRUE );
	m_player[1].Create( 28, 28, TRUE );

	for( int i = 0; i < NUM_ENEMYS; i ++ )
		m_enemy[i].Create( 28, 28, FALSE );

	for( i = 0; i < NUM_EXPLODES;  i ++ )
		m_explode[i].Create( 28, 28, FALSE );

	m_bonus.Create( 30, 28, FALSE );

	m_gameState = GS_SPLASH;

	return TRUE;
}


void CGame::CleanUpGame()
{

}


BOOL CGame::InitLevel()
{
	char map[255];
	sprintf( map, "map\\level%d.map", m_nLevel );
	if( !m_plane.Create( map ) )
	{
		m_nLevel = 1;
		sprintf( map, "map\\level%d.map", m_nLevel );
		if( !m_plane.Create( map ) )
			return FALSE;
	}

	if( m_player[0].m_nLife > 0 )
		ResetPlayer( m_player[0] );
	if( m_bSingle )
		m_player[1].m_active = FALSE;
	else if( m_player[1].m_nLife > 0 )
		ResetPlayer( m_player[1] );

	m_player[0].m_bullet[0].m_active = FALSE;
	m_player[0].m_bullet[1].m_active = FALSE;
	m_player[1].m_bullet[0].m_active = FALSE;
	m_player[1].m_bullet[1].m_active = FALSE;


	for( int i = 0; i < NUM_ENEMYS; i ++ )
	{
		m_enemy[i].m_active = FALSE;
		m_enemy[i].m_bullet[0].m_active = FALSE;
	}
	for( i = 0; i < NUM_EXPLODES; i ++ )
		m_explode[i].m_active = FALSE;
	m_bonus.m_active = FALSE;

	m_bEnemyLocked = FALSE;
	m_nEnemysLeft = m_nEnemys = 20;

	return TRUE;
}


BOOL CGame::ResetGame()
{
	m_player[0].m_nLife = 3;
	m_player[0].m_type = 0;
	m_player[0].m_nScore = 0;

	if( !m_bSingle )
	{
		m_player[1].m_nLife = 3;
		m_player[1].m_type = 0;
		m_player[1].m_nScore = 0;
		m_nMaxEnemys = 6;
	}
	else
		m_nMaxEnemys = 4;

	m_gameState = GS_ACTIVE;

	m_nLevel = 1;
	return InitLevel();
}



///////////////////////////////////////////////////////
//		Main entry point for win32 application
///////////////////////////////////////////////////////

int WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR lpCmdLine,
				   int nCmdShow )
{
	CGame	game;
	
	game.Initialize( hInst );
	return game.Run();
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩日本视频| 久久影院午夜片一区| 91视频国产资源| 成人性生交大片| 国内外成人在线| 精久久久久久久久久久| 日日夜夜免费精品| 日日夜夜免费精品| 日本成人超碰在线观看| 日韩av网站在线观看| 日本91福利区| 激情久久五月天| 国产成人综合在线观看| 国产成人在线观看| 成人免费观看av| 波多野结衣中文字幕一区二区三区 | 欧美一级爆毛片| 日韩午夜三级在线| 精品av综合导航| 国产欧美日韩精品一区| 国产精品免费久久| 综合电影一区二区三区| 樱桃国产成人精品视频| 亚洲国产精品一区二区www在线| 亚洲自拍欧美精品| 日本成人中文字幕在线视频| 久久精品久久99精品久久| 国内精品伊人久久久久av影院 | 免费一区二区视频| 极品瑜伽女神91| 国产.欧美.日韩| 99热国产精品| 欧美在线你懂的| 欧美一区二区三区啪啪| 欧美大度的电影原声| 欧美国产视频在线| 亚洲一区二区三区四区中文字幕| 日本va欧美va欧美va精品| 国产在线麻豆精品观看| 成人免费看视频| 欧美三级视频在线观看| 欧美不卡一区二区三区四区| 国产精品丝袜黑色高跟| 夜色激情一区二区| 麻豆精品精品国产自在97香蕉| 国产一区二区精品在线观看| 99综合影院在线| 制服丝袜中文字幕一区| 亚洲国产精品ⅴa在线观看| |精品福利一区二区三区| 偷拍自拍另类欧美| 成人爽a毛片一区二区免费| 欧美亚男人的天堂| 久久久天堂av| 亚洲成人午夜影院| 国产高清精品网站| 欧美日韩免费一区二区三区视频 | 热久久国产精品| 粉嫩av一区二区三区在线播放| 色88888久久久久久影院野外 | 樱花草国产18久久久久| 日产国产高清一区二区三区| 成人手机电影网| 日韩欧美黄色影院| 一区二区三区毛片| 国产成人在线观看免费网站| 欧美日韩国产综合一区二区三区| 国产欧美日本一区二区三区| 丝袜诱惑制服诱惑色一区在线观看| 粉嫩av一区二区三区粉嫩| 欧美一区二区三区影视| 亚洲精品视频免费看| 国产激情视频一区二区在线观看| 在线视频一区二区三区| 久久九九99视频| 秋霞午夜鲁丝一区二区老狼| 91黄色激情网站| 欧美激情自拍偷拍| 精品在线观看视频| 在线播放一区二区三区| 亚洲精品乱码久久久久久黑人| 国产不卡一区视频| 欧美成人欧美edvon| 午夜日韩在线观看| 一本到高清视频免费精品| 国产三级三级三级精品8ⅰ区| 日本女优在线视频一区二区 | 亚洲国产激情av| 韩国三级中文字幕hd久久精品| 欧美性色aⅴ视频一区日韩精品| 国产精品人妖ts系列视频| 狠狠久久亚洲欧美| 91麻豆精品久久久久蜜臀| 亚洲日本在线a| 国产成人亚洲综合a∨婷婷| 91福利精品视频| 中文字幕电影一区| 国产在线观看一区二区 | 亚洲欧美乱综合| 国产99久久久国产精品潘金网站| 欧美大片拔萝卜| 日韩电影免费在线| 精品视频一区三区九区| 亚洲欧美一区二区三区孕妇| 国产a久久麻豆| 久久久久九九视频| 日韩和欧美一区二区三区| 欧美人狂配大交3d怪物一区| 亚洲伦理在线免费看| 99久久婷婷国产综合精品 | 青青草97国产精品免费观看 | 成人午夜私人影院| 欧美一区二区三级| 免费观看久久久4p| 91麻豆精品国产91久久久资源速度 | 欧美videossexotv100| 天天操天天干天天综合网| 精品视频123区在线观看| 亚洲3atv精品一区二区三区| 欧美亚洲日本一区| 亚洲专区一二三| 欧美日韩综合不卡| 亚洲电影第三页| 欧美精品乱码久久久久久| 国产精品美女久久久久aⅴ| 91麻豆国产自产在线观看| 综合电影一区二区三区 | 亚洲美女精品一区| 色婷婷国产精品久久包臀| ㊣最新国产の精品bt伙计久久| 日本福利一区二区| 亚洲综合av网| 777久久久精品| 蜜乳av一区二区三区| 精品国产在天天线2019| 狠狠狠色丁香婷婷综合激情 | 亚洲一区二区三区在线| 欧美日韩成人在线一区| 亚洲一区二区成人在线观看| 欧美一区二区三区色| 久久精品av麻豆的观看方式| 久久久久久免费网| 粉嫩av一区二区三区在线播放 | 欧美在线免费观看视频| 日韩成人一级片| 337p日本欧洲亚洲大胆色噜噜| 国产一区二区视频在线| 久久精品网站免费观看| 欧美在线观看视频一区二区| 日韩在线播放一区二区| 精品成人一区二区| 成人免费三级在线| 亚洲午夜精品17c| 日韩美女视频在线| 极品少妇xxxx精品少妇| 亚洲免费av高清| 日韩小视频在线观看专区| 国产精品白丝av| 一区二区三区在线观看视频| 欧美日本一区二区三区四区| 精品一区二区成人精品| 日本一区二区免费在线观看视频| 欧美日韩一区二区三区高清| 精品一区二区三区香蕉蜜桃 | 国产精品一区三区| 樱桃视频在线观看一区| 精品少妇一区二区三区在线视频| 久久99久久99| 亚洲免费观看高清完整版在线| 日韩欧美亚洲一区二区| 91小视频免费看| 久久国产精品无码网站| 亚洲免费av观看| 精品国产一二三| 粗大黑人巨茎大战欧美成人| 蜜臀久久久久久久| 1024成人网| 精品国产乱码久久久久久老虎 | 国产精品一级片| 丝袜美腿亚洲一区| 国产精品美女一区二区在线观看| 欧美肥胖老妇做爰| 99国产精品久久久久久久久久 | 日韩 欧美一区二区三区| 亚洲欧洲日产国码二区| 欧美电视剧在线观看完整版| 欧美中文字幕一区二区三区亚洲| 国产精品18久久久久| 亚洲地区一二三色| 国产精品午夜久久| 亚洲精品在线观看视频| 欧美在线观看18| proumb性欧美在线观看| 久久99国产精品尤物| 亚洲成人免费在线观看| 亚洲视频一区二区在线观看| 欧美激情一区二区三区蜜桃视频| 91精品久久久久久久99蜜桃| 在线看国产一区二区| 成人黄色电影在线|