XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > StarCraft (только чтение)> StarCraft 2 inside
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
ScorpioT1000
Работаем
online
Опыт: отключен
Galaxy: ООП на процедурном языке
Не знаю, кому будет это интересно, но неплохо было бы развить данную тему.
З.Ы. vJass использует примерно такую реализацию структур на jass.
type1 myclassname_mymembername1[];
type2 myclassname_mymembername2[];
type3 myclassname_mymembername3[];

type4 myclassname_mymethodname4(int this, <params>) {
    // ...
}
Пример класса вектора:
» Что я хочу (пример на C++):
class Vector {
    float x;
    float y;
    float z;

public:
    Vector(float x, float y, float z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
    
    ~Vector() { }
    
    void SetX(float value) {
        this.x = value;
    }

};

// ... создаем объект:

Vector & a = *new Vector(1,2,3);
a.SetX(1.5);
delete &a; // удаляем
Что я делаю:
int Vector_allocated[];
fixed Vector_x[];
fixed Vector_y[];
fixed Vector_z[];
int Vector_count = 0;

// STATIC
int IsVectorAllocated(int _this) {
    return (Vector_count > _this) && Vector_allocated[_this];
}

// METHODS

int Vector_New(fixed x, fixed y, fixed z) {
    int this = Vector_count;
    Vector_x[Vector_count] = x;
    Vector_y[Vector_count] = y;
    Vector_z[Vector_count] = z;
    Vector_allocated[Vector_count] = 1;
    // здесь можно замутить еще, если счетчик превышает максимум, делаем пробег по _allocated[i] на наличие удаленного вектора, либо вести двойную таблицу индексов, и потом последний элемент перемещать в удаленный - при удалении
    Vector_count++;
    return this;
}

void Vector_Delete(int _this) {
    if(Vector_allocated[_this]) {
        Vector_allocated[_this] = 0;
    }
}

void Vector_SetX(int _this, fixed value) {
    if(! Vector_allocated[_this]) { return; }
    Vector_x[_this] = value;
}

// итп...

// ... создаем объект:
int a = Vector_New(1,2,3);
Vector_SetX(a, 1.5);
Vector_Delete(a); // удаляем
офк это никакая не статья, ибо некогда, просто раз уш зашел об этом разговор. Но в целом я бы поддержал, если бы кто-то написал статью об этой методике)

Отредактировано ScorpioT1000, 24.01.2012 в 19:31.
Старый 24.01.2012, 18:48
XOR

offline
Опыт: 38,159
Активность:
((цитата
ScorpioT1000 (18:57:50 23/01/2012)
XiMiKs, 24.01.2012 18:51:10:
XiMiKs, 18:53:23:
или там нету ооп
jXimikS@Twitter (18:57:00 23/01/2012)
у меня ск2 нету
))
Старый 24.01.2012, 18:58
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
Пока не шаря в Галакси... у меня вопрос, это на чистом галакси написано, или размышления на околотему?
Старый 24.01.2012, 19:17
ScorpioT1000
Работаем
online
Опыт: отключен
на чистом)
Старый 24.01.2012, 19:21
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
ScorpioT1000, тогда круто, фигли.
MF добавил:
Вопрос будет только в юзабельности всего этого... надо все таки пробывать с примерами.
Старый 24.01.2012, 19:30
inoto
я буду крутым!
offline
Опыт: 6,891
Активность:
я конечно нунубло, но ты хочешь сделать класс вектор средствами С/Galaxy?
Старый 24.01.2012, 20:05
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
inoto, именно это он и сделал. Хотя по сути, это не класс, а всего лишь ряд функций, имитирующий классы. Так было и у Вексориана, в vJass, несколько функций + параллельные массивы. Правда там еще и внешне все выглядело как ооп, но парсилось потом в чистый Jass.
Старый 24.01.2012, 20:09
inoto
я буду крутым!
offline
Опыт: 6,891
Активность:
MF, хз ибо я дальше жасса решил не идти в вц3, пошёл сразу в ск2
ну да, типа класс на функциональном языке, теперь понял
вроде норм, но я ещё не шибко рулю
Старый 24.01.2012, 20:25
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
ScorpioT1000, чтобы это все делать надо писать парсер и вшивать в сам редактор. Вроде кто то ковырял уже редактор и что то получалось. Но как то все быстро заглохло. Было бы не плохо поднять это дело и написать что то типо G++ +) с классами и наследованием
Старый 24.01.2012, 20:28
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
inoto, "никто не рулит"
Посмотрим, чего у Скорпи выйдет. Идея то сама толковая, надо только пилить реальные примеры, а не голый код.
Старый 24.01.2012, 20:29
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
MF, тут главное сам принцип, а остальное можно запилить. Разве не?
Старый 24.01.2012, 20:31
inoto
я буду крутым!
offline
Опыт: 6,891
Активность:
MF, просто мне ещё не доводилось работать с векторами например в с++, да и программирование я только начал, через месяц только инженером по ИТ буду 8)
Старый 24.01.2012, 20:35
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
alexprey, принцип важен, не спорю, примеры могут показать как это юзать. Просто в такой форме мало кто поймет.
Старый 24.01.2012, 20:37
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Только не на функциональном, а процедурном наверно. ФП это лиспы, хаскели и прочие.
По сабжу можно покурить Objective-C, где весь ООП - рантайм свистелка над С.
Только вот вряд ли кто-то будет утруждать себя в написании кода в таком стиле, нужно будет писать парсер вроде jass helper (парсер vjass). Парсер можно скрутить по быстрому на любой реализации PEG грамматик, например, citrus или treetop на руби, но опять же проблема в хуках к редактору Т_Т.

