Loading...
HristoVutov avatar HristoVutov 20 Точки

Не е перфектно но 100 изкарах някак :Д https://github.com/HristoVutov/OOPExam

3
exploitx avatar exploitx 71 Точки

На моето много му куца логиката за Атаките ама иначе горе долу си го харесвам :D линк

1
gamereaktor2118 avatar gamereaktor2118 3 Точки

Ако говориш за вечерния, това е решение със 70 точки.

0
enchev avatar enchev 0 Точки

Тестове 3, 8 и 9 изглежда са сценарии на атакуващ блоб с Aggressive Behavior и Blobplode.
Ако те ви гърмят, пробвайте да промените калкулирането на damage-а:
(началния dmg + бонуса от Aggressive) * 2 ако е Blobplode
А status трябва да принтва само онова в скобите :D

 

0
Simooo93 avatar Simooo93 81 Точки

Решение

Ето го и моето решение. Като цяло съм доволен от решението си, но има места в Блоб-а, където ми е сериозно счупена абстракцията. Например създавам атаката и бихейвиъра в конструктора на блоб и заради това си контактува с енджина. Предполагам по-правилно щеше да е да подходя като Enevlogiev е конструктора да му подам директно атака и поведение и после в самите методи на атака и поведението да извиквам за кой блоб се отнася, но ми се стори по-правилно при положение, че принадлежат на конкретен блоб, то би трябвало да знаят за кой се отнасят без да им бъде подавано във всеки метод. Сега смятам, че най-добрият подход би бил да създам атака и поведение без конкретен blob, а после в конструктора на блоба вместо там да създавам цялата атака, просто там да им кажа, че техния конкретен блоб, с който ще работят е this. Но, както всеки път след изпит винаги може и още. 

За репортирането приех доста дървен подход, тъй като и там не можах да се сетя как да направя така, че вътрешността на блоба да не участва по никакъв начин. Накрая на това, което се спрях е 4 булеви в енджина, ако ни е обявено репортване.

Някои, ако ми изтъкне и други грешки ще съм му благодарен. 

1
Filkolev avatar Filkolev 4482 Точки

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

1
Simooo93 avatar Simooo93 81 Точки

Абсолютно, такава беше и моята, но ме затрудни това, че нямаше как да се инстанцират и двете едновременно, защото едното иска другото. Затова, ако си погледнал моето решение си видял, че в конструктора на блоба създавам неговата атака, но за да я създам извиквам attackFactory от engine, което е грешно. Затова по-правилно щеше да е в createFactory да създам първо атака и поведение, без референция към блоба, а вече след като се подадат на блоба, тогава в неговия конструктор или в сетъра на неговата референция към атака и поведение да им се казва изрично, че тази атака и това поведение си отговарят изрично за него. 

Надявам се успях да обясня това, което исках да кажа като хората, че е доста объркано :D 

0
verito898 avatar verito898 265 Точки

Задачата от сутрешния изпит определено беше интересна, силно се надявам на поправката да дадът пак някаква игричка. 

Някой ще може ли да шерне условието от вечерния изпит ? 

0
G.nikolovv avatar G.nikolovv 5 Точки

А кога е поправката?

0
p.yordanov avatar p.yordanov 51 Точки

Мисля, че се спомена някъде към средата или края на февруари

1
tilchev92 avatar tilchev92 Trainer 128 Точки

Аз хванах 80т. с едно предване в последните 5-10 мин, когато подкарах първия нулев тест. Предполагам, че единия ми проблем за останалите, е че смятам health-a така:

Health /= 2;

При което се получава разминаване при нечетните числа и трябва да е:

Health -= Health / 2;

Това се вижда ясно като си погледнеш втория тест, но нямаше време. Малко странна ще ми е имплементацията защото аз от атаката взимам само един modifier и вече с него си работя в Blob-a.

Ето го решението ми, въпреки че не ми остана и време да оправям на protected virtual където има нужда, а сигурно и други неща съм оплескал :D

0
Filkolev avatar Filkolev 4482 Точки

Ето и моето решение: ЛИНК

Като цяло доста неща съвпадат с решението на enevlogiev

3
enevlogiev avatar enevlogiev 1168 Точки

Леле, колко ексепшъни ми липсват ... е, живи-здрави, така се учи човек : )

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

Имаше места, на които ме беше страх да не си прецакам тестовете в джъдж. Никъде в условието не е написано, че примерно името на някой блоб не може да е whitespace, или string.Empty. За health и damage - пише, че са валидни 32-битови числа. По-нагоре пише, че кръвта на блоб не трябва да се позволява да пада под нула. Всичко е въпрос на интерпретация. Можеше някой да иска да ме прецака с отрицателен damage : )

2
Filkolev avatar Filkolev 4482 Точки

Тук на помощ идват юнит тестовете. Аз примерно не се сетих, че е добре да хвърля грешка ако един блоб опита да атакува себе си. Когато се пишат тестове, се тества конкретна функционалност, да речем командата за атакуване. Когато започнеш да мислиш всички варианти какво може да ти се подаде в конкретната команда (което е доста по-ограничен набор от възможности отколкото ако мислиш изобщо какви команди може да се дадат), се досещаш кое е валидно и кое не. Валидациите, които са посочени изрично в условието, са достатъчни, за да се приеме решението за коректно, останалото е бонус. Има я и другата опасност - да направим повече валидации от необходимото и да се окаже, че хвърляме грешки когато не трябва.

2
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.