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

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

?? game.cpp

?? 很好的vc++菜單界面
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
		hr = m_pddsFrontBuffer->Blt( &m_rcWindow, m_pddsBackBuffer,
				NULL, DDBLT_WAIT, NULL );
	}

	if( hr == DDERR_SURFACELOST )
		RestoreSurfaces();
}


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;
}


void CGame::RestoreSurfaces()
{
	m_pddsBackBuffer->Restore();
	m_pddsFrontBuffer->Restore();

	for( int i = 0; i < NUM_BITMAPS; i ++ )
		m_pBmpList[i]->Restore();

	DDReLoadBitmap( m_pBmpList[0], "graphics\\tile.bmp" );
	DDReLoadBitmap( m_pBmpList[1], "graphics\\player1.bmp" );
	DDReLoadBitmap( m_pBmpList[2], "graphics\\bullet.bmp" );
	DDReLoadBitmap( m_pBmpList[3], "graphics\\explode1.bmp" );
	DDReLoadBitmap( m_pBmpList[4], "graphics\\explode2.bmp" );
	DDReLoadBitmap( m_pBmpList[5], "graphics\\enemy.bmp" );
	DDReLoadBitmap( m_pBmpList[6], "graphics\\bonus.bmp" );
	DDReLoadBitmap( m_pBmpList[7], "graphics\\bore.bmp" );
	DDReLoadBitmap( m_pBmpList[8], "graphics\\misc.bmp" );
	DDReLoadBitmap( m_pBmpList[9], "graphics\\player2.bmp" );
	DDReLoadBitmap( m_pBmpList[10], "graphics\\splash.bmp" );
	DDReLoadBitmap( m_pBmpList[11], "graphics\\gameover.bmp" );
	DDReLoadBitmap( m_pBmpList[12], "graphics\\flag.bmp" );
	DDReLoadBitmap( m_pBmpList[13], "graphics\\num.bmp" );
	DDReLoadBitmap( m_pBmpList[14], "graphics\\shield.bmp" );
}


void CGame::DDClear( RECT* prc, DWORD dwFillColor )
{
	DDBLTFX	ddbfx;
	ZeroMemory( &ddbfx, sizeof(ddbfx) );
	ddbfx.dwSize = sizeof(ddbfx);
	ddbfx.dwFillColor = dwFillColor;
	
	m_pddsBackBuffer->Blt( prc, NULL, NULL, 
		DDBLT_COLORFILL | DDBLT_WAIT, &ddbfx );
}


