Компьютерная игра 'Zuma'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    5,29 Мб
  • Опубликовано:
    2014-10-06
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Компьютерная игра 'Zuma'











Отчет по курсовому проекту

на тему

Компьютерная игра "Zuma”

Содержание

Задание

Введение

1. Теория

2. Практика

3. Руководство пользователя

Заключение

Список использованных источников

Приложения

Задание


Задание курсовой работы заключалось в том, чтобы написать игру "Zuma Deluxe" на языке С\С++. Создать как можно более похожую на исходную программу. "Zuma Deluxe" представляет собой двухмерный тир. Расстреливать надо очень длинную змейку, неспешно движущуюся из точки А в точку В. Играющему нужно её остановить. Если она все же вдруг достигает конечной точки, то игроку засчитывают проигрыш. Змейка состоит из множества цветных шаров, а игрок управляет зелёной лягушкой, которая плюётся в этот подвижный состав точно такими же цветными шарами. При попадании шарик заскакивает внутрь змейки, раздвигая соседние шары, и становиться её частью. Добавлять шарики нужно таким образом, чтобы в змейке получались последовательности из трёх и более шаров одного цвета. В результате эти шары исчезнут, а длина змейки за счёт этого уменьшится. Составлять последовательности нужно до тех пор, пока от змейки вообще ничего не останется.

Введение


Компьютерная головоломка Zuma увидела свет в конце 2003 года благодаря известному в мире казуальных игр разработчику PopCapGame. И уже в 2004 году игра завоевала первую награду - "Игра года" от RealArcade. Zuma стала бестселлером и до сих пор привлекает интерес большинства поклонников игр жанра casual. Существует всего 3 версии игры: Zuma, Zuma Deluxe (расширенная версия) и Zuma's Revenge!

Казалось бы, чего нового можно придумать в двухмерных играх, всё и так уже есть. Но и в наше время придумывают совершенно новые концепции игрового процесса. Яркий пример - игра "Zuma Deluxe". Процесс разбавляется временно появляющимися бонусами, такими как, например лазерная наводка, взрыв, радужные цвета, остановка или даже обратный ход шариков. Кроме того, особо учитываются попадания сквозь поток шариков, серия результативных попаданий без ошибок, время выполнения уровней.

В "Zuma" использован стиль древних инков и ацтеков, им пронизано всё вокруг. Выбор уровней происходит под сводами ацтекских храмов, на уровнях змейки бегут по каменным желобкам с узнаваемыми орнаментами, главная героиня - лягушка общается с каменным божеством, даже на цветных шариках изображены рожицы индейских идолов. Единый оригинальный стиль делает игру запоминающейся и узнаваемой. Подходит практически любому возрасту и социальному статусу. Игра Тренирует сообразительность, реакцию, логику и глазомер.

1. Теория


Моя игра написана с использованием графического движка HGE version 1.53. В этом разделе я опишу кратко его возможности.

Это полнофункциональное посреднеческая библиотека для всех, кто хочет разрабатывать быстро и легко качественные коммерческие 2D игры.

HGE работает на Microsoft Windows 98, 2000, NT, ME, XP and требует DirectX 8.0. Она даже запустится на low-end видеокартах, включая встроенные, такие как Intel Solano (i815 chipset). HGE можно использловать практически с любым C++ компилятором включая Visual C++, Borland C++, MinGW и Metrowerks Codewarrior.

Вспомогательные классы библиотеки:

Спрайты и анимация

Прозрачный интерфейс ко всем функциям железа; поддержка точки привязки (якорь); поддержка вытягивания, вращения и масштабирования; горизонтальное и вертикальное отражение; функции работы с временем; различные режимы проигрывания.

Шрифты

Загрузка и отображение растровых шрифтов; различные способы выравнивания текста; тень, масштабирование и вращение текста; вычисление длины строки; формат printf для функций вывода.

Система частиц и сетка искажения

Продвинутая 2д система частиц, позволяющая создавать такие эффекты, как дым, взрывы, магия и т. д; менеджер системы частиц; функции работы со временем и перемещением; ограничивающий прямоугольник и определение столкновений; вода, линзы, скрутка страницы, изгиб и даже морфинг в реальном времени.

Менеджер ресурсов

