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

📄 game.cpp

📁 泡泡堂单机版,可能被转载够很多次,不过这个是比较完整的,一个很好的学习材料.
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					{
						m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40+1].counter = 40;
						m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40+1].way = m_Player[0].way;
					}
				}
				m_Player[0].presswaykey = 0;
			}
		}
		else	if (done == CAN_KICK && m_Player[0].kick)
		{
			m_Player[0].presswaykey++;
			if (m_Player[0].presswaykey>20)
			{
				//	设置踢泡泡标志
				if (m_Player[0].x %40 < 10)
				{
					if (((m_Player[0].y-40)/40 != 0) && ((m_ScreenItem[(m_Player[0].y-80)/40][m_Player[0].x/40].type == 0) || (m_ScreenItem[(m_Player[0].y-80)/40][m_Player[0].x/40].type == 8) || (m_ScreenItem[(m_Player[0].y-80)/40][m_Player[0].x/40].type == 9)))
					{
						m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40].type = 0;
						MOVEBOMB	move;
						move.mode = 0;
						move.way = m_Player[0].way;
						move.x = m_Player[0].x/40*40;
						move.y = (m_Player[0].y-40)/40*40;
						move.counter = m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40].counter;
						move.power = m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40].status;
						move.who = m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40].who;
						m_bombKick.push_back(move);
					}
				}
				else
				{
					if (((m_Player[0].y-40)/40 != 0) && ((m_ScreenItem[(m_Player[0].y-80)/40][m_Player[0].x/40+1].type == 0) || (m_ScreenItem[(m_Player[0].y-80)/40][m_Player[0].x/40+1].type == 8) || (m_ScreenItem[(m_Player[0].y-80)/40][m_Player[0].x/40+1].type == 9)))
					{
						m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40+1].type = 0;
						MOVEBOMB	move;
						move.mode = 0;
						move.way = m_Player[0].way;
						move.x = (m_Player[0].x/40+1)*40;
						move.y = (m_Player[0].y-40)/40*40;
						move.counter = m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40+1].counter;
						move.power = m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40+1].status;
						move.who = m_ScreenItem[(m_Player[0].y-40)/40][m_Player[0].x/40+1].who;
						m_bombKick.push_back(move);
					}
				}
				m_Player[0].presswaykey = 0;
			}
		}
		return;
	}
	if (m_pInput->IsKeyDown(DIK_DOWN) && (m_Player[0].status == STATUS_FREE) && (m_Player[0].y != 12*40))
	{
		done = CAN_MOVE;
		m_Player[0].way = WAY_DOWN;
		if (m_Player[0].y % 40 == 0)	//	判断阻挡
		{
			done = CAN_BLOCK;
			//	正前方为空
			if ((m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==0 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==8 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==9 ))
			{
						//	右上方为空	...OK!
				if ((m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==0 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==8 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==9 ))
				{
					
					done = CAN_MOVE;			//	直接往前走
				}
				else	//	右上方有东西
				{
					if (m_Player[0].x%40 == 0)
					{
						done = CAN_MOVE;		//	直接往前走
					}
					else if (m_Player[0].x%40 <= 30)
					{
						m_Player[0].way = WAY_LEFT;
						done = CAN_MOVE;		//	向左边偏移
					}
					else if (m_Player[0].x%40 > 30)
					{
						if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type)
						{
							//	右上方是箱子,推
							done = CAN_PUSH;
						}
						else	if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==7)
						{
							//	右上方是泡泡,踢
							done = CAN_KICK;
						}
					}
				}
			}
			else		//	正前方有东西
			{
				//	右上方为空	...OK!
				if ((m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==0 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==8 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==9 ))
				{

					if (m_Player[0].x%40 == 0)
					{
						if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==2 )
						{
							//	正上方是箱子,推
							done = CAN_PUSH;
						}
						else	if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==7 )
						{
							//	正上方是泡泡,踢
							done = CAN_KICK;
						}
					}
					else if (m_Player[0].x%40 >= 10)
					{
						m_Player[0].way = WAY_RIGHT;
						done = CAN_MOVE;		//	向右边偏移
					}
					else if (m_Player[0].x%40 < 10)
					{
						if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==2 )
						{
							//	正上方是箱子,推
							done = CAN_PUSH;
						}
						else	if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==7 )
						{
							//	正上方是泡泡,踢
							done = CAN_KICK;
						}
					}
				}
				else	//	右上方有东西
				{
					//	此处较麻烦分4种情况:	1.左边可以移动,右边可以移动	如果x%40<20则左移,否则右移
					//							2.左边可以移动,右边不可移动	如果x%40<=30则左移
					//							3.左边不可移动,右边可以移动	如果x%40>=10则右移
					//							4.左边不可移动,右边不可移动	不能移动
					if (((m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==2 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==7 ))
						&& ((m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==2 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==7 )))
					{
						if (m_Player[0].x%40 == 0)
						{
							if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==2 )
							{
								//	右上方是箱子,推
								done = CAN_PUSH;
							}
							else	if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==7 )
							{
								//	右上方是泡泡,踢
								done = CAN_KICK;
							}
						}
						else	if (m_Player[0].x%40 < 20)
						{
							m_Player[0].way = WAY_LEFT;
							done = CAN_MOVE;	//	向左边偏移
						}
						else
						{
							m_Player[0].way = WAY_RIGHT;
							done = CAN_MOVE;	//	向右边偏移
						}
					}

					if (((m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==2 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==7 ))
						&& !((m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==2 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==7 )))
					{
						if (m_Player[0].x%40 == 0)
						{
							if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==2 )
							{
								//	右上方是箱子,推
								done = CAN_PUSH;
							}
							else	if (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==7 )
							{
								//	右上方是泡泡,踢
								done = CAN_KICK;
							}
						}
						else	if (m_Player[0].x%40 <= 30)
						{
							m_Player[0].way = WAY_LEFT;
							done = CAN_MOVE;		//	向左边偏移
						}
					}

					if ( !((m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==2 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type ==7 ))
						&& ((m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==2 ) || (m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type ==7 )))
					{
						if (m_Player[0].x%40 >= 10)
						{
							m_Player[0].way = WAY_RIGHT;
							done = CAN_MOVE;		//	向右边偏移
						}
					}
				}
			}
		}
		test = done;
		if (done == CAN_MOVE)
		{
			m_Player[0].status = STATUS_MOVE;						//	设置移动标志
			m_Player[0].counter = m_Player[0].step / m_Player[0].speed;	//	counter此处表示需要多少桢
			if (m_Player[0].step % m_Player[0].speed != 0)
			{
				m_Player[0].counter++;
			}
		}
		else	if (done == CAN_PUSH)
		{
			m_Player[0].presswaykey++;
			if (m_Player[0].presswaykey>40)
			{
				//	设置推箱子标志
				if (m_Player[0].x %40 < 10)
				{
					if (((m_Player[0].y-40)/40 != 11*40 ) && ((m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40].type == 0) || (m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40].type == 8) || (m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40].type == 9)))
					{
						m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].counter = 40;
						m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].way = m_Player[0].way;
					}
				}
				else
				{
					if (((m_Player[0].y-40)/40 != 11*40 ) && ((m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40+1].type == 0) || (m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40+1].type == 8) || (m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40+1].type == 9)))
					{
						m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].counter = 40;
						m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].way = m_Player[0].way;
					}
				}
				m_Player[0].presswaykey = 0;
			}
		}
		else	if (done == CAN_KICK && m_Player[0].kick)
		{
			m_Player[0].presswaykey++;
			if (m_Player[0].presswaykey>20)
			{
				//	设置踢泡泡标志
				if (m_Player[0].x %40 < 10)
				{
					if (((m_Player[0].y-40)/40 != 11*40 ) && ((m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40].type == 0) || (m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40].type == 8) || (m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40].type == 9)))
					{
						m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].type = 0;
						MOVEBOMB	move;
						move.mode = 0;
						move.way = m_Player[0].way;
						move.x = m_Player[0].x/40*40;
						move.y = (m_Player[0].y+40)/40*40;
						move.counter = m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].counter;
						move.power = m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].status;
						move.who = m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40].who;
						m_bombKick.push_back(move);
					}
				}
				else
				{
					if (((m_Player[0].y-40)/40 != 11*40 ) && ((m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40+1].type == 0) || (m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40+1].type == 8) || (m_ScreenItem[(m_Player[0].y+80)/40][m_Player[0].x/40+1].type == 9)))
					{
						m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].type = 0;
						MOVEBOMB	move;
						move.mode = 0;
						move.way = m_Player[0].way;
						move.x = (m_Player[0].x/40+1)*40;
						move.y = (m_Player[0].y+40)/40*40;
						move.counter = m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].counter;
						move.power = m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].status;
						move.who = m_ScreenItem[(m_Player[0].y+40)/40][m_Player[0].x/40+1].who;
						m_bombKick.push_back(move);
					}
				}
				m_Player[0].presswaykey = 0;
			}
		}
		return;
	}
	if (m_pInput->IsKeyDown(DIK_LEFT) && (m_Player[0].status == STATUS_FREE) && (m_Player[0].x != 0))
	{
		done = CAN_MOVE;
		m_Player[0].way = WAY_LEFT;
		if (m_Player[0].x % 40 == 0)	//	判断阻挡
		{
			done = CAN_BLOCK;
			//	正前方为空
			if ((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==0 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==8 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==9 ))
			{
				//	右上方为空	...OK!
				if ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==0 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==8 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==9 ))
				{

					done = CAN_MOVE;			//	直接往前走
				}
				else	//	右上方有东西
				{
					if (m_Player[0].y%40 == 0)
					{
						done = CAN_MOVE;		//	直接往前走
					}
					else if (m_Player[0].y%40 <= 30)
					{
						m_Player[0].way = WAY_UP;
						done = CAN_MOVE;		//	向左边偏移
					}
					else if (m_Player[0].y%40 > 30)
					{
						if (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==2 )
						{
							//	右上方是箱子,推
							done = CAN_PUSH;
						}
						else	if (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==7 )
						{
							//	右上方是泡泡,踢
							done = CAN_KICK;
						}
					}
				}
			}
			else		//	正前方有东西
			{
				//	右上方为空	...OK!
				if ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==0 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==8 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==9 ))
				{

					if (m_Player[0].y%40 == 0)
					{
						if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==2 )
						{
							//	右上方是箱子,推
							done = CAN_PUSH;
						}
						else	if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==7 )
						{
							//	右上方是泡泡,踢
							done = CAN_KICK;
						}
					}
					else if (m_Player[0].y%40 >= 10)
					{
						m_Player[0].way = WAY_DOWN;
						done = CAN_MOVE;		//	向右边偏移
					}
					else if (m_Player[0].y%40 < 10)
					{
						if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==2 )
						{
							//	右上方是箱子,推
							done = CAN_PUSH;
						}
						else	if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==7 )
						{
							//	右上方是泡泡,踢
							done = CAN_KICK;
						}
					}
				}
				else	//	右上方有东西
				{
					//	此处较麻烦分4种情况:	1.左边可以移动,右边可以移动	如果x%40<20则左移,否则右移
					//							2.左边可以移动,右边不可移动	如果x%40<=30则左移
					//							3.左边不可移动,右边可以移动	如果x%40>=10则右移
					//							4.左边不可移动,右边不可移动	不能移动
					if (((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==7 ))
						&& ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==7 )))
					{
						if (m_Player[0].y%40 == 0)
						{
						if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==2 )
						{
							//	右上方是箱子,推
							done = CAN_PUSH;
						}
						else	if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==7 )
						{
							//	右上方是泡泡,踢
							done = CAN_KICK;
						}
						}
						else	if (m_Player[0].y%40 < 20)
						{
							m_Player[0].way = WAY_UP;
							done = CAN_MOVE;		//	向左边偏移
						}
						else
						{
							m_Player[0].way = WAY_DOWN;
							done = CAN_MOVE;		//	向右边偏移
						}
					}

					if (((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==7 ))
						&& !((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==7 )))
					{
						if (m_Player[0].y%40 == 0)
						{
						if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==2 )
						{
							//	右上方是箱子,推
							done = CAN_PUSH;
						}
						else	if (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==7 )
						{
							//	右上方是泡泡,踢
							done = CAN_KICK;
						}
						}
						else	if (m_Player[0].y%40 <= 30)
						{
							m_Player[0].way = WAY_UP;
							done = CAN_MOVE;		//	向左边偏移
						}
					}

					if ( !((m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40][m_Player[0].x/40-1].type ==7 ))
						&& ((m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==2 ) || (m_ScreenItem[m_Player[0].y/40+1][m_Player[0].x/40-1].type ==7 )))
					{
						if (m_Player[0].y%40 >= 10)
						{
							m_Player[0].way = WAY_DOWN;
							done = CAN_MOVE;		//	向右边偏移
						}

⌨️ 快捷键说明

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