void CGame::ProcessInput()
{
	static DWORD lastTick = timeGetTime();
	DWORD time = timeGetTime() - lastTick;
	CBullet* bullet;
	float x, y;
	DIRECTION dir;
	int surface;
	int i, j, k;
	lastTick = timeGetTime();
	
	
	// process player's input
	
	WORD input[2];
	m_DirectInput.GetKey( input[0], input[1] );

	for( k = 0; k < 2; k ++ )
	{
		if( !m_player[k].m_active )
			continue;

		x = m_player[k].m_x;
		y = m_player[k].m_y;
		dir = m_player[k].m_dir;

		if( !m_player[k].m_bBoring && m_gameState != GS_OVER )
		{
			if( m_player[k].ProcessInput(input[k], time) )
				m_DirectSound.Play( EFFECT_FIRE );
		}
		surface = m_plane.GetSurface( m_player[k] );
		if( surface != OBJ_NULL &&
			surface != OBJ_TREE )
		{
			m_player[k].m_x = x;
			m_player[k].m_y = y;
			m_player[k].m_dir = dir;
		}
		if( m_player[k].HitTest( m_player[!k], (int)x, (int)y ) )
		{
			// two players hit together 
			m_player[k].m_x = x;
			m_player[k].m_y = y;
			m_player[k].m_dir = dir;
		}
		
		for( i = 0; i < m_nMaxEnemys; i ++ )
		{
			if( m_player[k].HitTest( m_enemy[i], (int)x, (int)y ) )
			{
				// we hit the enemy
				m_player[k].m_x = x;
				m_player[k].m_y = y;
				m_player[k].m_dir = dir;
				break;
			}
		}
	
		if( m_player[k].HitTest( m_bonus ) )
		{
			// we hit the bonus
			EatBonus( m_player[k] );
		}

		// bullet
		for( j = 0; j < 2; j ++ )
		{
			bullet = &m_player[k].m_bullet[j];
			if( !bullet->m_active )
				continue;

			if( !bullet->Move() )
			{
				bullet->m_active = FALSE;
				continue;
			}
			int surface = m_plane.HitSurface( *bullet, m_player[k].m_type>=3 );
			if( surface == OBJ_BRICK )
			{
				bullet->m_active = FALSE;
				Explode( *bullet );
			}
			else if( surface == OBJ_CONCRETE )
			{
				bullet->m_active = FALSE;
				Explode( *bullet );
				m_DirectSound.Play( EFFECT_HIT );
			}
			else if( surface == OBJ_HAWK )
			{
				bullet->m_active = FALSE;
				Explode( *bullet, TRUE );
				m_DirectSound.Play( EFFECT_EXPLODE );
				m_gameState = GS_OVER;
			}
			
			if( !m_bSingle &&
				bullet->HitTest( m_player[!k] ) )
				
			{
				// We hit the other player
				bullet->m_active = FALSE;
				if( !m_player[!k].m_bShield )
					m_player[!k].Lock();
			}
			
			for( i = 0; i < m_nMaxEnemys; i ++ )
			{
				if( !m_enemy[i].m_bShield && !m_enemy[i].m_bBoring &&
					bullet->HitTest( m_enemy[i] ) )
				{
					// our bullet hit the enemy
					bullet->m_active = FALSE;
					Explode( *bullet );					
					if( m_enemy[i].m_bBonus )
					{
						m_enemy[i].m_bBonus = FALSE;
						BoreBonus();
					}

					if( m_enemy[i].m_type == 2 )
					{
						if( --m_enemy[i].m_level < 0 )
							m_enemy[i].m_active = FALSE;
					}
					else
						m_enemy[i].m_active = FALSE;

					if( !m_enemy[i].m_active )
					{
						// the enemy is dead
						Explode( m_enemy[i], TRUE );
						m_DirectSound.Play( EFFECT_EXPLODE );
						m_nEnemys --;
						m_player[k].m_nScore += (m_enemy[i].m_type+1) * 100;
					}
					break;
				}
				else if( bullet->HitTest( m_enemy[i].m_bullet[0] ) )
				{
					// our bullet hit the enemy's
					bullet->m_active = FALSE;
					m_enemy[i].m_bullet[0].m_active = FALSE;
					break;
				}
			}
		}
	}

	if( !m_bSingle )
	{
		for( i = 0; i < 2; i ++ )
			for( j = 0; j < 2; j ++ )
			{
				if( m_player[0].m_bullet[i].HitTest(
					m_player[1].m_bullet[j] ) )
				{
					// two players' bullet hit together
					m_player[0].m_bullet[i].m_active = FALSE;
					m_player[1].m_bullet[j].m_active = FALSE;
				}
			}
	}
				


	
	// process enemys
	for( i = 0; i < m_nMaxEnemys; i ++ )
	{
		if( !m_bEnemyLocked && !m_enemy[i].m_bBoring &&
			m_enemy[i].m_active )
		{
			x = m_enemy[i].m_x;
			y = m_enemy[i].m_y;
			dir = m_enemy[i].m_dir;
			
			if( rand() % 200 == 0 ||
				!m_enemy[i].Move() )
			{
				m_enemy[i].ChangeDirection();
			}
			
			surface = m_plane.GetSurface( m_enemy[i] );
			if( surface == OBJ_BRICK )
			{
				if( rand() % 100 < 30 )
				{
					m_enemy[i].ChangeDirection();
					surface = m_plane.GetSurface( m_enemy[i] );
				}
				else
					m_enemy[i].Fire();
			}
			else if( surface == OBJ_CONCRETE ||
					surface == OBJ_RIVER )
			{
				m_enemy[i].ChangeDirection();
				surface = m_plane.GetSurface( m_enemy[i] );
			}
			if( m_enemy[i].HitTest( m_player[0], (int)x, (int)y ) ||
				m_enemy[i].HitTest( m_player[1], (int)x, (int)y ) )
			{
				m_enemy[i].m_x = x;
				m_enemy[i].m_y = y;
				m_enemy[i].m_dir = dir;
				m_enemy[i].Fire();
			}
			else if( surface != OBJ_NULL && surface != OBJ_TREE )
			{
				m_enemy[i].m_x = x;
				m_enemy[i].m_y = y;
				m_enemy[i].m_dir = dir;
			}
			for( int j = 0; j < m_nMaxEnemys; j ++ )
			{
				if( i != j &&
					m_enemy[i].HitTest( m_enemy[j], (int)x, (int)y ) )
				{
					// two enemys hit each other
					m_enemy[i].ChangeDirection();
					if( m_enemy[i].HitTest( m_enemy[j], (int)x, (int)y ) )
					{
						m_enemy[i].m_x = x;
						m_enemy[i].m_y = y;
						m_enemy[i].m_dir = dir;
					}
					break;
				}
			}
			
			// the enemy can also eat the bonus
			if( m_enemy[i].HitTest( m_bonus ) )
				EatBonus( m_enemy[i] );
						
			if( rand() % 100 == 0 )
				m_enemy[i].Fire();
		}

		bullet = &m_enemy[i].m_bullet[0];
		if( bullet->m_active )
		{
			if( !bullet->Move() )
				bullet->m_active = FALSE;
	
			surface = m_plane.HitSurface( *bullet );
			if( surface == OBJ_BRICK ||
				surface == OBJ_CONCRETE )
			{
				bullet->m_active = FALSE;
				Explode( *bullet );
			}
			else if( surface == OBJ_HAWK )
			{
				bullet->m_active = FALSE;
				Explode( *bullet, TRUE );
				m_DirectSound.Play( EFFECT_EXPLODE );
				m_gameState = GS_OVER;
			}

			for( k = 0; k < 2; k ++ )
			{
				if( bullet->HitTest( m_player[k] ) )
				{
					// enemy's bullet hit us
					bullet->m_active = FALSE;
					if( !m_player[k].m_bShield )
					{
						Explode( *bullet );
						PlayerBeenHit( m_player[k] );
						m_DirectSound.Play( EFFECT_EXPLODE );
					}
				}
			}
		}
	}

	// produce some enemys...
	static DWORD lastTime;
	DWORD thisTime = timeGetTime();

	if( thisTime - lastTime > 3000 )
	{
		lastTime = thisTime;
		BoreEnemy();
	}

	// It's time to unlock the enemys
	if( m_bEnemyLocked &&
		thisTime - m_lockTime > 10000 )
	{
		m_bEnemyLocked = FALSE;
	}

	if( m_nEnemys <= 0 && m_gameState == GS_ACTIVE )
	{
		m_gameState = GS_WIN;
		m_lastTime = timeGetTime();
	}

	if( !m_player[0].m_active && !m_player[1].m_active )
		m_gameState = GS_OVER;
}


