Объектно-ориентированный компилятор скриптов [тестируем]

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Объектно-ориентированный компилятор скриптов [тестируем]

Сообщение Tarantul » 09.11.2006 (Чт) 19:38

Итак, решил я как-то создать крутую 3D… и пришел к тому, что надо к ней обязательно язык сценариев, так как иначе не получиться создать real-time игру с кучей разных объектов и хорошим AI. В результате сделал свой :). Движок состоит из двух частей: DLL на C++ и VB-обертка (OCX). Язык не является полностью компилируемым: компиляция в P-Код, который сравним по быстродействию с P-Cod’ом VB. Поддерживается:
-Базовое вычисление выражений
-Разные типы данных, в том числе векторы, enum, массивы и.т.д
-Все управляющие структуры
-Процедуры/функции +native(импортированные с внешней среды по указателю)
Собственно, язык предназначен для написания сценариев для игр, потому введены следующие возможности:
-Вся структура объектно-ориентированная (классы наследуются друг от друга)
-Поддержка замещения функций, вызов Super-Функций и т.д.
-Поддержка состояний (States) , использование в них специальных real-time функций (Sleep и другие)
-и многое другое!

Плюс ко всему еще специальный контрол для иерархического (как TreeView) показа/изменения опций каждого объекта или совокупности и IDE!.
Фактически многие идеи взяты из Unreal и UnrealScript :)

Чтобы как-то продемонстрировать многие возможности движка, сделал игру-2D леталку с использование только GDI. Эта игра хорошо демонстрирует взаимодействие программы с движком скриптов и интерфейс-контролами.

В архиве есть Source игры, Engine DLL и OCX, и собственно EXE-файл игры. Чтобы ее запустить, надо перейти во вкладку “Тестирование” и нажать “Запустить”.
В состоянии редактирования можно изменять сценарии, но не забывать все перекомпилировать и сохранять! Можно устанавливать опции объекта по умолчанию и во время игры («пауза»). Если потребуется, вначале запустите Register.bat.

Проект нельзя назвать конечным Release’ом, но тем ни менее отлажен на 99,9% и вполне хорошо работает. В принципе, движок в будущем можно довести и до совершенства – до компилирования в Native код.

Жду отзывов и предложений! Может кто-то захочет использовать движ в своей игре? Любой отзыв лучше чем его отсутствие:)
У вас нет доступа для просмотра вложений в этом сообщении.

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 11.11.2006 (Сб) 10:01

А чего так глухо? :(
Только не говирите, что скачать 700 КБ непосильная задача для большинства учасников форума. Не поверю :)

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 11.11.2006 (Сб) 15:24

Я сейчас одну вещь скажу, ты только не обижайся... Проще было работать с IActiveScript и подключить один из нормальных языков, типа jscript и vbscript. Таким образом появляется возможность спокойно использовать все прелести COM(и собственные интерфейсы создавать, в частности). Если не хочется терять время на вызовы IDispatch->Invoke, то можно подключить необходиую библиотеку типов - скриптовый движок заработает напрямки через vtable. Так же стоит упомянуть базовый набор функций этих языков.
Это я всё к чему: не стоило изобретать велосипед.
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 11.11.2006 (Сб) 16:19

Много всякого... кода.

Внешне, вроде, ничего, работает. Не понравилось только асинхронное воспроизведение звуков в игре. Будет время, рассмотрю все подробней...


2 keks-n

Куда ни посмотрю, всюду ты со своим IDispatch->Invoke... Что ты там такого нашел? :|
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.11.2006 (Сб) 16:38

BV писал(а):Куда ни посмотрю, всюду ты со своим IDispatch->Invoke... Что ты там такого нашел? :|

Зато, может, он теперь перестанет перехватывать все апи подряд :-D
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 11.11.2006 (Сб) 16:46

BV
Здесь я эток его тормознутости. Все параметры надо в Variant преобразовывать.
Изображение

Neco
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 06.07.2005 (Ср) 1:21

Сообщение Neco » 11.11.2006 (Сб) 16:50

классно - мне понравилось!

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 11.11.2006 (Сб) 18:16

Спасибо всем за комменты! Пишите еще!

BV:
Звук асинхронный только из за того, что используется самое примитивное воспроизведение звука - PlaySound из WINAPI.

keks-n:
Я с самого начала понимал, что в какой-то мере изобретаю велосипед, но просто очень захотелось сделать свой язык... и сделал за 2 месяца. Причем можно сделать все под себя, чтобы сценарии писать было как можно легче и эфективнее. Например, глобальная загрузка/запись во время игры, показ опций, IDE и т.д.

P.S. Похоже уже становлюсь профи в делании 2d-леталок :D

AlexBlack
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 18.07.2005 (Пн) 19:14
Откуда: Киефф, Юкрейн...

Сообщение AlexBlack » 09.12.2006 (Сб) 1:50

прикольно.

К сожалению сейчас плотно в код залесть не могу,
не можешь сказать, как ты реализовал исполнение функций из скрипта?
Красный, но студийный.

http://www.rs-creative.com
Alex_Black@rs-creative.com

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 09.12.2006 (Сб) 19:09

CallByName на некий класс, скорее всего.
Изображение

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 12.12.2006 (Вт) 9:23

Ну я вообще делал сам скрипт-движок на С++ DLL, а там все проще :D. Небольшая ассемблерная вставка, по типу

Код: Выделить всё
push p1
push p2
....
call func

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.12.2006 (Вт) 16:50

Гм. Можно словить Access Violation. Легко. А потом его трудно отловить.
Изображение

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 12.12.2006 (Вт) 17:02

У меня в DLL-программе столько мест, где можно схватить Access Violation, что этим можно даже принебречь :) . То, что оно все работает, результат внимательного создания и упорного тестирования :)

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.12.2006 (Вт) 17:13

Проверка агрументов рулит неимоверно.
Изображение

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 13.12.2006 (Ср) 0:09

Вообще мне понравилось, мой любимый синтаксис({}) Да и ещё подсветка, редактор прикольный! Игра тоже ничё... Но вот зачем тырить маленькие корабли доминаторов, если можно стырить большие? :lol:
#define ROFL 0xDDDD

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 13.12.2006 (Ср) 11:14

DirectXManiac
У меня здесь была выложена игра, SpaceShip Unleashed,http://bbs.vbstreets.ru/viewtopic.php?t=17902&highlight=spaceship, так эти корабли все в полном составе там :) А здесь-так, только часть.
А редактор-полностью моих рук творение :) Тект выводит через BitBlt.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 20.12.2006 (Ср) 14:47

Язык не является полностью компилируемым: компиляция в P-Код, который сравним по быстродействию с P-Cod’ом VB


а что за язык, можешь дать ссылку на сайт или доки?

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 20.12.2006 (Ср) 23:16

Сайта, как и док у него нет :( (пока!)
Язык является смесью C++, javascript и VB, собственно реализует их основные возможности


Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

    TopList