1

Тема: Абстракції в ООП і все таке

Страждаю зараз над однією грою, і хочу зробити, аби все було правильно з точки зору ООП. Аби були правильні залежності і т.д.
Уявімо собі, що у нас є два гравця, котрі стоять по різні боки ігрового поля. Посередині у нас є різні перешкоди.
Кожен гравець може стріляти кулькою. Якщо кулька потрапляє в перешкоду, то вона руйнює деяку частину цієї перешкоди і зникає, при цьому руйнування залежить від радіусу вибухової хвилі.
Якщо кулька потрапляє в іншого гравця, то вибухової хвилі нема, і кулька просто знімає з ураженого гравця частину хп.
В грі можуть бути декілька видів кульок, і кожен вид може мати свою характеристики, як радіус вибухової хвилі та кількість шкоди, котру кулька нанесе, якщо стукне іншого гравця.

Вся ця фігня працює через мережу, і всі важливі події відбуваються на стороні одного з клієнтів, а команди передаються на допомогою RPC.

Так от, питання. Чи правильно буде зробити так, аби сама кулька контролювала нанесення шкоди об'єктам, та іншому гравцю?
Наприклад, в момент, коли кулька вдаряється в щось, на цій самій кульці викликається RPC, котра повідомляє, що от ми вдарили такий-то об'єкт, одну вибухову хвилю в цій позиції, і сама кулька буде змінювати об'єкт, чи кількість життів іншого гравця.
Це норм, чи нє? Бо я думав створити якийсь обробник кульок, котрий містив би всі ці RPC, і кулька просто казала б йому, що от я стукнулася в такому місці, і той обробник вже б змінював об'єкти і кількість життів у гравців?

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

2

Re: Абстракції в ООП і все таке

1. ООП - не панацея.
2. Я б не використовував RPC.
3. Надіюсь, це допоможе і наштовхне на роздуми :)

Мій блог про ОС сімейства *nix - http://nixtravelling.blogspot.com/
Подякували: 221VOLT1

3

Re: Абстракції в ООП і все таке

чому не RPC? я пишу на ООП мові то, і навчіться читати назви тем

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...
Подякували: NagarD1

4

Re: Абстракції в ООП і все таке

Можна, наприклад, ознайомитись із цим - http://bill-poole.blogspot.com/2008/03/rpc-is-bad.html
Були ще й кращі статті, але не зміг знайти.
На рахунок ООП і залежностей:
- немає єдино правильного підходу, все залежить від ситуації, як ви збираєтеся розширяти, тестувати і т.д. і т.п. спробуйте дотриматися принципу S.O.L.I.D і вже буде добре
- пам'ятайте: якщо ви можете щось зробити, це ще не означає варто зробити

Мій блог про ОС сімейства *nix - http://nixtravelling.blogspot.com/
Подякували: 221VOLT1

5

Re: Абстракції в ООП і все таке

Єдиного шляху немає. Якщо куля і гравець - різні об'єкти, то очевидно, що гравець має сам собі прописувати завдану шкоду. Зрештою, якщо там дуже складні правила, то можна створити окремий об'єкт "шкода" (damage).

Подякували: FakiNyan1

6

Re: Абстракції в ООП і все таке

koala написав:

Єдиного шляху немає. Якщо куля і гравець - різні об'єкти, то очевидно, що гравець має сам собі прописувати завдану шкоду. Зрештою, якщо там дуже складні правила, то можна створити окремий об'єкт "шкода" (damage).

та правила там дуже легкі, просто відняти від числа, що представляє кількість життів, число, котре представляє шкоду. Шкода належить кулі, життя належать гравцю. І куля викликає метод гравця, в котрий передається шкода, а гравець там вже віднімає в себе

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...
Подякували: LoganRoss1

7

Re: Абстракції в ООП і все таке

FakiNyan написав:
koala написав:

Єдиного шляху немає. Якщо куля і гравець - різні об'єкти, то очевидно, що гравець має сам собі прописувати завдану шкоду. Зрештою, якщо там дуже складні правила, то можна створити окремий об'єкт "шкода" (damage).

та правила там дуже легкі, просто відняти від числа, що представляє кількість життів, число, котре представляє шкоду. Шкода належить кулі, життя належать гравцю. І куля викликає метод гравця, в котрий передається шкода, а гравець там вже віднімає в себе

Угу, знаю. А потім ви захочете броню на перса одягнути, а потім робити деяких невразливими...

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

8

Re: Абстракції в ООП і все таке

нє, ну то звісно я захочу чогось більшого. Різні типи кульок, що мають різні ефекти, захисний бар'єр для персонажа і все таке, там багато чого придумати можна

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

9 Востаннє редагувалося iovchynnikov (05.07.2017 08:28:38)

Re: Абстракції в ООП і все таке

Зробити можна по-різному. Імхо куля не має контролювати нічого окрім себе. Куля може лише нанести шкоду. Інакше, коли додасте бар'єр і т.д. куля стане "жирною" дуже швидко.

Використайте патерн наглядач: коли пуля вдаряється, вона player.notify(damage), а вже гравець відповідно реагує. Можна цю ж логіку винести поза гравця: badPhysics.notify(player, damage), де badPhysics це об'єкт, що модифікує гравця.

Подякували: FakiNyan, quez, 221VOLT3

10

Re: Абстракції в ООП і все таке

а чо badPhysics, альо? як човен назвете  - так він й попливе, так що не тре тут

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

11

Re: Абстракції в ООП і все таке

Думаю, джавамен натякнув що то, на його думку, не найкраще рішення

Во цікава глава з цікавої книжки
http://gameprogrammingpatterns.com/observer.html

Maybe a = Just a | Nothing

12

Re: Абстракції в ООП і все таке

та я того обсервера знаю, тільки він мені тут нафіг не треба

All you want is a dingle,
What you envy's a schwang,
A thing through which you can tinkle,
Or play with, or simply let hang...

13

Re: Абстракції в ООП і все таке

FakiNyan написав:

тільки він мені тут нафіг не треба

Якщо ви так впевнені що вам вже треба, нафіг було питати?

14

Re: Абстракції в ООП і все таке

грамарнацітролохентай, строго 13+

quez написав:

А потім ви захочете броню на перса одягнути

Типу такої?
http://lurkmore.so/images/7/7e/Seiken_no_blacksmith_mugi-elf.jpg

py -3 -m pip install git+https://github.com/snoack/python-goto

15

Re: Абстракції в ООП і все таке

P.Y. написав:
грамарнацітролохентай, строго 13+

quez написав:

А потім ви захочете броню на перса одягнути

Типу такої?
http://lurkmore.so/images/7/7e/Seiken_no_blacksmith_mugi-elf.jpg

Ага. Нащо кулі знати, що в цього персонажа захищені тільки груди?

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

16

Re: Абстракції в ООП і все таке

http://lurkmore.so/images/e/e5/Law_910.jpg
Не вірите? Вийдіть на вулицю - ходять дівчата явно після автомобільної аварії абощо, джинси мало не наскрізь продерло, а на шкірі - ані подряпини.

Подякували: 0xDADA11C7, Sensetivity, Torbins3

17

Re: Абстракції в ООП і все таке

Це треба було в Смішні картинки постити.