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

📄 g2.cpp

📁 VC入门游戏代码~~~~~~~~~泡泡堂
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			//子弹移动
			if( !bullet->Move() )
			{ //子弹失效时处理
				bullet->m_active = FALSE;
				continue;
			}
	//子弹打中敌人
//-----------------------------------------------
		for( i = 0; i < m_nMaxEnemys; i ++ )
			{
				if( !m_enemy[i].m_bBoring &&
					bullet->HitTest( m_enemy[i] ) )
				{
					// our bullet hit the enemy
					bullet->m_active = FALSE;
				//爆炸	
				////	Explode( *bullet );	
					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 );
						BoreBonus(m_enemy[i].m_x,m_enemy[i].m_y);
						m_nEnemys --;
						m_player[k].m_nScore += 100;
					}
					break;
				}
			}	//子弹打中敌人(END)
//-----------------------------------------------
		}//玩家子弹处理(END)
//------------------------------------------------------
	}//玩家处理END


//+++++++++++++++++++++++++++++++++
//		敌人的处理区
//+++++++++++++++++++++++++++++++++
	if(m_bEnemyLocked) 
		if((timeGetTime()-m_lockTime)>5000) m_bEnemyLocked=false;
//五秒后解锁
///-------
		for( i = 0; i < m_nMaxEnemys&&!m_bEnemyLocked; i ++ )
	{
//活动的,没在生的(移动和转向)
//-----------
		if(!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;
			//走不动的的必转方向,走动的有0.5%概率转方向
			if( rand() % 200 == 0 ||
				!m_enemy[i].Move() )
			{
				m_enemy[i].ChangeDirection();
			}
		}
//-----------	
		
///检测是否敌方碰到了
//-------------------------
			for( int j = 0; j < m_nMaxEnemys; j ++ )
			{
				if( i != j &&
					m_enemy[i].HitTest( m_enemy[j], x, y ) )
				{
					// two enemys hit each other
					m_enemy[i].ChangeDirection();
				/*
					//改变方向后还是碰了,就还原吧
			
					if( m_enemy[i].HitTest( m_enemy[j], x, y ) )
					{
						m_enemy[i].m_x = x;
						m_enemy[i].m_y = y;
						m_enemy[i].m_dir = dir;
					}
				*/
					break;
				}
			}///检测是否敌方碰到了(END)
//-------------------------
		//有1%概率开火	
			if( rand() % 50 == 0 )
				m_enemy[i].Fire();
//检测敌方子弹的碰击
//-----------
		bullet = &m_enemy[i].m_bullet[0];
		if( bullet->m_active )
		{
			if( !bullet->Move() )
				bullet->m_active = FALSE;
		}
		for(k=0;k<2;k++)
			if(bullet->HitTest(m_player[k]))
			{
				bullet->m_active = FALSE;
				m_player[k].m_nLife--;
				if(m_player[k].m_nLife<0)
				{
					m_player[k].m_active=FALSE;
					m_gameState=GS_OVER;
				}
			}
//-----------
	}	// process enemys(END)
		//(For 语句)活动的,没在生的(移动和转向)(END)
lastTick = timeGetTime();
}
	// produce some enemys...
	static DWORD lastTime=0;
	DWORD thisTime = timeGetTime();
//3 Sec后 就产生敌人
	if( thisTime - lastTime > 3000 )
	{
		lastTime = thisTime;
		BoreEnemy();
	}

}		
		//	surface = m_plane.GetSurface( m_enemy[i] );
	//		if( surface == OBJ_BRICK )
		//	{//如果是墙有70%是开火,30%转方向
			/*	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;
			}

  */

	

