
Класс Game
Этот класс осуществляет взаимодействие цепочки шариков и игрока, т.е. класса BallPath и Player.
Два поля:
Player player (отвечает за игрока);
BallPath b (отвечает за цепочку шариков);
В этом классе так же идет работа с графическим движком HGE, поэтому в функциях в основном идет работа с текстурами, спрайтами и т.д.
Основные функции:
bool InitSimulation(HGE *hge) -- инициализирует спрайты и звуки в соответсвии с уровнем игрока, так же цепочку шариков и свойства каждого шарика в отдельности;
void DoneSimulation(HGE *hge) -- освобждает ресурсы после завершения основного цикла;
int UpdateSimulation(HGE *hge) --обновляет координаты шариков цепочки, время и оттенки цвета;
int Game::UpdateSimulation(HGE *hge)
{
int seq[9]= {0, 0, 1, 2, 2, 2, 1, 0, 0};
DWORD levelTopColors[] = {0xFF15092A, 0xFF6C6480, 0xFF89B9D0};
DWORD levelBtmColors[] = {0xFF303E57, 0xFFAC7963, 0xFFCAD7DB};
float h;
const float cellw=SCREEN_WIDTH/15;
hgeColor col1, col2;
if(b.speed==0.0f) time=b.GetTime();
else
{
time+=hge->Timer_GetDelta()*b.speed;
if(time>=24.0f) time-=24.0f;
}
b.seq_id=(int)(time/3);
b.seq_residue=time/3-b.seq_id;
h=(time/400);
col1.SetHWColor(levelTopColors[seq[3]]);
col2.SetHWColor(levelTopColors[seq[4]]);
b.collevelTop=col2*3 + col1*(1.0f-3);
col1.SetHWColor(levelBtmColors[seq[3]]);
col2.SetHWColor(levelBtmColors[seq[4]]);
b.collevelBtm=col2*3 + col1*(1.0f-3);
b.colball.SetHWColor(0xFFEAE1BE);
b.colball=b.colball*(1);
int k;
if (b.pl.level==1)
{
k=b.CalculatePositionLev1(h);
}
else if(b.pl.level==2)
k=b.CalculatePositionLev2(h);
else if(b.pl.level==3)
k=b.CalculatePositionLev3(h);
return k;
}
void RenderSimulation() -- рисует заданные спрайты на полученных координатах;
void SaveToFile(char *name) --сохраняет текущего игрока и ее время в файл уровня;
void WinersFromFile() -- считывает лучших игроков уровней из файла;
void CheckWin(HGE *hge) -- проверяет не пуста ли цепочка, если да то переходит на слеующий уровень;
void Game::CheckWin(HGE *hge)
{
int i;
for(i=0;i<20;i++)
{
if(b.ListBall[i].explosition==false)
break;
}
if(i==20)
{
b.pl.level++;
InitSimulation(hge);
}
}
Класс hgeGuiMenuItem
Этот класс является классом-наследником виртуального класса hgeGUIObject библиотеки HGE, поэтому методы у него такие же как и в стандартном классе:
virtual void Render() -- рисует наше меню;
virtual void Update(float dt) -- обновляет анимацию на фоне меню;
virtual void Enter() -- отвечает за то, когда меню должно появится на экране;
virtual void Leave() -- отвечает за то, когда меню должно исчезнуть с экрана;
virtual bool IsDone() -- проверяет закончена ли анимация;
virtual void Focus(bool bFocused) -- обеспечивает работу с элементами меню(кнопками);
virtual void MouseOver(bool bOver) -- уведамляет когда курсор мыши вышел за пределы окна;
void hgeGUIMenuItem::MouseOver(bool bOver)
{
if(bOver) gui->SetFocus(id);
}
virtual bool MouseLButton(bool bDown) -- уведомляет о состоянии левой кнопки мыши;
bool hgeGUIMenuItem::MouseLButton(bool bDown)
{
if(!bDown)
{
offset=4;
return true;
}
else
{
hge->Effect_Play(snd);
offset=0;
return false;
}
}
virtual bool KeyClick(int key, int chr) -- управлять меню можно также с помощью кнопак ENTER и SPACE;