Powerful resource script; on the fly script switching; create complex objects with just a single function call; fully automated memory management; precaching and purging of specific resource groups.

Графический интерфес пользователя

Простое и гибкое управление контролами; стандартные контролы: текст, кнопки и ползунки; поддержка сильно активных, анимированных ГУИ.

Векторы и цвета

Полный набор операций и функций для поддержки 2д векторов; полный набор операций для вычислений с цветами в формате ARGB; аппаратное преобразование цветов; фиксирование цветов.

Всю информации, по использованию этой библиотеки я брала на сайте gamesmaker.ru (там расположена документации на русском об этой библиотеке).

Интерфейсные функции

·        hgeCreateВозвращает указатель на интерфейс HGE.

·        ReleaseОсвобождает полученный интерфейс HGE.

Системные функции

·        System_ShutdownВосстанавливает видеорежим и освобождает выделенные ресурсы.

·        System_StartНачинает выполнять определенную пользователем функцию кадра.

·        System_SetStateУстанавливает внутреннюю переменную системы.

Функции работы с таймером

·        Timer_GetTimeВозвращает время, прошедшее после вызова функции System_Initiate.

·        Timer_GetDeltaВозвращает время, прошедшее с последнего вызова функции кадра.

Графические функции

·        Gfx_BeginSceneНачинает вывод графики.

·        Gfx_EndSceneЗаканчивает вывод графики и отображает буфер на экране.

·        Gfx_ClearОчищает цель вывода и z-буфер.

С помощью этих функций и некоторых других предоставленных этой библиотекой, я написала игру "Zuma Deluxe".

 

2. Практика


В процессе создания игры были разработаны четыре класса: 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])

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

{mx,my;

// bool check;>Input_GetMousePos (&mx,&my);(int i=0; i<20; i++)

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

{(ListBall [i]. explosition==false)(ListBall, i);(ChekBall (ListBall, i) ==true)2;1;

};

}0;

}0;

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

{mx,my;>Input_GetMousePos (&mx,&my);(int i=0; i<20; i++)

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

{(ListBall, i,frog);(i,ListBall,frog);t=hge->Timer_GetDelta ();(t<30000)=t+hge->Timer_GetDelta ();true;

};

}false;

}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)

{color=0;col=0;i=0;(color; color<6; color++)

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

{++;

}(i==20)

{=0;;

}(i; i<20; i++)

{(ListBall [i]. col==color)++;

}(col>=3)

{=0;=0;;

}if (col==0)

{=0;=0;;

}

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

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

{[i]. explosition=false;[i]. col=color;++;(hge, i,color);(col>=3)

{=0;;

}

}

}=0;

}

}

}

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

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

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

void BallPath:: TextureBallLoadRandom (HGE *hge)

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

{a = rand () % 6;[i]. col=a;(a==0). texBalls [i] =hge->Texture_Load ("image\\baAccuracyBlue. png");if (a==1). texBalls [i] =hge->Texture_Load ("image\\baAccuracyGreen. png");if (a==2). texBalls [i] =hge->Texture_Load ("image\\baAccuracyPurple. png");if (a==3). texBalls [i] =hge->Texture_Load ("image\\baAccuracyRed. png");if (a==4). texBalls [i] =hge->Texture_Load ("image\\baAccuracyWhite. png");if (a==5). texBalls [i] =hge->Texture_Load ("image\\baAccuracyYellow. png");

}

}

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

·        int CalculatePositionLev1 (float h);

·        int CalculatePositionLev2 (float h);

·        int CalculatePositionLev3 (float h);

класс 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)

{seq [9] = {0, 0, 1, 2, 2, 2, 1, 0, 0};levelTopColors [] = {0xFF15092A, 0xFF6C6480, 0xFF89B9D0};levelBtmColors [] = {0xFF303E57, 0xFFAC7963, 0xFFCAD7DB};h;float cellw=SCREEN_WIDTH/15;col1, col2;(b. speed==0.0f) time=b. GetTime ();

{+=hge->Timer_GetDelta () *b. speed;(time>=24.0f) time-=24.0f;

}. seq_id= (int) (time/3);. seq_residue=time/3-b. seq_id;= (time/400);. SetHWColor (levelTopColors [seq [3]]);. SetHWColor (levelTopColors [seq [4]]);. collevelTop=col2*3 + col1* (1.0f-3);. SetHWColor (levelBtmColors [seq [3]]);. SetHWColor (levelBtmColors [seq [4]]);. collevelBtm=col2*3 + col1* (1.0f-3);. colball. SetHWColor (0xFFEAE1BE);. colball=b. colball* (1);k;(b. pl. level==1)

{=b. CalculatePositionLev1 (h);

}if (b. pl. level==2)=b. CalculatePositionLev2 (h);if (b. pl. level==3)=b. CalculatePositionLev3 (h);k;

}