////////////////////////////////////////////////////////
//Load all the Bitmap or Create DC
////////////////////////////////////////////////////////
BOOL CGame::DDInit()
{
 m_hWnd=HWnd;
 hdc=GetDC(m_hWnd);
 hdcMem=CreateCompatibleDC(hdc);
 hdcBuff=CreateCompatibleDC(hdc);
 hdcMem_Test=CreateCompatibleDC(hdc);

hbm=CreateCompatibleBitmap(hdc,700,500);
hTest_bmp=CreateCompatibleBitmap(hdc,53,49);
	SelectObject(hdcMem,hbm);
	SelectObject(hdcMem_Test,hTest_bmp);
	//=h_pic
m_pBmpList[0]=(HBITMAP)LoadImage(NULL,"pic\\Sky.bmp",IMAGE_BITMAP,40,40,LR_LOADFROMFILE);
	
	//h_ball
m_pBmpList[1]=(HBITMAP)LoadImage(NULL,"pic\\位图_126.bmp",IMAGE_BITMAP,13,13,LR_LOADFROMFILE);
/*
	//h_Killer
//m_pBmpList[1]=(HBITMAP)LoadImage(NULL,"Killer.bmp",IMAGE_BITMAP,106,49,LR_LOADFROMFILE);

	//Enemy
	*/
m_pBmpList[2]=(HBITMAP)LoadImage(NULL,"pic\\Enemy.BMP",IMAGE_BITMAP,336,268,LR_LOADFROMFILE);
	//bore-Enemy
m_pBmpList[3]=(HBITMAP)LoadImage(NULL,"pic\\bore.bmp",IMAGE_BITMAP,560,71,LR_LOADFROMFILE);
	//player 1
m_pBmpList[4]=(HBITMAP)LoadImage(NULL,"pic\\Player1.BMP",IMAGE_BITMAP,288,256,LR_LOADFROMFILE);
	//bore-Player
m_pBmpList[5]=(HBITMAP)LoadImage(NULL,"pic\\Player1Bore.bmp",IMAGE_BITMAP,480,64,LR_LOADFROMFILE);
	//h_Popo
m_pBmpList[6]=(HBITMAP)LoadImage(NULL,"pic\\Popo.bmp",IMAGE_BITMAP,132,41,LR_LOADFROMFILE);	
	//h_heart
m_pBmpList[7]=(HBITMAP)LoadImage(NULL,"pic\\heart.bmp",IMAGE_BITMAP,19,19,LR_LOADFROMFILE);	
 
	//h_explode
m_pBmpList[8]=(HBITMAP)LoadImage(NULL,"pic\\Explosion.bmp",IMAGE_BITMAP,560,200,LR_LOADFROMFILE);	

	//h_bouns-list
m_pBmpList[9]=(HBITMAP)LoadImage(NULL,"pic\\Gift3.bmp",IMAGE_BITMAP,126,45,LR_LOADFROMFILE);	
m_pBmpList[10]=(HBITMAP)LoadImage(NULL,"pic\\Gift5.bmp",IMAGE_BITMAP,126,45,LR_LOADFROMFILE);	
m_pBmpList[11]=(HBITMAP)LoadImage(NULL,"pic\\Gift6.bmp",IMAGE_BITMAP,126,45,LR_LOADFROMFILE);	
m_pBmpList[12]=(HBITMAP)LoadImage(NULL,"pic\\Gift1.bmp",IMAGE_BITMAP,126,45,LR_LOADFROMFILE);	
m_pBmpList[13]=(HBITMAP)LoadImage(NULL,"pic\\GiftTurtle.bmp",IMAGE_BITMAP,108,41,LR_LOADFROMFILE);	
//m_pBmpList[14]=(HBITMAP)LoadImage(NULL,"GiftTurtle.bmp",IMAGE_BITMAP,126,45,LR_LOADFROMFILE);	




//m_pBmpList[3]=(HBITMAP)LoadImage(NULL,"explode.bmp",IMAGE_BITMAP,92,370,LR_LOADFROMFILE);

//m_pBmpList[5]=h_heart=(HBITMAP)LoadImage(NULL,"heart.bmp",IMAGE_BITMAP,19,19,LR_LOADFROMFILE);
//m_pBmpList[6]=h_Frame=(HBITMAP)LoadImage(NULL,"位图_296.bmp",IMAGE_BITMAP,640,480,LR_LOADFROMFILE);

 // GetObject (h_pic, sizeof (BITMAP), &bitmap) ;
 
//		   cxSource=bitmap.bmWidth;


//		   cySource=bitmap.bmHeight;
//		   */
////////////////////////////////////////////////////
//加载
	//player1.bmp bullet.bmp bore.bmp shield.bmp
m_player[0].BitBlt( &m_pBmpList[4], &m_pBmpList[1], &m_pBmpList[5]);
 for( int j = 0; j < 2; j ++ )
	m_player[0].m_explode[j].BitBlt(&m_pBmpList[6],&m_pBmpList[8]);

///敌人
for( int i = 0; i < NUM_ENEMYS; i ++ )
	m_enemy[i].BitBlt(&m_pBmpList[2], &m_pBmpList[1],&m_pBmpList[3]);
return true;
}
////////////////////////////////////////////////////////
//游戏初始化
////////////////////////////////////////////////////////
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( 48, 64, TRUE );
	m_player[1].Create( 28, 28, FALSE );
