?? cenimy.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 + -