·        void RenderSimulation () - рисует заданные спрайты на полученных координатах;

·        void SaveToFile (char *name) - -сохраняет текущего игрока и ее время в файл уровня;

·        void WinersFromFile () - считывает лучших игроков уровней из файла;

·        void CheckWin (HGE *hge) - проверяет не пуста ли цепочка, если да то переходит на слеующий уровень;

void Game:: CheckWin (HGE *hge)

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

{(b. ListBall [i]. explosition==false);

}(i==20)

{. pl. level++;(hge);

}

}

класс hgeGUIMenuItem

Этот класс является классом-наследником виртуального класса hgeGUIObject библиотеки HGE, поэтому методы у него такие же как и в стандартном классе:

·        virtual voidRender () - рисует наше меню;

·        virtual voidUpdate (float dt) - обновляет анимацию на фоне меню;

·        virtual voidEnter () - отвечает за то, когда меню должно появится на экране;

·        virtual voidLeave () - отвечает за то, когда меню должно исчезнуть с экрана;

·        virtual boolIsDone () - проверяет закончена ли анимация;

·        virtual voidFocus (bool bFocused) - обеспечивает работу с элементами меню (кнопками);

·        virtual voidMouseOver (bool bOver) - уведамляет когда курсор мыши вышел за пределы окна;

void hgeGUIMenuItem:: MouseOver (bool bOver)

{(bOver) gui->SetFocus (id);

}

·        virtual boolMouseLButton (bool bDown) - уведомляет о состоянии левой кнопки мыши;

hgeGUIMenuItem:: MouseLButton (bool bDown)

{(! bDown)

{=4;true;

}

{>Effect_Play (snd);=0;false;

}

}

·        virtual boolKeyClick (int key, int chr) - управлять меню можно также с помощью кнопак ENTER и SPACE;

класс Forminput

Этот класс так же является классом-наследником виртуального класса hgeGUIObject библиотеки HGE, поэтому методы у него такие же как и в стандартном классе: Предназначен для ввода имени игрока.

А так же имеет несколько дополнительных функций.

·        void setText (char *newText);

·        char *getText () - для получения введенной строки;

В программе имется еще несколько вспомагательных функций, отвечающих за кадр и его прорисовку. У каждой сцены она свои.FrameFunc1 () - кадр какого-либо уровняRenderFunc1 () - его прорисовкаFrameFuncI () - кадр ИнструкцииRenderFuncI () - -прорисовка ИнструкцииFrameFunc () - кадр Главного менюRenderFunc () - его прорисовкаFrameFuncW () - кадр ПобедителиRenderFuncW () - его прорисовкаRev () - для возрата в главное меню

В процессе игры пользователь может насладиться приятным музыкальным сопровождением, у каждого уровня оно свое. Так же он всегда будет слышать, отчетливый звук когда берет шарик, и когда несколько шариков уничтожаются. Это поможет пользователю сосредоточится и развлечет его.

 

3. Руководство пользователя


При загрузке приложения сначала появлется заставка самого движка, сделано в благодарность разработчикам. Затем запускается главное меню.


Кнопка Play запускает основной цикл игры, начиная с первого уровня.

Кнопка Instructions запускает окно с очень небольшими инструкциями.

Кнопка Winers запускает окно с победителями уровней.

Кнопка Exit закрывает окно.

Для возрата в главное меню достаточно нажать клавишу ESCAPE.

Основной элемент управления меню - это мышь, но кнопки также реагирует на нажатие клавиш ENTER и SPACE, и еще переключать кнопки можно с помощью стрелок (вверх и вниз).

И так нажимаем кнопку Instructions. У нас появляется окно.


Как можно видеть информации недостаточно, но если нужно очень подробная информация нужно открыть файл "Instructions".

