Как да си създадем конзолната игра „Balloons Pops“ на езика C#?

В края на месец Февруари тази година се записах за безплатния курс по програмиране Качествен програмен код, организиран от Академията на Телерик. Целта на курса беше да те запознае с принципите за изграждане на висококачествен програмен код в процеса на разработка на софтуер. Той е свободноизбираем в няколко български университета, но може да се запише от всички студенти, изучаващи компютърни науки или сходни, ИТ специалности. В началото ни раздадоха входящи проекти. На мен се падна да пресъдзам конзолно играта „Balloons Pops“.

Условия на играта

Играта „Balloons Pops“ трябва да е интерактивна и конзолно ориентирана. Идеята и е да се пукнат всички балони. Те са произволно зададени като матрица с размер 10 на 5 (5 реда и 10 колони). Всяка клетка на матрицата държи балон с определени цвят. Както се вижда от фигурата, която съм качил, цветовете могат да бъдат 4 на брой. Когато балон на определена позиция бъде пукнат, всички негови съседни балони от същия цвят също се пукат. Важно тук е да се отбележи, че това са балони съседни по ред и колона спрямо избрания от нас за пукане балон. Друго важно уточнение е, че след като даден балон се пукне и над него има все още балони, те изпадат с една позиция надолу и запълват празната клетка, оставена от пукнатия балон. Отново на фигурата това може да се види. Играта стартира с произволно генерирана матрица от балони в четирите различни на брой цвята [1…4]. В началото се пита за позицията на даден балон, като играча трябва да избере съответно ред и колона, за да го дефинира. Следва продължително пукане на балони от еднакъв цвят в едни и същи ред и колона. Играта приключва, когато и последният балон бъде спукан. Друо важно уточнение е, че когато играта приключи, трябва автоматично да се стартира нова такава. Ако се въведат невалидни координати на балон, то трябва да се изпише съобщение за грешка.
За да се стартира нова игра по всяко време, играчът трябва да въведе командата ‘restart’.
Програмата трябва да имплементира и локално табло „scoreboard“, което да държи най-добрите резултати и името на играча, успял да ги постигне. Естествено при първоначално стартиране на играта таблото с резултатите е празно. Друго важно уточнение е, че това табло държи петте най-добри резултати, подредени във възходящ ред по броя на ходовете, необходими на даден играч, да пукне всички балони. Когато даден играч пукне всички балони, неговият резултат може да се добави в таблото с резултатите, само ако броя на ходовете, които той е направил, е по-малък отколкото някои от другите постижения, които стоят в таблото с най-добрите резултати. Когато резутата на даден играч влезе в таблото с резутатите, играчът трябва да въведе името си или някакъв прякор. Играчът може да поиска да принтира таблото с резултатите по всяко време на играта, когато въведе командата ‘top’. Освен това той може да иска да спре програта като въведе командата ‘exit’.

Някои играчи могат да се опитат да мамят, като въведат непозволени команди. Важно е да се помисли за всички възможни варианти и да се предотвратят моментално с помощта на помощни съобщения.

Някои допълнения към играта

При стартиране на програмата се изписва съобщението „Welcome to “Balloons Pops” game. Please try to pop the balloons. Use ‘top’ to view the top scoreboard, ‘restart’ to start a new game and ‘exit’ to quit the game.“. Веднага след входното съобщение се принтира и произволно генериратана матрица с балони в различни цветове (цифрите от 1 до 4). Извежда се и съобщение за въвеждане на ред и колона от играча: „Enter a row and column:“.

Invalid move or command!

При грешно въведена команда, ти се изписва съобщението: „Invalid move or command!“.

The scoreboard is empty.

Ако се опиташ да извикаш таблото с най-добрите резултати, когато няма записи в него, ти се изписва съобщението: „The scoreboard is empty.“.

Illegal move: cannot pop missing ballon

Ако се опиташ да пукнеш празна клетка, ти се изписва следното съобщение: „Illegal move: cannot pop missing ballon!“.

Good bye!

Когато въведеш командата „exit“, ти се изписва съобщението: „Good bye!“.

Други изисквания за реализиране на играта

  • Позволени езици за програмиране: C#, Java, C++ и PHP.
  • Препоръчителни IDEs: Visual Studio 2010, Eclipse 3.x.
  • Програта ни трябва да е конзолно базирана. Не е необходимо имплементирането на GUI или Web базиран UI.
  • Документация не се изисква.

Примерна демонстрация на играта

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





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

И така нататък мога да си продължа с играта…

Поглед върху кода

За реализацията на кода съм разделил отделните компоненти на програмата в девет различни .cs файлове. Използвах http://ideone.com/, за да ви представя отделните части на кода си!

Какво е ideone?
Ideone е online компилатор и debugging tool, който ти позволява да си компилираш и стартираш кода онлайн на повече от 40 езика за програмиране.

Как да използваш ideone?
Избираш програмен език и копираш твоя ‘source code’ и входни данни в текстовата кутийка. След това избираш дали да стартираш (run) кода си  и дали да изпълниш твоята програма. Имаш и опцията да направиш кода си видим само за теб (private). Накрая натискаш върху ‘submit ‘ бутона и гледаш как програмата ти се изпълнява.

Моята имплементация на играта „Balloons Pops“?

– код (Source code) на играта: BalloonsPops.rar

– изпълним файл на играта: BalloonsPops.exe

  • BallonColours.cs – тук съм описал цветовете на балоните
  • BallonsPopsTest.cs – създал съм тестов клас, за да тествам цялата функционалност
  • ConfigurateEmptyLinesOfMessages.cs – тук съм конфифурирал празните редове на съобщенията и как да излизат на конзолата
  • FillGameBoard.cs – тук съм създал клас за създаване и попълване на таблото с балоните и произолното им оцветяване
  • GameInitialization.cs – тук съм инициализирал играта
  • GameMessages.cs – в този файл съм описал възможните съобщения, които играта може да генерира
  • Move.cs – създал съм ООП клас за редовете и колоните
  • Player.cs – създал съм ООП клас с информация за играча
  • ScoreboardInitialization.cs -това е клас за инициализиране на таблото с най-добрите резултати

Заключение

Надявам се темата да ви е интересна и полезна. Ако все още нямате знанията да направите подобна игра, можете да се запишете в някой от безплатните курсове на Академията на Телерик. Освен това може да прочетете някоя от книгите на Светлин Наков на адрес: http://www.introprogramming.info/ или да си ги купите от някоя книжарница.

Това е първата моя версия на играта, но съм се постарал да отгоравя на всички принципи на курса по  Качествен програмен код.  Благодарение на знанията, които придобих в софтуерната академия на Телерик, успях да направя тази игра и да я реализирам надявам се качествено.