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

Практика

В процессе создания игры были разработаны четыре класса: Player, Game, BallPath, hgeGUIMenuItem и Forminput. У каждого из классов своё особое назначение. Их задачу можно легко определить из их названия. А теперь подробнее о каждом из них.

Класс Player

Этот класс отвечает за действия игрока, в игре игроком является лягушка, которой и управляет человек. Класс устроен довольно простою

Три public поля:

  • int level (назначает уровень игрока);

  • int life (сколько у игрока осталось жизней ) ;

  • float fx,fy (координаты лягушки на экране, зависит от уровня игрока).

Так же в классе имеется ряд полезных функций:

  • bool ChekBall(Ball ListBall[20],int i) -- вызывается, когда мы достаем шарик из цепочки, для проверки нет ли на этом месте три шарика одинакового цвета;

  • void DrawFrogBall(Ball ListBall[20],int i) -- вычисляет координаты всех шариков, после изъятия одного из цепочки;

  • void DrawBallAfter(Ball ListBall[20],int i,int frog) -- вычисляет координаты всех шариков, после вставки в цепочку шарика;

  • int GetBall(HGE *hge,Ball ListBall[20]) -- вычисляет по какому шарику кликнул игрок и вызывает функцию DrawFrogBall;

int Player::GetBall(HGE *hge,Ball ListBall[20])

{

if(hge->Input_GetKeyState(HGEK_LBUTTON)==true)

{

float mx,my;

//bool check;

hge->Input_GetMousePos(&mx,&my);

for(int i=0;i<20;i++)

{

if((ListBall[i].x<=mx&&mx<=ListBall[i].x+30)&&(ListBall[i].y<=my&&my<=ListBall[i].y+30))

{

if(ListBall[i].explosition==false)

DrawFrogBall(ListBall,i);

if(ChekBall(ListBall,i)==true)

return 2;

return 1;

}

else

continue;

}

return 0;

}

return 0;

}

bool PushBall(HGE *hge,Ball ListBall[20],int frog) – вычисляет после какого шарика игрок хочет вставить свой шарик и вызывает функци. DrawBallAfter;

bool Player::PushBall(HGE *hge,Ball ListBall[20],int frog)

{

if(hge->Input_GetKeyState(HGEK_LBUTTON)==true)

{

float mx,my;

hge->Input_GetMousePos(&mx,&my);

for(int i=0;i<20;i++)

{

if((ListBall[i].x<=mx&&mx<=ListBall[i].x+30)&&(ListBall[i].y<=my&&my<=ListBall[i].y+30))

{

DrawBallAfter(ListBall,i,frog);

BlowUp(i,ListBall,frog);

float t=hge->Timer_GetDelta();

while(t<30000)

t=t+hge->Timer_GetDelta();

return true;

}

else

continue;

}

return false;

}

return false;

}

  • bool BlowUp(int i,Ball ListBall[20],int frog) -- взрывает шарики одного цвета вызывается функцией PushBall.

Класс BallPath

Класс отвечает за цепочку шариков, за ее движение. Именно здесь просчитывается шаг, с которым двигается цепочка.

Имеется четыре основных поля:

  • float ballX, ballY (начальные координаты шариков в цепочки, зависят от уровня игрока);

  • Player pl (отвечает за данного игрока);

  • HGEG g (структура в которой хранятся спрайты, звуки и т.д);

  • Ball ListBall[20] (сама цепочка шариков);

Здесь же можно рассказать про структуру Ball.Она отвечает за каждый шарик в отдельности, за его свойства.

Поля структуры:

  • int col (цвет);

  • Bonus bonus (бонус);

  • float x;

  • float y;

  • float prevx;

  • float prevy;

  • bool frogs(является ли данный шарик лягушкиным);

  • bool hidden (появился ли этот шарик уже на экране);

  • bool explosition (взорван ли этот шарик);

Но вернемся к нашему к классу. В нем имеется несколько очень важных функций:

  • void CheckColor(HGE *hge) -- проверяет нет ли у нас шариков таких цветов, что в цепочке уже не наберется три или более одинаковых шарика;

void BallPath::CheckColor(HGE *hge)

{

int color=0;

int col=0;

int i=0;

for(color;color<6;color++)

{

while(i!=20&&(ListBall[i].col!=color||ListBall[i].explosition==true))

{

i++;

}

if(i==20)

{

i=0;

continue;

}

for(i;i<20;i++)

{

if(ListBall[i].col==color)

col++;

}

if(col>=3)

{

col=0;

i=0;

continue;

}

else if(col==0)

{

col=0;

i=0;

continue;

}

else

{

for(i=0;i<20;i++)

{

if(ListBall[i].explosition==true)

{

ListBall[i].explosition=false;

ListBall[i].col=color;

col++;

BallLoad(hge,i,color);

if(col>=3)

{

col=0;

break;

}

}

}

i=0;

}

}

}

  • int CheckExpl(HGE *hge) –проверяет цепочку на уничтожение всех шаров;

  • void BallLoad(HGE *hge,int i,int a) -- вызывается, когда нужны добавочные шарики;

  • void TextureBallLoadRandom(HGE *hge) -- устанавливает рандомно цвет шариков и загружает их текстуры.Вызывается при инициализации уровня;

void BallPath::TextureBallLoadRandom(HGE *hge)

{

for(int i=0;i<20;i++)

{

int a = rand() % 6;

ListBall[i].col=a;

if(a==0)

g.texBalls[i]=hge->Texture_Load("image\\baAccuracyBlue.png");

else if(a==1)

g.texBalls[i]=hge->Texture_Load("image\\baAccuracyGreen.png");

else if(a==2)

g.texBalls[i]=hge->Texture_Load("image\\baAccuracyPurple.png");

else if(a==3)

g.texBalls[i]=hge->Texture_Load("image\\baAccuracyRed.png");

else if(a==4)

g.texBalls[i]=hge->Texture_Load("image\\baAccuracyWhite.png");

else if(a==5)

g.texBalls[i]=hge->Texture_Load("image\\baAccuracyYellow.png");

}

}

Следующие три функции непостредственно вычисляют новые координаты шариков в цепочке в зависимости от уровня:

  • int CalculatePositionLev1(float h);

  • int CalculatePositionLev2(float h);

  • int CalculatePositionLev3(float h);