void CGame::DrawWorld()
{
	RECT rc;
	rc.left = OFFSETX;
	rc.right = rc.left + 416;
	rc.top = OFFSETY;
	rc.bottom = rc.top + 416;
	DDClear( &rc, 0x0 );
	
	rc.left = 0;
	rc.right = SCREEN_W;
	rc.top = 0;
	rc.bottom = OFFSETY;
	DDClear( &rc, m_dwFillColor );
	
	rc.top = OFFSETY + 416;
	rc.bottom = SCREEN_H;
	DDClear( &rc, m_dwFillColor );
	
	rc.left = 0;
	rc.right = OFFSETX;
	rc.top = OFFSETY;
	rc.bottom = rc.top + 416;
	DDClear( &rc, m_dwFillColor );
	
	rc.left = OFFSETX + 416;
	rc.right = SCREEN_W;
	DDClear( &rc, m_dwFillColor );
	
	m_plane.Draw( m_pddsBackBuffer );
	for( int i = 0; i < m_nMaxEnemys; i ++ )
		m_enemy[i].Draw( m_pddsBackBuffer );
	m_player[0].Draw( m_pddsBackBuffer );
	m_player[1].Draw( m_pddsBackBuffer );	
	m_plane.DrawTree( m_pddsBackBuffer );
	for( i = 0; i < NUM_EXPLODES; i ++ )
		m_explode[i].Draw( m_pddsBackBuffer );
	m_bonus.Draw( m_pddsBackBuffer );
	
	rc.left = 0;
	rc.top = 0;
	rc.right = 14;
	rc.bottom = 14;
	for( i = 0; i < m_nEnemysLeft; i ++ )
	{
		int x = 550 + i % 2 * 15;
		int y = 68 + i / 2 * 15;
		
		m_pddsBackBuffer->BltFast( x, y, m_pBmpList[8], &rc,
			DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );
	}

	rc.left = 28;
	rc.right = rc.left + 28;
	m_pddsBackBuffer->BltFast( 550, 300, m_pBmpList[8], &rc,
			DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );

	m_pddsBackBuffer->BltFast( 20, 20, m_pBmpList[8], &rc,
			DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );
	BltNumber( 70, 20, m_player[0].m_nScore );

	rc.left = 14;
	rc.right = rc.left + 14;
	m_pddsBackBuffer->BltFast( 550, 317, m_pBmpList[8], &rc,
		DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );

	BltNumber( 570, 317, m_player[0].m_nLife );

	if( !m_bSingle )
	{
		rc.left = 56;
		rc.right = rc.left + 28;
		m_pddsBackBuffer->BltFast( 550, 350, m_pBmpList[8],
			&rc, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );
	
		m_pddsBackBuffer->BltFast( 480, 20, m_pBmpList[8], &rc,
			DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );
		BltNumber( 530, 20, m_player[1].m_nScore );

		rc.left = 14;
		rc.right = rc.left + 14;
		m_pddsBackBuffer->BltFast( 550, 367, m_pBmpList[8],
			&rc, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );

		BltNumber( 570, 367, m_player[1].m_nLife );
	}

	// draw level No.
	m_pddsBackBuffer->BltFast( 550, 400, m_pBmpList[12], NULL,
			DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );
	BltNumber( 580, 420, m_nLevel );
}


