Домашни > Време е да помислите за проектите си! > Решения > Решението на Мирослав Стояновски

Резултати
0 точки от тестове
10 точки от учител

10 точки общо

0 успешни теста
0 неуспешни теста
Код

 1"""
 2[Title/Звание]
 3"Greasy Kingx" - Roguelike игра
 4
 5[Description/Обрисовка]
 6Нека започнем с описание на lore-a, най-важната част от една игра. Главният герой, известен с прякора Greasy Killer, един млад и талантлив левент, се изправя пред нуждата да спаси страната си от алчните и богати власти(от тук идва името на играта - властимащите крале са леко понапълняли - "мазни"). За да ги свали от власт, той първо трябва да победи всички техни войници.
 7
 8Играта представлява 2D top-down Roguelike игра (тука можем да си представим игри като The Binding of Isaac). Механиките на Greasy Kingx ще наподобяват тези на Isaac и Minecraft, естествено в доста по-опростен вариант. В разработката на играта ще бъдат демонстрирани ООП принципи(или поне ще се опитам), евентуално и някои алгоритми върху графи, ако успея да го сместя във времевия период за разработка.
 9
10Първо много накратко ще обясня какво всъщност представляват Roguelike игрите. Почти всички роглайкове предоставят на играча контрол върху герой, който те могат да персонализират, като избират клас, раса, пол, и т.н., и настройват атрибути и умения. В началото на играта героят се поставя в дънджън с някакви базови ресурси като просто оръжие, броня, фенер, храна. Следвайки концепцията на ролевите игри за обикаляне из дънджъна, играчът премества героя през дънджъна, събирайки съкровища, включващи нови оръжия, брони, магически item-и, храна, пари и т.н., докато се бори с чудовища, които се движат из дънджъна.
11
12Конкретно за моята игра, смятам да реализирам една(голяма) стая, в която се намира нашият герой. От всички страни на стаята периодично влизат чудовища от различни видове, които се опитват да убият нашият герой, тъй като те много обичат "мазните" си лидери. Чудовищата ще бъдат melee и ranged, като melee чудовищата ще се пробват да достигнат до нашия герой. С протичане на играта, вероятността да се spawn-ат чудовища от по-силен вид е все по голяма, както и кръвта им постепенно ще става все повече. Колкото повече време героят остане жив, толкова повече точки ще събере играчът. Ще бъде имплементирана leaderboard система, която да показва рекордите на играчите. При почване на играта, играчът ще има фиксиран брой точки, които ще може да разпредели в stat-овете на героя, с който играят - напр. health, movement speed, base damage, т.н. При всяко убиване на чудовище, то ще пуска gold, пропорционално на силата му. Ще бъде имплементирана shop система, където героят ще може да закупува различни оръжия, брони, potion-ки, ефекти, амуниции и т.н. (с помощта на изкарания му голд от убиване на чудовища), които ще му позволят да остане жив за по дълго време. В началото героят почва с меч, тоест ще може да атакува само melee. Когато събере достатъчно пари, героят ще може да закупи и други оръжия, било то ranged или melee, както и много други неща. Трябва да се обърне внимание, че атакуващите ще идват на вълни, и магазинът ще бъде активен само между отделните вълни, така че човек трябва да обмисли кое ще му е нужно от магазина, че да успее да оживее в следващата вълна!
13
14Някои видове чудовища ще бъдат (Признавам, имената им са генерирани от Chat GPT):
15    1. Slickback Scoundrel - Най-базовото чудовище. От тип melee, той се придвижва към героя и прави базови melee атаки върху него. Има малко кръв, бие малко dmg, дропва малко голд.
16    2. Slime Slicker - Чудовище, което когато умре спаунва 2 по-малки Slime Slicker чудовища, които когато умрат спаунват 2 още по-малки Slime Slicker чудовища. Тук може да си представим Slime от Minecraft.
17    3. Frostwind Marksman - Чудовище от тип Ranged, използва лък за да стреля по героя. Ако го уцели, то героят има slowdown ефект за няколко секунди(също и поема damage, естествено).
18    4. Spook Boomkin - Представлява чудовище, което експлодира когато е в близост до героя и бие damage в радиус от експлозията. (Minecraft Creeper)
19    5. Barricade Breeder - Чудовище, което ще може да слага стени. Тези стени ще пречат на героя да минава през тях, обаче всички чудовища ще могат да минават през тях. Също така, всички патрони на героя ще бъдат блокирани от стената, но вражеските такива няма.
20
21Лесно могат да бъдат добавяни още врагове/shop item-и/механики по време на разработката на софтуерния продукт.
22
23Програмата избира произволен старт пойнт за всяко чудовище от текущия wave при стартирането му. Легални стартови позиции за чудовища са ръбовете на стаята. Те не се спаунват наведнъж, а постепенно докато не се изчерпат всички чудовища от този wave. Тогава считаме, че wave-ът е успешно преминат. Всеки wave се характеризира от pool чудовища, напр. 10 Slickback Scoundrel и 5 Frostwind Marksman, които се появяват в произволен order. След всеки wave, героят получава определено количество голд(правопропорционално на wave count-a) като награда за преминаването му. Wave-овете са безкрайно много на брой(докато не умре героят).
24
25Ще бъде възможна пауза на играта по всяко време, което ще помогне в следните случаи: Играчът иска да осмисли колко е прецакан в даден момент на играта; Обмисляне на следващата си стъпка; Нужда от малка/голяма нужда; Мама е сготвила манджата и чака да вечеряте. Тогава може да се сейвне текущата конфигурация на играта във файл, и играта спокойно да бъде затворена. При пускане на играта ще има опцията continue game, която ще върне играча точно където е оставил играта.
26
27Всичко ще бъде окрасено с изображения(sprites) - героят, чудовищата, item-ите. Също така ще има и background музичка, shooting/slashing/death sounds, shop музичка и т.н.
28
29[Functionalities/Надарености]
301. Зареждане на текуща конфигурация от файл / почване на нова игра.
312. Записване на текущата конфигурация във файл.
323. Запазване на Leaderboard във файл / Визуализация на Leaderboard.
334. Aктуализиране и визуализиране на информация за притежавани от играча характеристики - health, gold и други.
345. Програмата ще обновява и визуализира следните неща, заедно с техните sprite-ове:
35    - текущата позиция на героя.
36    - текущата позиция на всяко чудовище.
37    - текущата позиция на всеки снаряд.
38    - текущи статове на всяко Entity(чудовище или герой) - current health и д.р.
39    - Quick Item List - списък на дъното на екрана, показващ какви item-и носи героят(от тип Minecraft). Те са видими през цялото време.
40    - All Item List - отваряне на целия инвентар със item-и. Видими са само ако се отвори инвентара.
41    - Current Score/Wave count
426. Героят/потребителят/играчът може да извършва следните дейности:
43    - Добавяне на item от All Item List-a към Quick Item List-a.
44    - Преместване на item от Quick Item List-a към All Item List-a.
45    - Избор на активен item от Quick Item List-a чрез клавишите 0-9.
46    - Използване на активния item.
47    - Пауза на играта.
48    - Движение на героя в недискретни посоки(не само нагоре, надолу, наляво, надясно).
49    - Промяна на посоката на гледане/aiming.
50    - Отваряне на магазина(само между отделните вълни).
51    - Избиране на неща от магазина с помощта на бутони/dropdown листове и т.н.
52    - Избор на background песен от pause menu-то.
537. Програмата прилага характеристиките за всяко оръжие – цена, обхват, скорост на атака, damage, и др.
548. На всеки кадър, програмата премества чудовищата по посока героя.
559. На всеки кадър, програмата обръща (завърта спрайта на) Entity-тата в посоката към която гледат(ако е необходимо), както и ги shift-ва спрямо текущата им локация.
5610. Програмата следи за чудовище, което е стигнало до героя, и ако това се случи, чудовището умира и health-a на героя спада.
5711. Следи се дали изстреляни от чудовищата projectiles са уцелили героя, и ако да, health-a на героя спада.
5812. Програмата ще записва информация за всички ефекти върху състоянието(status effects) на Entity-тата, като: 
59   - намаляване на скоростта на придвижване
60   - увеличаване на скоростта на придвижване
61   - damage-over-time
62   - health regeneration
63   - други ефекти
6413. Програмата ще следи за колизии между hitbox на entity и projectile и ще действа по определен начин:
65   - Нанася damage, ако entity-то все още има health, и ще визуализира health bar-а му.
66   - Ако след пресмятане на damage, entity няма повече health, то той умира. Ако entity-то е героят, GGWP. Ако е чудовище, пуска голд.
6714. При покупка на еднократен item(напр. конкретно оръжие), той изчезва от магазина. При покупка на reusable item-и (health potions, ammo), те остават в магазина, но цената им се вдига спрямо колко бройки са били закупени.
68
69
70[Milestones/Възлови точки]
711. Прозорец - размери, настройки, game loop.
722. Четене на информация от файл. Зареждане на конфигурация.
733. Генериране на вълна(wave).
744. Взаимодействие с прозореца. Визуализиране на обекти по екрана.
755. Entities. Движение на entity по екрана.
766. Геометрия на обекти.
777. Обхват на атаки, hitbox и health bar на entity, визуализирането им.
788. Придвижване на чудовище по изчислен за него минимален път(в права линия към героя). Визуализиране и актуализиране на пътя върху игралното поле.
799. Режими на насочване и стреляне на герой/чудовище.
8010. Колизия на projectile с entity.
8111. Характеристики на entity.
8212. Закупуване на item-и. Актуализиране на характеристики на героя.
8313. Статус ефекти върху entity.
8414. HUD - визуализиране на items, health, score.
8515. Условия за успешно преминаване на дадена вълна.
8616. Дизайн на чудовища/item-и. Балансиране на характеристиките им.
87
88[Estimate in man-hours/Времеоценка в човекочасове]
89Около 100 часа за имплементиране на всичко гореизброено. Възможно е да отнеме повече време, възможно е и по-малко. Ако остане допълнително време преди срока за предаване на проектите, приложението ще бъде разширено с допълнителни механики, чудовища, item-и и д.р.
90
91[Usage of technologies/Потребление на технологии]
92-pygame
93-pygame gui
94-numpy (незадължително)
95-Вградени модули – random, collections и т.н.
96"""


----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

Дискусия
Виктор Бечев
04.01.2024 19:35

Идеята ти е чудесно описана и доста приятна! Имам само един съвет, що се отнася до реализацията - прецени кои неща са ти приоритет и остави другите за накрая. Например Leaderboard-а не е нещо супер комплексно, но ако не ти остане време за всичко - по-добре без него, отколкото без някоя фундаментална механика. "Milestones" секцията може би описва точно това, но ако не си готов да се разделиш с последните 3-4 например - значи може и да трябва да реприотизираш.
История
Това решение има само една версия.