И так прочитав инструкцию, можно приступать к началу игры.

Нажав кнопку Play на экране появится такое окно.

В левом верхнем углы игрок всегда может найти информацию, на каком уровне он находится и сколько жизней у него осталось.

Целью игры является уничтожить все шарики в цепочке. Для этого игрок последовательно берет шарик из цепочки и потом вставляет его в другое место. В игре имеется три уровня.




Игрок должен попасть курсором мыши по шарику, который он хочет забрать в лягушку. Затем он щелкает мышью по шарику после которого он хочет вставить свій шарик. Внимание!!! Если вы хотите вставить третий шарик в место где уже есть два шарика такого цвета, то нужно щелкать по дальнему шарику. Если цепочка дайдет до злой звезды, то пользователь проиграл. У него либо отнимется жизнь либо, если жизней не осталось, выйдет из игры.

Для сохранение текущего результата можно нажать клавишу S, для смены уровня достаточно нажатия клавиши L. Убедительная просьба в имени игрока не включать эти буквы!!!

Теперь нажмем клавишу ESCAPE, чтобы вернутся в главное меню. После мы можем зайти в окно Winers, путям нажатия кнопки Winers. У нас выскочит такое окно. Где видны победители каждого из уровней.



Заключение


В результате выполнения курсового проекта была разработана казуальная игра Zuma.

В игре имеется три не очень сложных уровня.

Была разработана отличная графика в сопровождения с музыкой.

В процессе создания проекта был изучен принцип работы с графикой в c++.

В ходе разработки приложения использовалась среда Microsoft Visual Studio 2010, а для работы приложения - библиотека HGE. DLL.

Список использованных источников


1.      Лафоре Р. Объектно-ориентированное программирование / Р. Лафоре - 4-е изд. - Питер.: 2010. - 654 с.

2.      Давыдов В.Г. Технологии программирования. / В.Г. Давыдов - Санкт-Петербург: БХВ-Петербург, 2009. - 432 с.

.        Касюк С.Т. Конспект лекций по дисциплине "Информатика" / С.Т. Касюк - Челябинск: ЮУрГУ, 2011. - 212 с.

Приложения


Приложения 1. Исходный код

Функции кадра меню и его прорисовкиFrameFunc ()

{dt=hge->Timer_GetDelta ();float t=0.0f;tx,ty;id;int lastid=0;(hge->Input_GetKeyState (HGEK_ESCAPE)) { lastid=5; gui->Leave (); }=gui->Update (dt);(id == - 1)

{(lastid)

{1:

{>Gfx_Clear (0);>System_SetState (HGE_FRAMEFUNC, FrameFunc1);. b. pl. level=3;. InitSimulation (hge);>System_SetState (HGE_RENDERFUNC, RenderFunc1);>System_SetState (HGE_TITLE, "LEVEL");>System_SetState (HGE_USESOUND, true);>System_SetState (HGE_WINDOWED, true);>System_SetState (HGE_SCREENWIDTH,SCREEN_WIDTH);>System_SetState (HGE_SCREENHEIGHT, SCREEN_HEIGHT);>System_SetState (HGE_SCREENBPP, 32);=new hgeGUI ();->SetNavMode (HGEGUI_UPDOWN | HGEGUI_CYCLED);->SetCursor (spr);->SetFocus (1);->Enter ();(hge->System_Initiate ())

{=new hgeFont ("font2. fnt");>System_Shutdown ();>Release ();;

};

}2:3:

{=hge->Effect_Load ("music\\instructions. mp3");>Effect_Play (snd);>Gfx_Clear (0);>System_SetState (HGE_FRAMEFUNC, FrameFuncI);=hge->Texture_Load ("image\\dialogbox. jpg");=new hgeSprite (background1, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);>System_SetState (HGE_RENDERFUNC, RenderFuncI);>System_SetState (HGE_TITLE, "INSTRUCTIONS");>System_SetState (HGE_USESOUND, true);>System_SetState (HGE_WINDOWED, true);>System_SetState (HGE_SCREENWIDTH, SCREEN_WIDTH);>System_SetState (HGE_SCREENHEIGHT, SCREEN_HEIGHT);>System_SetState (HGE_SCREENBPP, 32);(! FrameFuncI)

{>System_Shutdown ();>Release ();;

};

}4:>SetFocus (1);>Enter ();;5: return true;

}

}if (id) { lastid=id; gui->Leave (); }+=dt;=50*cosf (t/60);=50*sinf (t/60);. v [0]. tx=tx; quad. v [0]. ty=ty;. v [1]. tx=tx+800/64; quad. v [1]. ty=ty;. v [2]. tx=tx+800/64; quad. v [2]. ty=ty+600/64;. v [3]. tx=tx; quad. v [3]. ty=ty+600/64;false;

}RenderFunc ()

{>Gfx_BeginScene ();>Gfx_RenderQuad (&quad);>Render ();>SetColor (0xFFFFFFFF);>printf (5, 5, HGETEXT_LEFT, "dt: %.3f\nFPS: %d", hge->Timer_GetDelta (), hge->Timer_GetFPS ());>Gfx_EndScene ();false;

}Game:: SaveToFile (char *name)

{*plname;(*name! =' ')

{++;

}++;=name;*namef;(b. pl. level==1)

{="level1. txt";

}if (b. pl. level==2)

{="level2. txt";

}if (b. pl. level==3)

{="level3. txt";

}timel [10];(timel,"%f",b. timelevel);*f=fopen (namef,"r+");(! f)

{("File was not opened!!!");

}(f,0,SEEK_END);('\n',f);('\n',f);

// внесение в Базу данных("Имя: ",f);('\n',f); // fputs не переходит на другую строку(plname,f);('\n',f); // fputs не переходит на другую строку("Время: ",f);('\n',f); // fputs не переходит на другую строку(timel,f);(f);

}Game:: WinersFromFile ()

{str [30]; // строка для взятия из файлаtname [30];ttime=0;len=30;*f1=fopen ("level1. txt","r");(! f1)

{("File was not opened!!!");

}*f2=fopen ("level2. txt","r");(! f2)

{("File was not opened!!!");

}*f3=fopen ("level3. txt","r");(! f3)

{("File was not opened!!!");

}

// int max=0;(int i=0; i<3; i++)[i] =100;(str,len,f1); // первая строчка: " База Данных: "(! feof (f1)) // пока мы не найдем нужный счет

{(str,len,f1); // пустая строчка(str,len,f1); // Имя:(str,len,f1); // Alex(tname,str); // копируем в темповое имя имя польхователя(str,len,f1); // вВремя:(str,len,f1); // 1234=atof (str); // получаем time(ttime<=maxtime [0])

{[0] =ttime;(maxname1,tname);

}

}(f1);(str,len,f2); // первая строчка: " База Данных: "(! feof (f2)) // пока мы не найдем нужный счет

{(str,len,f2); // пустая строчка(str,len,f2); // Имя:(str,len,f2); // Alex(tname,str); // копируем в темповое имя имя польхователя(str,len,f2); // вВремя:(str,len,f2); // 1234=atof (str); // получаем time(ttime<=maxtime [1])

{[1] =ttime;(maxname2,tname);

}

}(f2);(str,len,f3); // первая строчка: " База Данных: "(! feof (f3)) // пока мы не найдем нужный счет

{(str,len,f3); // пустая строчка(str,len,f3); // Имя:(str,len,f3); // Alex(tname,str); // копируем в темповое имя имя польхователя(str,len,f3); // вВремя:(str,len,f3); // 1234=atof (str); // получаем time(ttime<=maxtime [2])

{[2] =ttime;(maxname3,tname);

}

}(f3);

}Game:: InitSimulation (HGE *hge)