Отредактировано exploder, 24.01.2012 в 21:42.
Старый 24.01.2012, 20:45
Харгард
Epic
offline
Опыт: 7,829
Активность:
С одной стороны, в игре многое можно сделать совсем без тригеров/скриптов.
А с другой, никаким гэлекси или G++ или G# не добавить интерактивные дудэды, шевелящиеся при столконовении с юнитами, честный 3Д, основанный не на двумерной карте проходимости или воду, сетку высот которой можно гибко изменять.
Кстати а вообще, дудэды можно разрушать? Атаками или способностями.
Старый 24.01.2012, 20:46
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
exploder, я про это писал постом выше что надо замутить парсер. Старик уже вышел давно а редактор еще никто не расковырял.
GraTuraL:
А с другой, никаким гэлекси или G++ или G# не добавить интерактивные дудэды, шевелящиеся при столконовении с юнитами, честный 3Д, основанный не на двумерной карте проходимости или воду, сетку высот которой можно гибко изменять.
Помойму только скриптами это и сделать
Старый 24.01.2012, 21:06
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
alexprey, просто в большинстве случаев программисты движка наоборот пишут скрипт машину как можно более легковесной (+заточеной под геймдизанеров-макак), а все дорогостоящие вычисления выносят в нейтив. Скрипты карты по сути никогда и не достигают такой сложности и размеров, когда реально требовался бы настоящий промышленный ооп и паттерны для поддержания, расширяемости, юнит тестирования, вотевар. А крутить парсер ради богомерзкой статики вроде недоопа, перегрузки операторов и макросов не прагматично.
Старый 24.01.2012, 21:22
ScorpioT1000
Работаем
online
Опыт: отключен
Фича в том что я не буду писать парсер =) если бы я писал что-то на галакси, я бы заюзал тот код что выше. Про objective-C верно замечено - векс скорее всего брал примеры именно оттуда.
Что касается хуков, поскольку phyngal.xgm.ru провалился, можно найти забугорных авторов, как те же galaxy++, и помочь им с объектностью галакси.
Но во всем этом я буду принимать участие максимум как помощник с идеями =)
ScorpioT1000 добавил:
Только не на функциональном, а процедурном наверно.
функция - это процедура, которая возвращает значение =) галакси позволяет описывать логику функциями, почему же он процедурный?
ScorpioT1000 добавил:
Посмотрел вики - да фейл =( нас не так учили.
Старый 24.01.2012, 21:37
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Нет Векс явно не ObjC вдохновлялся) Там скорее кресты, перл (module) и возможно ява.
До открытия Аппстора на обже писали только задроты в эпл.
Старый 24.01.2012, 21:38
ScorpioT1000
Работаем
online
Опыт: отключен
exploder, да я перепутал, я имел ввиду не обджект си, а первые версии C++, которые компилировались в C. Это яркий представитель транслятора ООП в ПП =) обжект си вобще какаято херня
Старый 24.01.2012, 21:41

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 17:53.