Конзолната игра на Team „Piglet“ – проект към Софтуерната академия на Телерик

Team Piglet In-game Logo

Pig Invaders

Pig Invaders е играта, която аз и моят отбор Team Piglet създадохме като част от обучението ни в Софтуерната академия на „Телерик“ по курса C# Част Втора. Ще споделя накратко как протече процесът по разработката й.

0. Отборът

Членовете на отбор „Прасчо“ бяха определени служебно от Академията. Състоеше се от пет души от различни възрастови групи и с различен опит в програмирането. От тях активно участие взехме трима – аз, Асен Радушев и Галя Тодорова.

1. Задача

Задачата ни беше да разработим конзолна игра. Параметрите на заданието могат да бъдат прочетени тук: ЗАДАНИЕ

2. Първа среща

Решихме да се видим на живо, за да обсъдим каква игра да създадем. Срещата се проведе в сградата на Софтуерната академия. Разбрахме се да направим Space Invaders игра. За комуникация щяхме да използваме Скайп и Google+ група.

3. Архитектура

Постигнахме съгласие аз да определя архитектурата на играта. Водещият ми принцип беше написването на разбираем и гъвкав код, който да позволява лесното добавяне на кораби, оръжия и т.н. от останалите участници в проекта.

Разделих логически проекта на няколко класа: Main, Events, Ships, Weapons и Settings. След което написах механиките за движение на кораба на играча, генериране на противникови кораби, стрелба. По-късно добавих и механика за попадение. Генерираните кораби реших да съхраняваме в лист от int масиви (List<int[]>). Всеки елемент от този масив щеше да съхранява друг масив, в който щеше да се съдържа информацията за характеристиките на всеки кораб. Тези характеристики включват визуален модел, хоризонтална и вертикална позиция, измерения на кораба по хоризонтала и вертикала – общо 5 елемента. При унищожаване на кораб се премахва съответният елемент от листа. Нулевият елемент е корабът на играча, останалите – противниковите.

Моделите на корабите реших да съхраняваме в матрица от символи. Това улесняваше написването на нови модели кораби.

Накрая написах и кода за поведението на противниците, който се базираше на .NET класа Random. Всеки противников кораб действаше самостоятелно от останалите. Възможните действия на един противников кораб в рамките на един цикъл бяха четири (две действия и две бездействия) – да промени или запази позицията си и да стреля или не.

4. Визуална част и озвучение

С тези два компонента се захвана съотборникът ми Асен. Той написа интрото на играта, както и интерфейсът за избор на кораб. Те използват външни текстови файлове. Освен това и създаде всички модели на кораби. Добави още звуци при стрелба и експлозия на противник, а също и анимация за експлозиите. Благодарение на него играта вече беше по-впечатляваща – и като визия, и като звук.

Интерфейс за избор на кораб

5. Други благинки

Съотборникът ми Галя имплементира пауза, scoring система, механика за съхраняване на резултатите във външен текстов файл и in-game меню. Благодарение на старанието й успяхме да отстраним и редица бъгове.

Играчът може да избира с колко живота да започне, както и срещу колко противници да играе.

6. Защитата на проекта

… пред жури от Академията премина успешно и отборът ни получи максималните 11 точки!

Снимка от играта

7. Бъдещето на проекта

Единственото, което ме дразни в играта, е, че моделите треперят на екрана. Това е резултат от метода Console.Clear(); Възнамерявам по-нататък, когато имам повече време, да намеря разрешение на този дразнещ проблем. Освен това могат да бъдат добавени още много възможности – различни нива, босове, нови оръжия, power-ups и други.

8. Ресурси

Кодът

Играта

Документация

Презентационен файл

Advertisements

5 Comments

Вашият коментар

Попълнете полетата по-долу или кликнете върху икона, за да влезете:

WordPress.com лого

You are commenting using your WordPress.com account. Log Out / Промяна )

Twitter picture

You are commenting using your Twitter account. Log Out / Промяна )

Facebook photo

You are commenting using your Facebook account. Log Out / Промяна )

Google+ photo

You are commenting using your Google+ account. Log Out / Промяна )

Connecting to %s