{. life=1;

// загрузка текстур. g. sndrol=hge->Effect_Load ("music\\rolling. wav");. g. sndpop=hge->Effect_Load ("music\\pop. wav");. g. snddes=hge->Effect_Load ("music\\ballsdestroyed. wav");(b. pl. level==1)

{. pl. fx=490;. pl. fy=280;. g. background=hge->Texture_Load ("levels\\inversespiral. png");(! b. g. background) return false;. g. texFrog=hge->Texture_Load ("image\\SMALLFROG1. png");(! b. g. texFrog) return false;. TextureBallLoadRandom (hge);. g. snd1=hge->Effect_Load ("music\\level1. mp3");

// создание спрайтов>Effect_PlayEx (b. g. snd1,10,0,-1,true);. g. level=new hgeSprite (b. g. background, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);. g. frog=new hgeSprite (b. g. texFrog,0, 0, 90, 100);(int i=0; i<20; i++)

{. g. ball [i] =new hgeSprite (b. g. texBalls [i],0,0,33,32);

}. pl. life=3;. colWhite. SetHWColor (0xFFFFFFFF);=b. GetTime ();. speed=6.4f;. ballX=40;. ballY=440;. ListBall [0]. x=b. ballX;. ListBall [0]. y=b. ballY;. ListBall [0]. frogs=false;. ListBall [0]. hidden=false;. ListBall [0]. explosition=false;(int i=1; i<20; i++)

{. ListBall [0]. frogs=false;. ListBall [i]. hidden=true;. ListBall [i]. explosition=false;. ListBall [i]. x=40;. ListBall [i]. y=440;

}

}if (b. pl. level==2)

// создание спрайтов>Effect_PlayEx (b. g. snd1,5,0,-1,true);. g. level=new hgeSprite (b. g. background, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);. g. frog=new hgeSprite (b. g. texFrog,0, 0, 90, 100);(int i=0; i<20; i++)

{. g. ball [i] =new hgeSprite (b. g. texBalls [i],0,0,33,32);

}. pl. life=3;>Effect_Play (b. g. snd1);. g. level=new hgeSprite (b. g. background, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);. g. frog=new hgeSprite (b. g. texFrog,0, 0, 90, 100);(int i=0; i<20; i++)

{. g. ball [i] =new hgeSprite (b. g. texBalls [i],0,0,33,32);

}. pl. life=3;. colWhite. SetHWColor (0xFFFFFFFF);=b. GetTime ();. speed=6.4f;. ballX=770;. ballY=60;. ListBall [0]. x=b. ballX;. ListBall [0]. y=b. ballY;. ListBall [0]. frogs=false;. ListBall [0]. hidden=false;. ListBall [0]. explosition=false;(int i=1; i<20; i++)

{. ListBall [0]. frogs=false;. ListBall [i]. hidden=true;. ListBall [i]. explosition=false;. ListBall [i]. x=770;. ListBall [i]. y=60;

}

}if (b. pl. level==3)

{. pl. fx=290;. pl. fy=310;. g. background=hge->Texture_Load ("levels\\tunnellevel. png");(! b. g. background) return false;. g. texFrog=hge->Texture_Load ("image\\SMALLFROG1. png");(! b. g. texFrog) return false;. TextureBallLoadRandom (hge);. g. snd1=hge->Effect_Load ("music\\level3. mp3");

// создание спрайтов>Effect_PlayEx (b. g. snd1,5,0,-1,true);. g. level=new hgeSprite (b. g. background, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);. g. frog=new hgeSprite (b. g. texFrog,0, 0, 90, 100);(int i=0; i<20; i++)

{. g. ball [i] =new hgeSprite (b. g. texBalls [i],0,0,33,32);

}. pl. life=3;>Effect_Play (b. g. snd1);. g. level=new hgeSprite (b. g. background, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);. g. frog=new hgeSprite (b. g. texFrog,0, 0, 90, 100);(int i=0; i<20; i++)

{. g. ball [i] =new hgeSprite (b. g. texBalls [i],0,0,33,32);

}. pl. life=3;. colWhite. SetHWColor (0xFFFFFFFF);=b. GetTime ();. speed=6.4f;. ballX=750;. ballY=5;. ListBall [0]. x=b. ballX;. ListBall [0]. y=b. ballY;. ListBall [0]. frogs=false;. ListBall [0]. hidden=false;. ListBall [0]. explosition=false;(int i=1; i<20; i++)

{. ListBall [0]. frogs=false;. ListBall [i]. hidden=true;. ListBall [i]. explosition=false;. ListBall [i]. x=750;. ListBall [i]. y=5;

/

}

}true;

}

Для примера высчитывания координат шариковBallPath:: CalculatePositionLev3 (float h)

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