//for(int i=0;i<2;i++)
	for(int j=0;j<2;j++)
	m_player[0].m_explode[j].m_active=false;
//Create敌人 但是暂时无效
	for( int i = 0; i < NUM_ENEMYS; i ++ )
		m_enemy[i].Create( 56, 67, FALSE );

//Create爆炸 但是暂时无效
//	for( i = 0; i < NUM_EXPLODES;  i ++ )
//		m_explode[i].Create( 28, 28, FALSE );
	/*
//Create奖励 但是暂时无效
	m_bonus.Create( 30, 28, FALSE );
	*/
//在选择界面
	m_gameState = GS_ACTIVE;

	return TRUE;
}




////////////////////////////////////////////////////////
//初始化(总控制)
////////////////////////////////////////////////////////
BOOL CGame::Initialize( HINSTANCE hInst )
{
	m_hInst = hInst;

	if( !DDInit() || !InitGame() )
	{
		DDTerm();
		return FALSE;
	}
	//后做修改本身没有
	ResetGame();
	return TRUE;
}
////////////////////////////////////////////////////////
//InitLevel()等级初始化
//
///////////////////////////////////////////////////////
BOOL CGame::InitLevel()
{
	for( int i = 0; i < NUM_ENEMYS; i ++ )
	{
		m_enemy[i].m_active = FALSE;
		m_enemy[i].m_bullet[0].m_active = FALSE;
	}
	m_bonus.m_active = FALSE;
	m_nEnemysLeft = m_nEnemys = 20;
	for(i=0;i<2;i++)
		for(int j=0;j<2;j++)
		{	m_player[i].m_explode[j].m_explode=false;
			m_player[i].m_explode[j].m_active = FALSE;
		}
	m_bEnemyLocked=false;
	return TRUE;
}
//////////////////////////////////////////////////
///RestGame 游戏截面开始的初始化-m_nMaxEnemys,m_gameState,m_bActive
//也调用了 InitLevel();
////////////////////////////////////////////////
BOOL CGame::ResetGame()
{
		m_nMaxEnemys = 4;
		m_gameState = GS_ACTIVE;
		m_bActive=true;
		ResetPlayer(m_player[0]);
		return InitLevel();
}
//


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


//
////////////////////////////////////////////////////////
//Relase memery.It is a VIP .
//
////////////////////////////////////////////////////////
void CGame::DDTerm()
{
/*	for( int i = 0; i < NUM_BITMAPS; i ++ )
		SAFE_RELEASE( m_pBmpList[i] );	
	if( !m_bFullScreen )
		SAFE_RELEASE( m_pddsBackBuffer );
	SAFE_RELEASE( m_pddsFrontBuffer );
	SAFE_RELEASE( m_pDD );*/
}
//
//
////////////////////////////////////////////////////////
//Enter of this Programe
////////////////////////////////////////////////////////
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 	// TODO: Place code here.
 
	HACCEL hAccelTable;

	// Initialize global strings
	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
	LoadString(hInstance, IDC_G2, szWindowClass, MAX_LOADSTRING);
	MyRegisterClass(hInstance);

	// Perform application initialization:
 
	if (!InitInstance (hInstance, nCmdShow)) 
	{
		return FALSE;
	}


	hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_G2);

//////////////////////////////////////////////////
///游戏的开始
CGame	game;
	
	game.Initialize( hInst );
	return game.Run();
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage is only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX); 

	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= (WNDPROC)WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= LoadIcon(hInstance, (LPCTSTR)IDI_G2);
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= (LPCSTR)IDC_G2;
	wcex.lpszClassName	= szWindowClass;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

	return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HANDLE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
 // HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   HWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!HWnd)
   {
      return FALSE;
   }

   ShowWindow(HWnd, nCmdShow);
   UpdateWindow(HWnd);
MoveWindow(HWnd,50,15,800,600,true);
   return true;
}

//

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
				return TRUE;

		case WM_COMMAND:
			if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
			{
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			break;
	}
    return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -