Кът на програмиста...
Moderator: Moridin
- The Dragon
- Elder God
- Posts: 9062
- Joined: Wed Jan 14, 2004 9:03 pm
- Roamer
- Ascendent
- Posts: 4895
- Joined: Wed Jan 03, 2007 5:25 pm
- Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
- Contact:
За бонуса - много зависи от операционната ти система
Ако беше под нещо нормално, щях да ти кажа FUSE, ама като те знам и като говориш за устройството като "драйв", вероятно използваш некви други, дето FUSE не работи 
Иначе за Windows може да пробваш FTP Drive или NetDrive или Novell NetDrive или, ако си склонен да пробваш 20-дневна тестова версия и после да мислиш какво да правиш, WebDrive. Само че не знам кое от тези работи за сравнително нови версии на Windows


Иначе за Windows може да пробваш FTP Drive или NetDrive или Novell NetDrive или, ако си склонен да пробваш 20-дневна тестова версия и после да мислиш какво да правиш, WebDrive. Само че не знам кое от тези работи за сравнително нови версии на Windows

Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.
Ed: It's not good, Eric. It's a gazebo.
Един риъл лайф проблем.
.
В миниигрите които правим ("Не се сърди човече" да кажем) трябва да въведем система за ачийвмънти. Например: 3 поредни 6ци, дабъл кил в един ход, бутане на някой след 3 поредни 6ци, победа след като някой от противниците е бил с обиколка преднина, най-много поредни 1ци в цялото лоби и така нататък,
Очевидното и още по-очевидно грозно решение е да бухам данните в някакви масиви и на всеки хвърлен зар или каран ход да проверявам дали се е изпълнило някое от милионите условия, което сериозно ще утежни, загрози и удължи кода, да не говорим за това какви психо данни трябва да пазя за това с обиколката напред. Освен това всеки нов измъдрен от мениджмънта ачийвмънт си е ново кило код в кацата.
Тааа, мислех за някакво по-елегантно решение. Първото нещо което ми идва на мозъка е шаблона Observer, сега ще го гледам дали може да ми свърши работа, но ако някой има някаква хитра хрумка ще се радвам да я сподели.

В миниигрите които правим ("Не се сърди човече" да кажем) трябва да въведем система за ачийвмънти. Например: 3 поредни 6ци, дабъл кил в един ход, бутане на някой след 3 поредни 6ци, победа след като някой от противниците е бил с обиколка преднина, най-много поредни 1ци в цялото лоби и така нататък,
Очевидното и още по-очевидно грозно решение е да бухам данните в някакви масиви и на всеки хвърлен зар или каран ход да проверявам дали се е изпълнило някое от милионите условия, което сериозно ще утежни, загрози и удължи кода, да не говорим за това какви психо данни трябва да пазя за това с обиколката напред. Освен това всеки нов измъдрен от мениджмънта ачийвмънт си е ново кило код в кацата.
Тааа, мислех за някакво по-елегантно решение. Първото нещо което ми идва на мозъка е шаблона Observer, сега ще го гледам дали може да ми свърши работа, но ако някой има някаква хитра хрумка ще се радвам да я сподели.

I like rusty spoons....
I like to touch them...
It's almost orgasmic...
I like to touch them...
It's almost orgasmic...
- Roamer
- Ascendent
- Posts: 4895
- Joined: Wed Jan 03, 2007 5:25 pm
- Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
- Contact:
Мисля, че няма по-красив вариант от това с проверката на всичко на всеки ход; без нея няма да минеш. Красотата / улеснението може да ти е в това *как* правиш тази проверка. Аз лично бих измислил система от hooks - "дошъл е моят ред", "преди хвърляне", "след хвърляне", "преди движение", "след движение" и евентуално "цапардосах друг", "вкарах пионка", "получих божествено откровение" и т.н. На всеки такъв hook да закачиш списък от handlers... и така.
Handler-ите пък да си имат някакви опростени броячи - примерно това за трите поредни шестици да е клас с едно поле - брой последователни шестици. Лошото е, че, да, някои handler-и ще искат достъп до информация и за другите играчи... ама няма как.
Може и да има нещо по-елегантно, ама... не се сещам на прима виста.
Handler-ите пък да си имат някакви опростени броячи - примерно това за трите поредни шестици да е клас с едно поле - брой последователни шестици. Лошото е, че, да, някои handler-и ще искат достъп до информация и за другите играчи... ама няма как.
Може и да има нещо по-елегантно, ама... не се сещам на прима виста.
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.
Ed: It's not good, Eric. It's a gazebo.
- The Dragon
- Elder God
- Posts: 9062
- Joined: Wed Jan 14, 2004 9:03 pm
- Roamer
- Ascendent
- Posts: 4895
- Joined: Wed Jan 03, 2007 5:25 pm
- Location: Hier ist hier und jetzt ist jetzt doch jetzt ist jetzt schon nicht mehr da...
- Contact:
Драгън, ако имаш предвид едно дърво, което да обхваща едновременно *всички* ачийвмънти.... ъъъъъ, не, sowwy, тая няма да я бъде
Първо, повечето от тях са независими един от друг, ама напълно. После, при всяко добавяне на нова порода ачийвмънт - какво - ще сядаш с листа и химикалката, ще препострояваш дървото и после ще пренаписваш всичките 3000 реда код? Ъъъъъ. Не. 
Да не говорим за това, че различните условия трябва - или поне, ако не сега, в един момент *ще* се наложи, помнете ми думата - да бъдат проверявани в различни моменти в lifecycle-а на един ход.
Ако имаш предвид все пак по дърво на ачийвмънт - така може би повече може, ама тогава пък не виждам за какво е нужно цяло дърво, като за повечето наистина е достатъчен един брояч или масив от броячи, по един за играч. Добавено: А тези, за които брояч не е достатъчен, би трябвало все пак да стават с прост краен автомат. Пак не става за дърво.


Да не говорим за това, че различните условия трябва - или поне, ако не сега, в един момент *ще* се наложи, помнете ми думата - да бъдат проверявани в различни моменти в lifecycle-а на един ход.
Ако имаш предвид все пак по дърво на ачийвмънт - така може би повече може, ама тогава пък не виждам за какво е нужно цяло дърво, като за повечето наистина е достатъчен един брояч или масив от броячи, по един за играч. Добавено: А тези, за които брояч не е достатъчен, би трябвало все пак да стават с прост краен автомат. Пак не става за дърво.
Eric: I use my sword to detect good on it.
Ed: It's not good, Eric. It's a gazebo.
Ed: It's not good, Eric. It's a gazebo.
На какъв език го правиш това? Ако е някакъв обектен (Java, C#, C++(брр)) вариант на тема observer е добър. На всеки ход се праща event със snapshot на текущото състояние на играта (или diff спрямо предишния snapshot, или каквото си избереш или ти трябва там). Имаш си някакъв event manager, който разпраща event-ите на заинтересовани listener-и, а те си ги обработват както си знаят. Плюса тук е, че можеш да имплементираш всеки achievement като самостоятелен клас, който ти имплементира listener интерфейса, така че няма да ти се налага да държиш на едно място масиви от броячи и кода ще стане четивен, а и закачането на нов achievement е просто да се регистрира един нов listener към dispatcher-а. Можеш да направиш филтър за интересите на listener-ите, за да се намали разпращането на event-и, както и да изпращаш event-ите асинхронно за да няма евентуално забавяне между ходовете.
Elves dig rocket launchers.
- Moridin
- Global Moderator
- Posts: 19290
- Joined: Fri Dec 19, 2003 10:21 pm
- Location: On the other side
- Contact:
И мойта виждане е нещо като това на Пенчев, т.е. грубо казано аспект програминг, а обсървърът е пак вариант на същото с малко излишна струва ми се инфраструктура.
Не можеш да минеш без проверките. Производителността няма как да се качи. Замисли се как човек би го направил. Можеш да се стремиш единствено към неинтрузивен код с минимален мейнтейнънс, което си е очертано от приказките на термо и пенчев.
естествено ако новият ачийвмънт е мамата си трака, ще ти трябват още хуукс или ивенти или както му викаме в случая и пак пренаписване, това също е неизбежно. не виждам как може да се направи пълна абстракция, но можете като програмисти да кажете на дизайнерите - майната ви, имате тия събития като възможност, действайте различни варианти с тях. иначе е мамата си джаса.
Не можеш да минеш без проверките. Производителността няма как да се качи. Замисли се как човек би го направил. Можеш да се стремиш единствено към неинтрузивен код с минимален мейнтейнънс, което си е очертано от приказките на термо и пенчев.
естествено ако новият ачийвмънт е мамата си трака, ще ти трябват още хуукс или ивенти или както му викаме в случая и пак пренаписване, това също е неизбежно. не виждам как може да се направи пълна абстракция, но можете като програмисти да кажете на дизайнерите - майната ви, имате тия събития като възможност, действайте различни варианти с тях. иначе е мамата си джаса.
This is it. Ground zero.
Добавка, вариант с повече от един hook или event не е добър в случая, защото пак може да се наложи да се добавят нови hook-ове или event-и заради някой achievement, за който не си се сетил докато си правил началния дизайн. Според мен трябва да се дефинира един snapshot point, момент в играта, в който имаме стабилно текущо състояние (играчът е преместил пионката си в "Не се сърди човече", или е взел ръка в игра на белот) и event/hook да се вика само в този случай.
@Мор - не мисля, че допълнителната инфраструктура е излишна в случая. По-добре е да не се товари модула на играта с излишен код - поддържане на списъци с handler-и, регистрация/премахване на регистрация, викане на методи - това така или иначе трябва да се изнесе в една библиотека, по-добре е да е самостоятелен manager мисля си.
@Мор - не мисля, че допълнителната инфраструктура е излишна в случая. По-добре е да не се товари модула на играта с излишен код - поддържане на списъци с handler-и, регистрация/премахване на регистрация, викане на методи - това така или иначе трябва да се изнесе в една библиотека, по-добре е да е самостоятелен manager мисля си.
Elves dig rocket launchers.
Who is online
Users browsing this forum: No registered users and 2 guests