{(ListBall [i]. hidden==false&&ListBall [i]. frogs! =true)

{(ListBall [i]. x==750&&ListBall [i]. y<560)

{[i]. prevx=ListBall [i]. x;[i]. prevy=ListBall [i]. y-30;[i]. y+=h;(ListBall [i]. y-ListBall [i+1]. y>30)[i+1]. hidden=false;;

}

}(ListBall [i]. y>560&&ListBall [i]. x>100)

{[i]. prevx=ListBall [i]. x+30;[i]. prevy=ListBall [i]. y;[i]. x-=h;;

}(ListBall [i]. y>500&&ListBall [i]. x>55)

{[i]. prevx=ListBall [i]. x;[i]. prevy=ListBall [i]. y;[i]. x-=h;[i]. y-=h;;

}(ListBall [i]. x<55&&ListBall [i]. y>95)

{[i]. prevx=ListBall [i]. x;[i]. prevy=ListBall [i]. y+30;[i]. y-=h;;

}(ListBall [i]. y>55&&ListBall [i]. x<115)

{[i]. prevx=ListBall [i]. x;[i]. prevy=ListBall [i]. y;[i]. x+=h;[i]. y-=h;;

}(ListBall [i]. y<55&&ListBall [i]. x<550)

{[i]. prevx=ListBall [i]. x-30;[i]. prevy=ListBall [i]. y;[i]. x+=h;;

}(ListBall [i]. x<590&&ListBall [i]. y<95)

{[i]. prevx=ListBall [i]. x;[i]. prevy=ListBall [i]. y;[i]. x+=h;[i]. y+=h;;

}(ListBall [i]. x>590&&ListBall [i]. x<591&&ListBall [i]. y<430)

{[i]. prevx=ListBall [i]. x;[i]. prevy=ListBall [i]. y-30;[i]. y+=h;;

}(ListBall [i]. x>520&&ListBall [i]. x<591&&ListBall [i]. y>420&&ListBall [i]. y<470)

{[i]. prevx=ListBall [i]. x;[i]. prevy=ListBall [i]. y;[i]. x-=h;[i]. y+=h;;

}(ListBall [i]. x<555&&ListBall [i]. x>535&&ListBall [i]. y>470)

{[i]. prevx=ListBall [i]. x+30;[i]. prevy=ListBall [i]. y;[i]. x-=h;;

}(ListBall [i]. x<535&&ListBall [i]. x>490&&ListBall [i]. y>430)

{[i]. prevx=ListBall [i]. x;[i]. prevy=ListBall [i]. y;[i]. x-=h;[i]. y-=h;;

}(ListBall [i]. x<490&&ListBall [i]. y>370)

{[i]. prevx=ListBall [i]. x;[i]. prevy=ListBall [i]. y+30;[i]. y-=h;;

}(ListBall [19]. x<490&&ListBall [19]. x>487&&ListBall [19]. y<370)

{(pl. life>1)

{. life--;=750;=5;[0]. x=ballX;[0]. y=ballY;[0]. hidden=false;[0]. explosition=false;(int i=1; i<20; i++)

{[i]. hidden=true;[i]. explosition=false;[i]. x=750;[i]. y=5;

}

}0;

}

}1;

}Player:: DrawFrogBall (Ball ListBall [20], int i)

{x,y;=ListBall [i]. x;=ListBall [i]. y;[i]. frogs=true;[i]. x=fx+30;[i]. y=fy+65;k=0;rev;(int j=19; j>i; j--)

{(ListBall [j-1]. explosition==true)

{=j;=j-1;(ListBall [k]. explosition==true)

{-;

}[j]. x=ListBall [k]. x;[j]. y=ListBall [k]. y;=k+1;

}if (ListBall [j]. explosition! =true)

{[j]. x=ListBall [j-1]. x;[j]. y=ListBall [j-1]. y;

}

}(ListBall [i+1]. explosition! =true)

{[i+1]. x=x;[i+1]. y=y;

}if (k==i)

{[rev]. x=x;[rev]. y=y;

}

}Player:: DrawBallAfter (Ball ListBall [20], int i, int frog)

{(i+1==frog)

{[i]. x=ListBall [i+2]. x;[i]. y=ListBall [i+2]. y;;

}(i==frog);[i]. x=ListBall [i+1]. x;[i]. y=ListBall [i+1]. y;

}(i! =frog)

{[i]. x=ListBall [i]. prevx;[i]. y=ListBall [i]. prevy;

}[frog]. frogs=false;

}


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!