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

📄 cenimy.cpp

📁 用SDL写的一个小游戏
💻 CPP
字号:
#include"CEnimy.h"

void CEnimy::InitEnimy()
{
		int i;
		for(i=0;i<m_NumOfEnimy;i++)
		{
			int x = rand()%m_width;
			int y = rand()%m_height;

			if(abs(x-320)<100)
				x = 200 + rand()%20;
			if(abs(y-240)<80)
				y = 150 + rand()%20;

			SPosition tmpPos = SPosition(x,y);
			m_ListOfEnimy.push_back(tmpPos);
			int t = rand()%AIDIV;
			if(t<AIUP) m_AI.push_back(4);
			else if(t<WANDERUP)
			{
				int x = m_ListOfEnimy[i].x*2/m_width;
				int y = m_ListOfEnimy[i].y*2/m_height;
				
				m_AI.push_back(x+y*2);
			}
			else m_AI.push_back(5);
		}
}

void CEnimy::Wander(int circlex,int circley,int r,int idx)
{
	float tmptime = timeGetTime();
	int Tagx = circlex + r * cos(tmptime);
	int Tagy = circley + r * sin(tmptime);
	//fprintf(stdout,"%d %d|| %d %d \n",Tagx,Tagy,circlex,circley);
	MoveTo(Tagx,Tagy,idx);
}

void CEnimy::MoveTo(int Tagx,int Tagy,int idx)
{
	float x = Tagx - m_ListOfEnimy[idx].x;
	float y = Tagy - m_ListOfEnimy[idx].y;
	float lenth = sqrt(x*x+y*y);
				
	if(lenth<=AIENIMYMAXSPEED)
	{
		m_ListOfEnimy[idx].x = Tagx;
		m_ListOfEnimy[idx].y = Tagy;
	}				
	else
	{
		m_ListOfEnimy[idx].x += (x/lenth*AIENIMYMAXSPEED);
		m_ListOfEnimy[idx].y += (y/lenth*AIENIMYMAXSPEED);
	}				
}
void CEnimy::UpdateEnimy(int Tagx,int Tagy)
{
	    int i;
		for(i=0;i<m_NumOfEnimy;i++)
		{
			if(m_AI[i] >= 4)
				MoveTo(Tagx,Tagy,i);
				/*
			else
			{
				int x = m_AI[i]%2;
				int y = m_AI[i]/2;
				Wander(SCREEN_WIDTH/4 + SCREEN_WIDTH/2*x,
					SCREEN_HEIGHT/4 + SCREEN_HEIGHT/2*y,
					SCREEN_HEIGHT/8,
					i);
			}
			*/
			
			if(m_AI[i]!=4) 
			{
				m_ListOfEnimy[i].x += 
					(rand()%UAIENIMYMAXSPEED-UAIENIMYMAXSPEED/2);
				m_ListOfEnimy[i].y += 
					(rand()%UAIENIMYMAXSPEED-UAIENIMYMAXSPEED/2);
			}
			m_ListOfEnimy[i].x += m_width;
			m_ListOfEnimy[i].y += m_height;
			m_ListOfEnimy[i].x %= m_width;
			m_ListOfEnimy[i].y %= m_height;
		}
}

void CEnimy::DrawEnimy(SDL_Surface * g_pDisplay)
{
	int i;
	for(i=0;i<m_NumOfEnimy;i++)
	{
		SDL_Rect Rect;
		Rect.x = m_ListOfEnimy[i].x;
		Rect.y = m_ListOfEnimy[i].y;

		Rect.w = ENIMYWIDTH;
		Rect.h = ENIMYWIDTH;
		SDL_FillRect(g_pDisplay,&Rect,m_EnimyColor*m_AI[i]+40000);
		
	}
}

void CEnimy::CleanEnimy(SDL_Surface * g_pDisplay)
{
	int i;
	for(i=0;i<m_NumOfEnimy;i++)
	{
		SDL_Rect Rect;
		Rect.x = m_ListOfEnimy[i].x;
		Rect.y = m_ListOfEnimy[i].y;
		Rect.w = ENIMYWIDTH;
		Rect.h = ENIMYWIDTH;
		SDL_FillRect(g_pDisplay,&Rect,0);
	}
}
bool CEnimy::IsHit(int Tagx,int Tagy)
{
	int i;
	for(i=0;i<m_NumOfEnimy;i++)
	{
		int deltax = Tagx - m_ListOfEnimy[i].x;
		int deltay = Tagy - m_ListOfEnimy[i].y;

		/*
		fprintf(stdout,"%d %d; %d %d\n",
			deltax,deltay,m_ListOfEnimy[i].x,m_ListOfEnimy[i].y);
			*/
		
		int hitsize = (ENIMYWIDTH + RUNNERWIDTH)/2;
		if( (abs(deltax)< hitsize ) &&
			(abs(deltay)< hitsize) )
			return true;
		
	}
	return false;
}

⌨️ 快捷键说明

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