void CGame::BltNumber( int x, int y, int n )
{
	char szNum[20];
	sprintf( szNum, "%d", n );
	int len = lstrlen( szNum );

	for( int i = 0; i < len; i ++ )
	{
		RECT rc;
		rc.left = (szNum[i] - '0') * 14;
		rc.right = rc.left + 14;
		rc.top = 0;
		rc.bottom = 14;
		m_pddsBackBuffer->BltFast( x, y, m_pBmpList[13], &rc,
			DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );

		x += 15;
	}
}



void CGame::DoSplash()
{
	HRESULT hr;
	
	DDClear( NULL, 0 );

	hr = m_pddsBackBuffer->BltFast( 135, 130, m_pBmpList[10], NULL,
			DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );
	if( hr == DDERR_SURFACELOST )
		RestoreSurfaces();

	RECT rc;
	rc.left = 0;
	rc.right = 28;
	rc.top = 28;
	rc.bottom = 56;
	m_pddsBackBuffer->BltFast( 200, 300 + 30*(!m_bSingle),
		m_pBmpList[1], &rc, DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT );
}



void CGame::UpdateFrame()
{
	static DWORD lastTick = timeGetTime();

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品久久只有精品| 精品成人佐山爱一区二区| 欧美精品一级二级三级| 日韩欧美一二三| 自拍av一区二区三区| 久久精品噜噜噜成人av农村| 91丨porny丨户外露出| 精品国产成人在线影院| 亚洲午夜免费福利视频| 成人91在线观看| 亚洲精品在线网站| 亚洲va欧美va天堂v国产综合| 国产毛片精品视频| 色婷婷综合视频在线观看| 日本精品视频一区二区| 久久综合久久鬼色| 五月天精品一区二区三区| 91在线观看一区二区| 久久久国产综合精品女国产盗摄| 亚洲高清三级视频| 91国内精品野花午夜精品| 国产精品区一区二区三区| 国产一区二区三区国产| 日韩美一区二区三区| 男人操女人的视频在线观看欧美| 欧美日韩视频专区在线播放| 亚洲精品国产无天堂网2021| 91性感美女视频| 1000精品久久久久久久久| 国产成人在线视频网站| www久久精品| 美女网站视频久久| 欧美一区二区三区婷婷月色 | 亚洲精品一卡二卡| 国产不卡在线一区| 中文字幕电影一区| 处破女av一区二区| 国产精品每日更新| 91在线播放网址| 亚洲欧美日韩一区二区 | 日韩免费看网站| 蜜桃免费网站一区二区三区| 欧美精品少妇一区二区三区| 日韩va欧美va亚洲va久久| 欧美久久高跟鞋激| 日本欧美在线观看| 久久亚洲综合色| 久久国产精品第一页| 久久九九影视网| 成人91在线观看| 亚洲午夜久久久久| 欧美大白屁股肥臀xxxxxx| 麻豆精品蜜桃视频网站| 欧美激情综合在线| 色欲综合视频天天天| 性做久久久久久久免费看| 日韩免费在线观看| 国产69精品一区二区亚洲孕妇 | 91污在线观看| 一区二区三区 在线观看视频| 欧美亚洲自拍偷拍| 麻豆国产精品777777在线| 国产亚洲精久久久久久| 色综合久久久久网| 日韩高清一区在线| 精品日韩在线一区| 色婷婷av久久久久久久| 久久精品国产99国产| 国产精品色在线| 在线成人午夜影院| 福利电影一区二区三区| 亚洲va欧美va天堂v国产综合| 久久久久国产精品厨房| 欧美色综合影院| 国产乱码精品一区二区三| 亚洲精品一区二区三区蜜桃下载| av高清久久久| 精品国产伦一区二区三区观看方式 | 成人一级片网址| 国产精品美女久久久久av爽李琼| 在线国产亚洲欧美| 国产在线精品一区二区三区不卡| 欧美国产乱子伦 | 91视频免费播放| 久久机这里只有精品| 一区二区三区在线观看国产| 久久青草欧美一区二区三区| 欧美日韩精品欧美日韩精品| 成人一区二区三区在线观看| 日本 国产 欧美色综合| 亚洲欧美日韩系列| 中文在线资源观看网站视频免费不卡 | 午夜激情一区二区三区| 国产视频一区在线观看| 91精品国产91久久久久久一区二区| 不卡欧美aaaaa| 日本精品视频一区二区| 亚洲 欧美综合在线网络| 国产精品国产自产拍高清av王其| 欧美一级在线观看| 欧美在线视频全部完| 不卡电影一区二区三区| 国产乱码精品一区二区三区忘忧草| 日韩av网站免费在线| 亚洲午夜日本在线观看| 亚洲免费观看视频| 国产精品动漫网站| 精品国产凹凸成av人导航| 欧美一区二区三区婷婷月色| 777奇米四色成人影色区| 在线观看免费成人| 欧洲精品在线观看| 在线观看日韩电影| 色一区在线观看| 91免费国产视频网站| 波多野结衣亚洲一区| 丰满少妇久久久久久久| 国产精品18久久久久| 国产精品一区二区你懂的| 国产真实精品久久二三区| 蜜桃视频一区二区三区在线观看 | 亚洲美女视频在线观看| 中文在线免费一区三区高中清不卡| 久久综合久久99| 国产精品情趣视频| 亚洲日本免费电影| 一区二区三区视频在线观看| 亚洲一区二区三区在线| 视频一区二区三区中文字幕| 免费观看久久久4p| 国产一区二区福利视频| 成人午夜电影久久影院| 色诱视频网站一区| 欧美高清视频不卡网| 欧美不卡123| 国产精品全国免费观看高清| 亚洲欧洲综合另类| 亚洲18色成人| 国产不卡在线视频| 色婷婷精品久久二区二区蜜臀av | 日韩和欧美一区二区三区| 免费成人小视频| 亚洲一区二区在线观看视频| 中文字幕在线视频一区| 一区二区三区在线看| 亚洲成人www| 久久精品久久久精品美女| 丁香桃色午夜亚洲一区二区三区| 91在线你懂得| 在线观看91av| 欧美国产国产综合| 亚洲国产欧美在线| 国产剧情一区二区| 色婷婷亚洲综合| 欧美电视剧在线看免费| 亚洲欧美综合色| 久久精品av麻豆的观看方式| 99在线精品免费| 日韩一区二区三区在线| 中文字幕一区二区在线观看| 日韩精品国产欧美| 94-欧美-setu| 精品国产一二三| 亚洲一区二区在线免费观看视频| 国产一区二区三区美女| 欧美日韩高清在线播放| 中文av字幕一区| 麻豆一区二区三区| 在线观看av一区二区| 国产性色一区二区| 日本视频中文字幕一区二区三区| 97se亚洲国产综合在线| 久久精品亚洲国产奇米99| 图片区日韩欧美亚洲| 99久久久久久| 久久综合九色欧美综合狠狠| 亚洲不卡一区二区三区| 91精品办公室少妇高潮对白| 欧美国产禁国产网站cc| 精品一区二区三区免费观看| 欧美日韩中文字幕精品| 综合av第一页| 成人小视频免费在线观看| 欧美videossexotv100| 日韩成人伦理电影在线观看| 色婷婷久久久综合中文字幕| 亚洲欧洲日韩在线| 高清日韩电视剧大全免费| 精品99一区二区| 男女男精品网站| 日韩免费在线观看| 免费的成人av| 日韩亚洲欧美成人一区| 丝袜诱惑亚洲看片| 欧美日韩一区二区三区高清| 亚洲午夜一区二区| 欧美精品三级在线观看| 亚洲成av人影院在线观看网| 在线观看免费视频综合| 五月天中文字幕一区二区|