Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсач2.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
5.53 Mб
Скачать

Класс 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;